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 3d95857..8f18a4c 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", @@ -36,6 +36,7 @@ "onLanguage:go", "onLanguage:haskell", "onLanguage:html", + "onLanguage:java-properties", "onLanguage:java", "onLanguage:javascript", "onLanguage:javascriptreact", @@ -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..061a6d7 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -11,9 +11,9 @@ 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" }, c: { module: "tree-sitter-c" }, clojure: { module: "tree-sitter-clojure" }, @@ -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" }, @@ -68,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 @@ -141,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}`); @@ -184,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; @@ -243,13 +249,14 @@ 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(); 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() );