Skip to content

Commit 750fe62

Browse files
committed
Merge remote-tracking branch 'origin/main' into fork
2 parents b7eeb73 + 260356d commit 750fe62

File tree

10 files changed

+138
-1363
lines changed

10 files changed

+138
-1363
lines changed

.github/workflows/deploy.yaml

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
name: Deploy
2+
3+
on:
4+
workflow_dispatch:
5+
6+
jobs:
7+
publish-extension:
8+
name: Publish to marketplace
9+
runs-on: ubuntu-latest
10+
environment: production
11+
steps:
12+
- name: Checkout repository
13+
uses: actions/checkout@v4
14+
15+
- name: Set up Node.js
16+
uses: actions/setup-node@v4
17+
with:
18+
node-version-file: .nvmrc
19+
cache: yarn
20+
21+
- name: Install dependencies
22+
run: yarn install
23+
24+
- name: Publish to Open VSX Registry
25+
id: publishToOpenVSX
26+
uses: HaaLeo/publish-vscode-extension@v1
27+
with:
28+
pat: ${{ secrets.OPEN_VSX_TOKEN }}
29+
30+
- name: Publish to Visual Studio Marketplace
31+
uses: HaaLeo/publish-vscode-extension@v1
32+
with:
33+
pat: ${{ secrets.VS_MARKETPLACE_TOKEN }}
34+
registryUrl: https://marketplace.visualstudio.com
35+
extensionFile: ${{ steps.publishToOpenVSX.outputs.vsixPath }}

.nvmrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
v21.1.0

.vscodeignore

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,7 @@ vsc-extension-quickstart.md
88
**/tslint.json
99
**/*.map
1010
**/*.ts
11-
examples/**
11+
examples/**
12+
.github/**
13+
copy-assets.sh
14+
.nvmrc

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22

33
All notable changes to the "vscode-parse-tree" extension will be documented in this file.
44

5+
## 0.33.0 (22 Apr 2025)
6+
7+
### Enhancements
8+
9+
- Stop building wasm and instead use dependency `@cursorless/tree-sitter-wasms` [#103](https://github.com/cursorless-dev/vscode-parse-tree/pull/103) ([AndreasArvidsson](https://github.com/AndreasArvidsson))
10+
511
## 0.32.0 (25 Oct 2024)
612

713
### Enhancements

README.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,11 @@ registerLanguage(languageId, wasmPath);
4343

4444
It's straightforward to add any [language with a tree-sitter grammar](https://tree-sitter.github.io/tree-sitter/).
4545

46-
1. First you need to add the package for that language to the [WASMs repo](https://github.com/cursorless-dev/tree-sitter-wasms). Submit a pull request to that repository, with the npm package for your language's tree-sitter added using `pnpm add -D tree-sitter-yourlang`, and wait for a new version to be released. It should be very quick.
46+
1. Add a dependency on the npm package for that language in [tree-sitter-wasms](https://github.com/cursorless-dev/tree-sitter-wasms)
4747
2. Add a language to the dictionary at the top of `./src/extension.ts`
4848
3. Add a reference to `onLanguage:yourlang` to the [activationEvents section of package.json](package.json). `yourlang` must be a [VSCode language identifier](https://code.visualstudio.com/docs/languages/identifiers).
49-
4. Update the `tree-sitter-wasms` dependency version in the `devDependencies` section of packages.json
50-
6. Run `yarn compile`, then hit `F5` in VSCode, with this project open, to test your changes.
51-
7. Submit a PR!
49+
4. Run `yarn compile`, then hit `F5` in VSCode, with this project open, to test your changes.
50+
5. Submit a PR!
5251

5352
### Developing on WSL2
5453

copy-assets.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
cp -r node_modules/@cursorless/tree-sitter-wasms/out parsers

package.json

Lines changed: 7 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "parse-tree",
33
"displayName": "Parse tree",
44
"description": "Access document syntax using tree-sitter",
5-
"version": "0.32.1",
5+
"version": "0.36.0",
66
"publisher": "pokey",
77
"repository": {
88
"type": "git",
@@ -76,7 +76,8 @@
7676
"contributes": {},
7777
"scripts": {
7878
"vscode:prepublish": "npm run compile",
79-
"compile": "tsc -p ./ && make parsers",
79+
"compile": "tsc -p ./ && npm run copy-assets",
80+
"copy-assets": "sh copy-assets.sh",
8081
"watch": "tsc -watch -p ./",
8182
"test": "npm run compile && node ./out/test",
8283
"benchmark": "npm run compile && node ./out/benchmark",
@@ -86,61 +87,18 @@
8687
"publish": "vsce publish patch"
8788
},
8889
"devDependencies": {
89-
"@electron/rebuild": "^3.3.0",
90-
"@elm-tooling/tree-sitter-elm": "github:elm-tooling/tree-sitter-elm#0aecfbf69f0c9bcdfada0f6f2c5398235c23949f",
90+
"@cursorless/tree-sitter-wasms": "0.2.5",
9191
"@types/mocha": "^2.2.42",
9292
"@types/node": "^8.10.25",
9393
"@types/vscode": "~1.58.0",
9494
"@typescript-eslint/eslint-plugin": "^6.11.0",
9595
"@typescript-eslint/parser": "^6.11.0",
9696
"@vscode/test-electron": "^2.1.3",
97-
"eslint": "^8.53.0",
9897
"eslint-config-prettier": "^9.0.0",
99-
"tree-sitter-agda": "github:pokey/tree-sitter-agda#e5fba6cabe8c7fc7993ced2b86704f3841215284",
100-
"tree-sitter-bash": "github:tree-sitter/tree-sitter-bash#2fbd860f802802ca76a6661ce025b3a3bca2d3ed",
101-
"tree-sitter-c": "github:tree-sitter/tree-sitter-c#deca017a554045b4c203e7ddff39ae64ff05e071",
102-
"tree-sitter-c-sharp": "^0.19.0",
103-
"tree-sitter-cli": "^0.22.6",
104-
"tree-sitter-clojure": "github:sogaiu/tree-sitter-clojure#f4236d4da8aa92bc105d9c118746474c608e6af7",
105-
"tree-sitter-cpp": "github:tree-sitter/tree-sitter-cpp#9d412ba7e597fe158f209da33e60f31b1f0df967",
106-
"tree-sitter-css": "^0.19.0",
107-
"tree-sitter-dart": "github:UserNobody14/tree-sitter-dart#9ac03bb2154316624fb4c41fe0f372a5f1597b43",
108-
"tree-sitter-elixir": "github:elixir-lang/tree-sitter-elixir#b20eaa75565243c50be5e35e253d8beb58f45d56",
109-
"tree-sitter-gleam": "github:gleam-lang/tree-sitter-gleam#2012f294baacf30e7a62414754021284377366c6",
110-
"tree-sitter-go": "github:tree-sitter/tree-sitter-go#bbaa67a180cfe0c943e50c55130918be8efb20bd",
111-
"tree-sitter-haskell": "github:tree-sitter/tree-sitter-haskell#a50070d5bb5bd5c1281740a6102ecf1f4b0c4f19",
112-
"tree-sitter-hcl": "github:MichaHoffmann/tree-sitter-hcl#e135399cb31b95fac0760b094556d1d5ce84acf0",
113-
"tree-sitter-html": "github:tree-sitter/tree-sitter-html#e4d834eb4918df01dcad5c27d1b15d56e3bd94cd",
114-
"tree-sitter-java": "github:tree-sitter/tree-sitter-java#ac14b4b1884102839455d32543ab6d53ae089ab7",
115-
"tree-sitter-javascript": "github:tree-sitter/tree-sitter-javascript#391a8fcc48a11f63bf18ec9885f6f069e760949a",
116-
"tree-sitter-json": "github:tree-sitter/tree-sitter-json#94f5c527b2965465956c2000ed6134dd24daf2a7",
117-
"tree-sitter-julia": "github:tree-sitter/tree-sitter-julia#e2f449e2bcc95f1d07ceb62d67f986005f73a6be",
118-
"tree-sitter-kotlin": "github:fwcd/tree-sitter-kotlin#76f53c48d29e8588934fb55b0240d7bdfe00bfe5",
119-
"tree-sitter-latex": "github:latex-lsp/tree-sitter-latex#1666e9780de42a31b1376d32fbe8332e8dd5850f",
120-
"tree-sitter-lua": "github:MunifTanjim/tree-sitter-lua#9668709211b2e683f27f414454a8b51bf0a6bda1",
121-
"tree-sitter-markdown": "github:tree-sitter-grammars/tree-sitter-markdown#7fe453beacecf02c86f7736439f238f5bb8b5c9b",
122-
"tree-sitter-nix": "github:nix-community/tree-sitter-nix#66e3e9ce9180ae08fc57372061006ef83f0abde7",
123-
"tree-sitter-perl": "github:ganezdragon/tree-sitter-perl#3d3a95ee6645d7bcd993e77b252ffd33fd297c8e",
124-
"tree-sitter-php": "github:tree-sitter/tree-sitter-php#4f124bc6075e1c3333e80190c1c170933ed72c95",
125-
"tree-sitter-python": "github:tree-sitter/tree-sitter-python#71778c2a472ed00a64abf4219544edbf8e4b86d7",
126-
"tree-sitter-query": "github:nvim-treesitter/tree-sitter-query#5217c6805c09f8fc00ed13d17d5fcb791437aee6",
127-
"tree-sitter-r": "^1.1.0",
128-
"tree-sitter-ruby": "github:tree-sitter/tree-sitter-ruby#dc2d7d6b50f9975bc3c35bbec0ba11b2617b736b",
129-
"tree-sitter-rust": "github:tree-sitter/tree-sitter-rust#36ae187ed6dd3803a8a89dbb54f3124c8ee74662",
130-
"tree-sitter-scala": "github:tree-sitter/tree-sitter-scala#master",
131-
"tree-sitter-scss": "github:serenadeai/tree-sitter-scss#c478c6868648eff49eb04a4df90d703dc45b312a",
132-
"tree-sitter-sparql": "^0.1.0",
133-
"tree-sitter-swift": "github:alex-pinkus/tree-sitter-swift#7e4ccc97a25315022a70b730085deccd5680a39b",
134-
"tree-sitter-talon": "github:pokey/tree-sitter-talon#f69923ea2490530babe105f0a36434e4a23e127e",
135-
"tree-sitter-typescript": "github:tree-sitter/tree-sitter-typescript#4ad3010c91d700026d036b5230e2d99ba94ae8a4",
136-
"tree-sitter-xml": "github:ObserverOfTime/tree-sitter-xml#648183d86f6f8ffb240ea11b4c6873f6f45d8b67",
137-
"tree-sitter-yaml": "github:tree-sitter-grammars/tree-sitter-yaml#7b03feefd36b5f155465ca736c6304aca983b267",
98+
"eslint": "^8.53.0",
13899
"typescript": "^4.5.5"
139100
},
140101
"dependencies": {
141-
"jsonc-parser": "^2.1.0",
142-
"tar": ">=4.4.2",
143-
"web-tree-sitter": "^0.24.6"
144-
},
145-
"packageManager": "[email protected]+sha512.5383cc12567a95f1d668fbe762dfe0075c595b4bfff433be478dbbe24e05251a8e8c3eb992a986667c1d53b6c3a9c85b8398c35a960587fbd9fa3a0915406728"
102+
"web-tree-sitter": "^0.25.3"
103+
}
146104
}

src/extension.ts

Lines changed: 51 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import * as vscode from "vscode";
2-
import * as Parser from "web-tree-sitter";
2+
import * as treeSitter from "web-tree-sitter";
33
import * as path from "path";
4+
import * as fs from "fs";
45
import { LanguageStillLoadingError, UnsupportedLanguageError } from "./errors";
56

67
interface Language {
78
module: string;
8-
parser?: Parser;
9+
parser?: treeSitter.Parser;
910
}
1011

1112
// Be sure to declare the language in package.json and include a minimalist grammar.
@@ -16,7 +17,7 @@ const languages: {
1617
c: { module: "tree-sitter-c" },
1718
clojure: { module: "tree-sitter-clojure" },
1819
cpp: { module: "tree-sitter-cpp" },
19-
csharp: { module: "tree-sitter-c-sharp" },
20+
csharp: { module: "tree-sitter-c_sharp" },
2021
css: { module: "tree-sitter-css" },
2122
dart: { module: "tree-sitter-dart" },
2223
elm: { module: "tree-sitter-elm" },
@@ -59,13 +60,13 @@ const languages: {
5960
};
6061

6162
// For some reason this crashes if we put it inside activate
62-
const initParser = Parser.init(); // TODO this isn't a field, suppress package member coloring like Go
63+
const initParser = treeSitter.Parser.init(); // TODO this isn't a field, suppress package member coloring like Go
6364

6465
// Called when the extension is first activated by user opening a file with the appropriate language
6566
export async function activate(context: vscode.ExtensionContext) {
6667
console.debug("Activating tree-sitter...");
6768
// Parse of all visible documents
68-
const trees: { [uri: string]: Parser.Tree } = {};
69+
const trees: { [uri: string]: treeSitter.Tree } = {};
6970

7071
/**
7172
* Load the parser model for a given language
@@ -92,10 +93,14 @@ export async function activate(context: vscode.ExtensionContext) {
9293
);
9394
}
9495

96+
if (!fs.existsSync(absolute)) {
97+
throw Error(`Parser for ${languageId} not found at ${absolute}`);
98+
}
99+
95100
const wasm = path.relative(process.cwd(), absolute);
96101
await initParser;
97-
const lang = await Parser.Language.load(wasm);
98-
const parser = new Parser();
102+
const lang = await treeSitter.Language.load(wasm);
103+
const parser = new treeSitter.Parser();
99104
parser.setLanguage(lang);
100105
language.parser = parser;
101106

@@ -113,7 +118,10 @@ export async function activate(context: vscode.ExtensionContext) {
113118
}
114119

115120
const language = languages[document.languageId];
116-
const t = language.parser!.parse(document.getText()); // TODO don't use getText, use Parser.Input
121+
const t = language.parser?.parse(document.getText());
122+
if (t == null) {
123+
throw Error(`Failed to parse ${document.uri}`);
124+
}
117125
trees[uriString] = t;
118126
}
119127

@@ -124,14 +132,14 @@ export async function activate(context: vscode.ExtensionContext) {
124132
}
125133

126134
const language = languages[document.languageId];
127-
if (language == null) {
128-
return null;
129-
}
130-
if (language.parser == null) {
135+
if (language?.parser == null) {
131136
return null;
132137
}
133138

134-
const t = language.parser.parse(document.getText()); // TODO don't use getText, use Parser.Input
139+
const t = language.parser.parse(document.getText());
140+
if (t == null) {
141+
throw Error(`Failed to parse ${document.uri}`);
142+
}
135143
trees[uriString] = t;
136144
return t;
137145
}
@@ -145,7 +153,10 @@ export async function activate(context: vscode.ExtensionContext) {
145153
updateTree(language.parser, edit);
146154
}
147155

148-
function updateTree(parser: Parser, edit: vscode.TextDocumentChangeEvent) {
156+
function updateTree(
157+
parser: treeSitter.Parser,
158+
edit: vscode.TextDocumentChangeEvent
159+
) {
149160
if (edit.contentChanges.length === 0) {
150161
return;
151162
}
@@ -170,12 +181,17 @@ export async function activate(context: vscode.ExtensionContext) {
170181
};
171182
old.edit(delta);
172183
}
173-
const t = parser.parse(edit.document.getText(), old); // TODO don't use getText, use Parser.Input
184+
const t = parser.parse(edit.document.getText(), old);
185+
if (t == null) {
186+
throw Error(`Failed to parse ${edit.document.uri}`);
187+
}
174188
trees[edit.document.uri.toString()] = t;
175189
}
176-
function asPoint(pos: vscode.Position): Parser.Point {
190+
191+
function asPoint(pos: vscode.Position): treeSitter.Point {
177192
return { row: pos.line, column: pos.character };
178193
}
194+
179195
function close(document: vscode.TextDocument) {
180196
delete trees[document.uri.toString()];
181197
}
@@ -240,8 +256,25 @@ export async function activate(context: vscode.ExtensionContext) {
240256
return {
241257
loadLanguage,
242258

243-
getLanguage(languageId: string): Parser.Language | undefined {
244-
return languages[languageId]?.parser?.getLanguage();
259+
/**
260+
* @deprecated
261+
*/
262+
getLanguage(languageId: string): treeSitter.Language | undefined {
263+
console.warn(
264+
"vscode-parse-tree: getLanguage is deprecated, use createQuery(languageId, source) instead."
265+
);
266+
return languages[languageId]?.parser?.language ?? undefined;
267+
},
268+
269+
createQuery(
270+
languageId: string,
271+
source: string
272+
): treeSitter.Query | undefined {
273+
const language = languages[languageId]?.parser?.language;
274+
if (language == null) {
275+
return undefined;
276+
}
277+
return new treeSitter.Query(language, source);
245278
},
246279

247280
/**

src/global.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
interface EmscriptenModule {}

0 commit comments

Comments
 (0)