Skip to content

Commit 260356d

Browse files
Update Tree sitter version (#104)
* Update version of web-tree-sitter * Clean up * Clean up * Clean up * Cleanup * Update version * Expose create query function
1 parent 4539d59 commit 260356d

File tree

4 files changed

+52
-23
lines changed

4 files changed

+52
-23
lines changed

package.json

Lines changed: 2 additions & 2 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.35.0",
5+
"version": "0.36.0",
66
"publisher": "pokey",
77
"repository": {
88
"type": "git",
@@ -98,6 +98,6 @@
9898
"typescript": "^4.5.5"
9999
},
100100
"dependencies": {
101-
"web-tree-sitter": "^0.24.6"
101+
"web-tree-sitter": "^0.25.3"
102102
}
103103
}

src/extension.ts

Lines changed: 45 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +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";
44
import * as fs from "fs";
55
import { LanguageStillLoadingError, UnsupportedLanguageError } from "./errors";
66

77
interface Language {
88
module: string;
9-
parser?: Parser;
9+
parser?: treeSitter.Parser;
1010
}
1111

1212
// Be sure to declare the language in package.json and include a minimalist grammar.
@@ -59,13 +59,13 @@ const languages: {
5959
};
6060

6161
// 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
62+
const initParser = treeSitter.Parser.init(); // TODO this isn't a field, suppress package member coloring like Go
6363

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

7070
/**
7171
* Load the parser model for a given language
@@ -98,8 +98,8 @@ export async function activate(context: vscode.ExtensionContext) {
9898

9999
const wasm = path.relative(process.cwd(), absolute);
100100
await initParser;
101-
const lang = await Parser.Language.load(wasm);
102-
const parser = new Parser();
101+
const lang = await treeSitter.Language.load(wasm);
102+
const parser = new treeSitter.Parser();
103103
parser.setLanguage(lang);
104104
language.parser = parser;
105105

@@ -117,7 +117,10 @@ export async function activate(context: vscode.ExtensionContext) {
117117
}
118118

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

@@ -128,14 +131,14 @@ export async function activate(context: vscode.ExtensionContext) {
128131
}
129132

130133
const language = languages[document.languageId];
131-
if (language == null) {
132-
return null;
133-
}
134-
if (language.parser == null) {
134+
if (language?.parser == null) {
135135
return null;
136136
}
137137

138-
const t = language.parser.parse(document.getText()); // TODO don't use getText, use Parser.Input
138+
const t = language.parser.parse(document.getText());
139+
if (t == null) {
140+
throw Error(`Failed to parse ${document.uri}`);
141+
}
139142
trees[uriString] = t;
140143
return t;
141144
}
@@ -149,7 +152,10 @@ export async function activate(context: vscode.ExtensionContext) {
149152
updateTree(language.parser, edit);
150153
}
151154

152-
function updateTree(parser: Parser, edit: vscode.TextDocumentChangeEvent) {
155+
function updateTree(
156+
parser: treeSitter.Parser,
157+
edit: vscode.TextDocumentChangeEvent
158+
) {
153159
if (edit.contentChanges.length === 0) {
154160
return;
155161
}
@@ -174,12 +180,17 @@ export async function activate(context: vscode.ExtensionContext) {
174180
};
175181
old.edit(delta);
176182
}
177-
const t = parser.parse(edit.document.getText(), old); // TODO don't use getText, use Parser.Input
183+
const t = parser.parse(edit.document.getText(), old);
184+
if (t == null) {
185+
throw Error(`Failed to parse ${edit.document.uri}`);
186+
}
178187
trees[edit.document.uri.toString()] = t;
179188
}
180-
function asPoint(pos: vscode.Position): Parser.Point {
189+
190+
function asPoint(pos: vscode.Position): treeSitter.Point {
181191
return { row: pos.line, column: pos.character };
182192
}
193+
183194
function close(document: vscode.TextDocument) {
184195
delete trees[document.uri.toString()];
185196
}
@@ -244,8 +255,25 @@ export async function activate(context: vscode.ExtensionContext) {
244255
return {
245256
loadLanguage,
246257

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

251279
/**

src/global.d.ts

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

yarn.lock

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1075,10 +1075,10 @@ util-deprecate@~1.0.1:
10751075
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
10761076
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
10771077

1078-
web-tree-sitter@^0.24.6:
1079-
version "0.24.6"
1080-
resolved "https://registry.yarnpkg.com/web-tree-sitter/-/web-tree-sitter-0.24.6.tgz#05d15f15ca506a2615b7a97b3abc5183923812f2"
1081-
integrity sha512-NVG40wwFerkvOSsrY2NE56nKpzwCpn8VT51gqZZaIfkBCMu+0JZLFVwJlZLPO01Ewfq3+Xg+NY4Bot5GD0L03g==
1078+
web-tree-sitter@^0.25.3:
1079+
version "0.25.3"
1080+
resolved "https://registry.yarnpkg.com/web-tree-sitter/-/web-tree-sitter-0.25.3.tgz#dec6784149f2bd3bb55e1675a7c334b015c860dd"
1081+
integrity sha512-e0hdXG+nJ18Zd/QJFhSx0DNTSMz7miwUjKyJ/lglTnZo6ke08++BQzXkaeaqnGJFi9qq+nPJg2L8hYAjduToHQ==
10821082

10831083
which@^2.0.1:
10841084
version "2.0.2"

0 commit comments

Comments
 (0)