From 6d6a0212b77f04ca11ef43152ecd3daa2ef939ce Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Thu, 28 Aug 2025 10:23:17 +0200 Subject: [PATCH 1/4] Added properties parser --- package.json | 5 +++-- src/extension.ts | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 3d95857..441e1fe 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "parse-tree", "displayName": "Parse tree", "description": "Access document syntax using tree-sitter", - "version": "0.39.0", + "version": "0.40.0", "publisher": "pokey", "repository": { "type": "git", @@ -50,6 +50,7 @@ "onLanguage:nix", "onLanguage:perl", "onLanguage:php", + "onLanguage:properties", "onLanguage:python", "onLanguage:r", "onLanguage:ruby", @@ -88,7 +89,7 @@ "publish": "vsce publish patch" }, "devDependencies": { - "@cursorless/tree-sitter-wasms": "0.4.0", + "@cursorless/tree-sitter-wasms": "0.5.0", "@types/mocha": "^2.2.42", "@types/node": "^8.10.25", "@types/vscode": "~1.58.0", diff --git a/src/extension.ts b/src/extension.ts index f78ae3e..0d366bf 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -21,8 +21,8 @@ const languages: { csharp: { module: "tree-sitter-c_sharp" }, css: { module: "tree-sitter-css" }, dart: { module: "tree-sitter-dart" }, - elm: { module: "tree-sitter-elm" }, elixir: { module: "tree-sitter-elixir" }, + elm: { module: "tree-sitter-elm" }, gdscript: { module: "tree-sitter-gdscript" }, gleam: { module: "tree-sitter-gleam" }, go: { module: "tree-sitter-go" }, @@ -42,6 +42,7 @@ const languages: { nix: { module: "tree-sitter-nix" }, perl: { module: "tree-sitter-perl" }, php: { module: "tree-sitter-php" }, + properties: { module: "tree-sitter-properties" }, python: { module: "tree-sitter-python" }, r: { module: "tree-sitter-r" }, ruby: { module: "tree-sitter-ruby" }, From 4530f9a6daf9d5842aeeb441ade4e57eeac74001 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Thu, 28 Aug 2025 11:14:59 +0200 Subject: [PATCH 2/4] Change language id --- package-lock.json | 12 ++++++------ package.json | 2 +- src/extension.ts | 5 +++-- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 13a710a..13b23bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,19 +1,19 @@ { "name": "parse-tree", - "version": "0.39.0", + "version": "0.40.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "parse-tree", - "version": "0.39.0", + "version": "0.40.0", "license": "MIT", "dependencies": { "semver": "7.7.2", "web-tree-sitter": "^0.25.3" }, "devDependencies": { - "@cursorless/tree-sitter-wasms": "0.4.0", + "@cursorless/tree-sitter-wasms": "0.5.0", "@types/mocha": "^2.2.42", "@types/node": "^8.10.25", "@types/vscode": "~1.58.0", @@ -29,9 +29,9 @@ } }, "node_modules/@cursorless/tree-sitter-wasms": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@cursorless/tree-sitter-wasms/-/tree-sitter-wasms-0.4.0.tgz", - "integrity": "sha512-rshcplosenB5fEotjgnA9z0G+XnYg3K3oeeHDez+iUzz/vQJOjxCJCgzK584a5vqQL6E5lvZRImDmNFplOkhlw==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@cursorless/tree-sitter-wasms/-/tree-sitter-wasms-0.5.0.tgz", + "integrity": "sha512-DfDVFlt1jpCABgPtZNHbQrcky6yqbAUIjDyI8Z21Dl09b6Af1QgT0yKtdNEHOy/NW7jev4oO7roElSE6xgFX1Q==", "dev": true, "license": "Unlicense" }, diff --git a/package.json b/package.json index 441e1fe..8f18a4c 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "onLanguage:go", "onLanguage:haskell", "onLanguage:html", + "onLanguage:java-properties", "onLanguage:java", "onLanguage:javascript", "onLanguage:javascriptreact", @@ -50,7 +51,6 @@ "onLanguage:nix", "onLanguage:perl", "onLanguage:php", - "onLanguage:properties", "onLanguage:python", "onLanguage:r", "onLanguage:ruby", diff --git a/src/extension.ts b/src/extension.ts index 0d366bf..40b1a0c 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -14,6 +14,8 @@ interface Language { const languages: { [id: string]: Language; } = { + // eslint-disable-next-line @typescript-eslint/naming-convention + "java-properties": { module: "tree-sitter-properties" }, agda: { module: "tree-sitter-agda" }, c: { module: "tree-sitter-c" }, clojure: { module: "tree-sitter-clojure" }, @@ -42,7 +44,6 @@ const languages: { nix: { module: "tree-sitter-nix" }, perl: { module: "tree-sitter-perl" }, php: { module: "tree-sitter-php" }, - properties: { module: "tree-sitter-properties" }, python: { module: "tree-sitter-python" }, r: { module: "tree-sitter-r" }, ruby: { module: "tree-sitter-ruby" }, @@ -250,7 +251,7 @@ export async function activate(context: vscode.ExtensionContext) { function getTreeForUri(uri: vscode.Uri) { const ret = trees[uri.toString()]; - if (typeof ret === "undefined") { + if (ret == null) { const document = vscode.workspace.textDocuments.find( (textDocument) => textDocument.uri.toString() === uri.toString() ); From e0d0cad1f91473a78abb6157ad57d6b22651f133 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Thu, 28 Aug 2025 11:18:34 +0200 Subject: [PATCH 3/4] Make types stricter --- src/extension.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 40b1a0c..22f93b4 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -11,9 +11,7 @@ interface Language { } // Be sure to declare the language in package.json and include a minimalist grammar. -const languages: { - [id: string]: Language; -} = { +const languages: Record = { // eslint-disable-next-line @typescript-eslint/naming-convention "java-properties": { module: "tree-sitter-properties" }, agda: { module: "tree-sitter-agda" }, @@ -70,7 +68,7 @@ const initParser = treeSitter.Parser.init(); // TODO this isn't a field, suppres export async function activate(context: vscode.ExtensionContext) { console.debug("Activating tree-sitter..."); // Parse of all visible documents - const trees: { [uri: string]: treeSitter.Tree } = {}; + const trees: Record = {}; /** * FIXME: On newer vscode versions some Tree sitter parser throws memory errors @@ -143,6 +141,9 @@ export async function activate(context: vscode.ExtensionContext) { } const language = languages[document.languageId]; + if (language?.parser == null) { + throw new Error(`No parser for language ${document.languageId}`); + } const t = language.parser?.parse(document.getText()); if (t == null) { throw Error(`Failed to parse ${document.uri}`); @@ -186,6 +187,9 @@ export async function activate(context: vscode.ExtensionContext) { return; } const old = trees[edit.document.uri.toString()]; + if (old == null) { + throw new Error(`No existing tree for ${edit.document.uri}`); + } for (const e of edit.contentChanges) { const startIndex = e.rangeOffset; const oldEndIndex = e.rangeOffset + e.rangeLength; From 4b439959280bde34be39398cd80758af8903f151 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Thu, 28 Aug 2025 11:22:47 +0200 Subject: [PATCH 4/4] Clean up --- src/extension.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/extension.ts b/src/extension.ts index 22f93b4..061a6d7 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -249,6 +249,7 @@ export async function activate(context: vscode.ExtensionContext) { context.subscriptions.push( vscode.workspace.onDidOpenTextDocument(openIfVisible) ); + // Don't wait for the initial color, it takes too long to inspect the themes and causes VSCode extension host to hang colorAllOpen();