diff --git a/extension/src/StatusBarController.ts b/extension/src/StatusBarController.ts index 44f37a022..403edd270 100644 --- a/extension/src/StatusBarController.ts +++ b/extension/src/StatusBarController.ts @@ -39,6 +39,7 @@ export class StatusBarController { commands.registerCommand('grammarly.pauseCheck', async (uri?: Uri) => { const id = uri ?? window.activeTextEditor?.document.uri if (id == null) return + await this.grammarly.client.protocol.pause(id.toString()) await this.update() }), diff --git a/package.json b/package.json index 7650fe44f..3e0eea456 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { "private": true, "engines": { - "node": "^16.20.0", - "pnpm": "^8.1.1" + "node": "^18.18.2", + "pnpm": "^8.8.0" }, "scripts": { "build": "rollup -c && node scripts/build-web-extension.mjs", @@ -32,8 +32,8 @@ "rollup": "^2.71.1", "rollup-plugin-copy": "^3.4.0", "semver": "^7.3.7", - "tree-sitter-cli": "^0.20.6", - "tree-sitter-html": "^0.19.0", + "tree-sitter-cli": "^0.20.8", + "tree-sitter-html": "^0.20.0", "tree-sitter-markdown": "^0.7.1", "tslib": "^2.4.0", "typescript": "^4.6.4", diff --git a/packages/grammarly-languageclient/src/protocol.ts b/packages/grammarly-languageclient/src/protocol.ts index 4023b1252..74a07e7ad 100644 --- a/packages/grammarly-languageclient/src/protocol.ts +++ b/packages/grammarly-languageclient/src/protocol.ts @@ -23,6 +23,7 @@ export function createProtocol(client: BaseLanguageClient): Protocol { } else { return async (...args: unknown[]): Promise => { try { + await client.onReady() const result = await client.sendRequest(`$/${property}`, args) return result } catch (error) { diff --git a/packages/grammarly-languageserver/package.json b/packages/grammarly-languageserver/package.json index 5e24046ea..b294e3552 100644 --- a/packages/grammarly-languageserver/package.json +++ b/packages/grammarly-languageserver/package.json @@ -76,7 +76,7 @@ "reflect-metadata": "^0.1.13", "vscode-languageserver": "^7.0.0", "vscode-languageserver-textdocument": "^1.0.4", - "web-tree-sitter": "0.20.5" + "web-tree-sitter": "^0.20.8" }, "devDependencies": { "domhandler": "^5.0.3" diff --git a/packages/grammarly-richtext-encoder/package.json b/packages/grammarly-richtext-encoder/package.json index 2a622472f..b04307953 100644 --- a/packages/grammarly-richtext-encoder/package.json +++ b/packages/grammarly-richtext-encoder/package.json @@ -24,7 +24,7 @@ "dist" ], "dependencies": { - "web-tree-sitter": "0.20.5" + "web-tree-sitter": "^0.20.8" }, "devDependencies": { "@grammarly/sdk": "^2.3.17", diff --git a/packages/grammarly-richtext-encoder/src/index.ts b/packages/grammarly-richtext-encoder/src/index.ts index 130612aa1..1ade742e7 100644 --- a/packages/grammarly-richtext-encoder/src/index.ts +++ b/packages/grammarly-richtext-encoder/src/index.ts @@ -16,19 +16,36 @@ export async function createParser(language: string): Promise { return await parser async function createParserInner() { - await Parser.init() - - const parser = new Parser() - parser.setLanguage(await Parser.Language.load(getLanguageFile())) - parsers.set(language, parser) - parsersPending.delete(language) + if (isNodeJS()) { + const fetch = globalThis.fetch + try { + // @ts-ignore + globalThis.fetch = null + await Parser.init() + } catch (e) { + console.log('Error in TreeSitter parser:', e) + throw e + } finally { + globalThis.fetch = fetch + } + } else { + await Parser.init() + } - return parser + try { + const parser = new Parser() + parser.setLanguage(await Parser.Language.load(getLanguageFile())) + parsers.set(language, parser) + parsersPending.delete(language) + return parser + } catch (e) { + console.log(`Error in TreeSitter ${language} parser:`, e) + throw e + } } function getLanguageFile(): string | Uint8Array { - // @ts-ignore - Ignore if process does not exist. - if (typeof process !== 'undefined' && process.versions?.node != null) { + if (isNodeJS()) { // @ts-ignore if (process.env.NODE_ENV === 'test') { // @ts-ignore @@ -42,4 +59,9 @@ export async function createParser(language: string): Promise { } } +function isNodeJS(): boolean { + // @ts-ignore - Ignore if process does not exist. + return typeof process !== 'undefined' && process.versions?.node != null +} + export const transformers = { html, markdown } as const diff --git a/tree-sitter/tree-sitter-html.wasm b/parsers/tree-sitter-html.wasm similarity index 100% rename from tree-sitter/tree-sitter-html.wasm rename to parsers/tree-sitter-html.wasm diff --git a/tree-sitter/tree-sitter-markdown.wasm b/parsers/tree-sitter-markdown.wasm similarity index 100% rename from tree-sitter/tree-sitter-markdown.wasm rename to parsers/tree-sitter-markdown.wasm diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6740e4200..275f54646 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,5 +1,9 @@ lockfileVersion: '6.0' +settings: + autoInstallPeers: false + excludeLinksFromLockfile: false + neverBuiltDependencies: - keytar - tree-sitter-cli @@ -68,11 +72,11 @@ importers: specifier: ^7.3.7 version: 7.3.7 tree-sitter-cli: - specifier: ^0.20.6 - version: 0.20.6 + specifier: ^0.20.8 + version: 0.20.8 tree-sitter-html: - specifier: ^0.19.0 - version: 0.19.0 + specifier: ^0.20.0 + version: 0.20.0 tree-sitter-markdown: specifier: ^0.7.1 version: 0.7.1 @@ -142,8 +146,8 @@ importers: specifier: ^1.0.4 version: 1.0.4 web-tree-sitter: - specifier: 0.20.5 - version: 0.20.5 + specifier: ^0.20.8 + version: 0.20.8 devDependencies: domhandler: specifier: ^5.0.3 @@ -152,8 +156,8 @@ importers: packages/grammarly-richtext-encoder: dependencies: web-tree-sitter: - specifier: 0.20.5 - version: 0.20.5 + specifier: ^0.20.8 + version: 0.20.8 devDependencies: '@grammarly/sdk': specifier: ^2.3.17 @@ -5453,6 +5457,10 @@ packages: resolution: {integrity: sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==} dev: true + /nan@2.18.0: + resolution: {integrity: sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==} + dev: true + /napi-build-utils@1.0.2: resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} dev: true @@ -6867,15 +6875,15 @@ packages: punycode: 2.1.1 dev: true - /tree-sitter-cli@0.20.6: - resolution: {integrity: sha512-tjbAeuGSMhco/EnsThjWkQbDIYMDmdkWsTPsa/NJAW7bjaki9P7oM9TkLxfdlnm4LXd1wR5wVSM2/RTLtZbm6A==} + /tree-sitter-cli@0.20.8: + resolution: {integrity: sha512-XjTcS3wdTy/2cc/ptMLc/WRyOLECRYcMTrSWyhZnj1oGSOWbHLTklgsgRICU3cPfb0vy+oZCC33M43u6R1HSCA==} hasBin: true dev: true - /tree-sitter-html@0.19.0: - resolution: {integrity: sha512-xH6XGSBWzb4oU/aG6gouMRQKsd96iKuy0zboUqo3wcIWrA++q9a7CmQTSeIINiSfOXjT2ZLJciXFDgAh6h04Bw==} + /tree-sitter-html@0.20.0: + resolution: {integrity: sha512-KoK3BR1o5KWeYFGax1Dy8j+NHHhdgD64pjFU/JgnBrZjmdp4CfJg2HJiWnmB8OmFYQeb30Mm+lDVps2dNFJMdw==} dependencies: - nan: 2.15.0 + nan: 2.18.0 dev: true /tree-sitter-markdown@0.7.1: @@ -7199,8 +7207,8 @@ packages: engines: {node: '>= 8'} dev: true - /web-tree-sitter@0.20.5: - resolution: {integrity: sha512-mpXlqIeEBE5Q71cnBnt8w6XKhIiKmllPECqsIFBtMvzcfCxA8+614iyMJXBCQo95Vs3y1zORLqiLJn25pYZ4Tw==} + /web-tree-sitter@0.20.8: + resolution: {integrity: sha512-weOVgZ3aAARgdnb220GqYuh7+rZU0Ka9k9yfKtGAzEYMa6GgiCzW9JjQRJyCJakvibQW+dfjJdihjInKuuCAUQ==} dev: false /webidl-conversions@3.0.1: diff --git a/rollup.config.js b/rollup.config.js index a34279f59..f3c775e98 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -43,7 +43,7 @@ function wasm(file) { return copy({ targets: [ { - src: Path.resolve(__dirname, 'tree-sitter/tree-sitter-{html,markdown}.wasm'), + src: Path.resolve(__dirname, 'parsers/tree-sitter-{html,markdown}.wasm'), dest: Path.dirname(file), }, ], diff --git a/scripts/build-wasm.mjs b/scripts/build-wasm.mjs index dcefa7a8f..45b246c7a 100644 --- a/scripts/build-wasm.mjs +++ b/scripts/build-wasm.mjs @@ -17,5 +17,5 @@ for (const language in packageNameByLanguage) { execSync(`$(pnpm bin)/tree-sitter build-wasm ${resolve(rootDir, `node_modules/${packageName}`)}`, { stdio: 'inherit', }) - execSync(`mv ${packageName}.wasm tree-sitter/tree-sitter-${language}.wasm`, { stdio: 'inherit' }) + execSync(`mv ${packageName}.wasm parsers/tree-sitter-${language}.wasm`, { stdio: 'inherit' }) }