Skip to content

Commit cf1bb74

Browse files
authored
Add Vyper language support (#30)
* Add Vyper extension * Stop assuming file extension is .sol
1 parent 86e7d98 commit cf1bb74

File tree

9 files changed

+58
-24
lines changed

9 files changed

+58
-24
lines changed

.eslintignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
*.md
22
*.js
3+
**/node_modules

packages/ethereum-viewer/src/explorer/fetchFiles.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { assert, StrictOmit } from "ts-essentials";
44
import { fetch as _fetch } from "../util/fetch";
55
import { prettyStringify } from "../util/stringify";
66
import * as types from "./api-types";
7+
import { fileExtension } from "./fileExtension";
78
import { ApiName, explorerApiKeys, explorerApiUrls } from "./networks";
89

910
interface FetchFilesOptions {
@@ -80,7 +81,7 @@ export async function fetchFiles(
8081

8182
files = prefixFiles(files, info.ContractName);
8283
} else {
83-
files[info.ContractName + ".sol"] = sourceCode;
84+
files[info.ContractName + fileExtension(info)] = sourceCode;
8485
}
8586

8687
if (
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export function fileExtension(info: { CompilerVersion: string }) {
2+
if (info.CompilerVersion.startsWith("vyper:")) return ".vy";
3+
return ".sol";
4+
}

packages/ethereum-viewer/src/extension.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import * as vscode from "vscode";
2-
import { addresses } from "./addresses";
32

43
import { registerContributedCommands } from "./contributedCommands";
54
import { executeHostCommand } from "./executeHostCommand";

packages/ethereum-viewer/src/openContractSource.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
} from "vscode";
99

1010
import * as explorer from "./explorer";
11+
import { fileExtension } from "./explorer/fileExtension";
1112
import {
1213
FileSystem,
1314
MemFSTextSearchProvider,
@@ -86,15 +87,17 @@ function getMainContractFile(
8687
files: [string, ...unknown[]][],
8788
info: explorer.FetchFilesResult["info"]
8889
): string {
90+
const ext = fileExtension(info);
91+
8992
let fileToShow =
9093
info.implementation &&
9194
files.find(([path]) =>
92-
path.endsWith(`/${info.implementation!.ContractName}.sol`)
95+
path.endsWith(`/${info.implementation!.ContractName}${ext}`)
9396
);
9497

9598
if (!fileToShow)
9699
fileToShow = files.find(([path]) =>
97-
path.endsWith(`/${info.ContractName}.sol`)
100+
path.endsWith(`/${info.ContractName}${ext}`)
98101
);
99102

100103
if (!fileToShow) fileToShow = files.sort(byPathLength)[0];

packages/vscode-host/scripts/copyExtensions.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,26 @@ const {
1212
log,
1313
} = require("./util");
1414

15+
const { additionalExtensions } = require("./prepareAdditionalExtensions");
16+
1517
function copyExtensions() {
1618
log.info("Copying extensions to ./dist directory...");
1719

1820
chdir(__dirname, "../vscode");
1921

2022
const extensions = [
21-
// our additional built-in extensions
23+
// main built-in extension, responsible for fetching and displaying contracts
2224
{
2325
extensionPath: "ethereum-viewer",
2426
packageJSON: require("../../ethereum-viewer/package.json"),
2527
packageNLS: null,
2628
},
27-
{
28-
extensionPath: "solidity-lang",
29-
packageJSON: require("../additional-extensions/solidity-lang/package.json"),
29+
// additional built-in extensions, Solidity and Vyper language support
30+
...additionalExtensions.map((ext) => ({
31+
extensionPath: ext.name,
32+
packageJSON: ext.getPackageJSON(),
3033
packageNLS: null,
31-
},
34+
})),
3235
];
3336

3437
// copy our additional built-in extensions

packages/vscode-host/scripts/prepareAdditionalExtensions.js

Lines changed: 36 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,31 @@
33
const { chdir, execSync, existsSync, log, rimraf } = require("./util");
44
const { argv } = require("./argv");
55

6+
const additionalExtensions = [
7+
{
8+
name: "solidity-lang",
9+
repo: "https://github.com/hasparus/vscode-solidity-extenstion.git",
10+
branchOrTag: "v1.3.0",
11+
getPackageJSON: () =>
12+
// @ts-ignore
13+
require("../additional-extensions/solidity-lang/package.json"),
14+
},
15+
{
16+
name: "vscode-vyper-syntax",
17+
repo: "https://github.com/dethcrypto/vscode-vyper.git",
18+
branchOrTag: "minimal-extension",
19+
getPackageJSON: () =>
20+
// @ts-ignore
21+
require("../additional-extensions/vscode-vyper-syntax/package.json"),
22+
},
23+
];
24+
625
function prepareAdditionalExtensions() {
726
log.info("Cloning additional built-in extensions...");
827

928
chdir(__dirname, "../additional-extensions");
1029

11-
const extensions = [
12-
{
13-
name: "solidity-lang",
14-
repo: "https://github.com/hasparus/vscode-solidity-extenstion.git",
15-
tag: "v1.3.0",
16-
},
17-
];
18-
19-
for (const ext of extensions) {
30+
for (const ext of additionalExtensions) {
2031
if (argv.force) rimraf(`./${ext.name}`);
2132

2233
if (existsSync(ext.name)) {
@@ -25,17 +36,27 @@ function prepareAdditionalExtensions() {
2536
);
2637
} else {
2738
execSync(
28-
`git clone --depth 1 --branch ${ext.tag} ${ext.repo} ${ext.name}`,
39+
`git clone --depth 1 --branch ${ext.branchOrTag} ${ext.repo} ${ext.name}`,
2940
{ stdio: "inherit" }
3041
);
31-
execSync(["yarn --production", argv.verbose && "--verbose"], {
32-
stdio: "inherit",
33-
cwd: `./${ext.name}`,
34-
});
42+
43+
/** @type {import("child_process").ExecSyncOptions} */
44+
const options = { stdio: "inherit", cwd: `./${ext.name}` };
45+
46+
const packageJSON = ext.getPackageJSON();
47+
if ("package-web" in packageJSON.scripts) {
48+
log.info(`Installing dependencies for ${ext.name}...`);
49+
execSync(["yarn", argv.verbose && "--verbose"], options);
50+
log.info(`Compiling ${ext.name}...`);
51+
execSync(["yarn package-web", argv.verbose && "--verbose"], options);
52+
} else {
53+
log.info(`Installing production dependencies for ${ext.name}...`);
54+
execSync(["yarn --production", argv.verbose && "--verbose"], options);
55+
}
3556
}
3657
}
3758
}
3859

39-
module.exports = { prepareAdditionalExtensions };
60+
module.exports = { prepareAdditionalExtensions, additionalExtensions };
4061

4162
if (require.main === module) prepareAdditionalExtensions();

packages/vscode-host/src/workbench/contrib/welcome/gettingStarted/browser/gettingStarted.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1076,6 +1076,7 @@ export class GettingStartedPage extends EditorPane {
10761076
return `src="${src}"`;
10771077
}
10781078

1079+
console.log(">> joinPath", { base, src })
10791080
const path = joinPath(base, src);
10801081
const transformed = asWebviewUri(path).toString();
10811082
return `src="${transformed}"`;

pnpm-workspace.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
packages:
22
- "packages/*"
33
- "!packages/vscode-host"
4+
- "!packages/vscode-host/**"

0 commit comments

Comments
 (0)