From 01ed6a17828f80f11f0050c9a46c545f17fcc2b2 Mon Sep 17 00:00:00 2001 From: Johnson Chu Date: Tue, 3 Jan 2023 11:14:49 +0800 Subject: [PATCH] feat: add Pug tools (#2274) --- .github/workflows/test.yml | 2 +- .vscode/launch.json | 17 ++ lerna.json | 1 + package.json | 5 +- .../language-server/src/common/project.ts | 2 +- packages/language-server/src/common/server.ts | 2 +- .../src/common/utils/registerFeatures.ts | 44 ++- packages/language-server/src/types.ts | 2 +- plugins/pug/src/index.ts | 3 + plugins/pug/tsconfig.build.json | 2 +- pnpm-lock.yaml | 260 ++++++++++-------- pnpm-workspace.yaml | 1 + .../pug-language-server}/LICENSE | 0 .../bin/pug-language-server.js | 8 + .../pug-language-server/package.json | 23 ++ .../pug-language-server/src/index.ts | 15 + .../pug-language-server/tsconfig.build.json | 26 ++ .../pug-language-service/LICENSE | 21 ++ .../pug-language-service/package.json | 2 +- .../pug-language-service/src/baseParse.ts | 0 .../pug-language-service/src/index.ts | 0 .../pug-language-service/src/pugDocument.ts | 0 .../src/services/completion.ts | 0 .../src/services/documentHighlight.ts | 0 .../src/services/documentLinks.ts | 0 .../src/services/documentSymbol.ts | 0 .../src/services/foldingRanges.ts | 0 .../src/services/hover.ts | 0 .../src/services/quoteComplete.ts | 0 .../src/services/scanner.ts | 0 .../src/services/selectionRanges.ts | 0 .../pug-language-service/tsconfig.build.json | 8 +- pug-language-tools/vscode-pug/.vscodeignore | 5 + pug-language-tools/vscode-pug/LICENSE | 21 ++ pug-language-tools/vscode-pug/README.md | 3 + pug-language-tools/vscode-pug/client.js | 3 + pug-language-tools/vscode-pug/package.json | 55 ++++ .../vscode-pug/scripts/build.js | 31 +++ pug-language-tools/vscode-pug/server.js | 3 + pug-language-tools/vscode-pug/src/client.ts | 50 ++++ .../vscode-pug/tsconfig.build.json | 24 ++ tsconfig.build.json | 9 +- .../tsconfig.build.json | 2 +- .../vue-language-service/tsconfig.build.json | 7 +- 44 files changed, 509 insertions(+), 148 deletions(-) rename {packages/pug-language-service => pug-language-tools/pug-language-server}/LICENSE (100%) create mode 100755 pug-language-tools/pug-language-server/bin/pug-language-server.js create mode 100644 pug-language-tools/pug-language-server/package.json create mode 100644 pug-language-tools/pug-language-server/src/index.ts create mode 100644 pug-language-tools/pug-language-server/tsconfig.build.json create mode 100644 pug-language-tools/pug-language-service/LICENSE rename {packages => pug-language-tools}/pug-language-service/package.json (91%) rename {packages => pug-language-tools}/pug-language-service/src/baseParse.ts (100%) rename {packages => pug-language-tools}/pug-language-service/src/index.ts (100%) rename {packages => pug-language-tools}/pug-language-service/src/pugDocument.ts (100%) rename {packages => pug-language-tools}/pug-language-service/src/services/completion.ts (100%) rename {packages => pug-language-tools}/pug-language-service/src/services/documentHighlight.ts (100%) rename {packages => pug-language-tools}/pug-language-service/src/services/documentLinks.ts (100%) rename {packages => pug-language-tools}/pug-language-service/src/services/documentSymbol.ts (100%) rename {packages => pug-language-tools}/pug-language-service/src/services/foldingRanges.ts (100%) rename {packages => pug-language-tools}/pug-language-service/src/services/hover.ts (100%) rename {packages => pug-language-tools}/pug-language-service/src/services/quoteComplete.ts (100%) rename {packages => pug-language-tools}/pug-language-service/src/services/scanner.ts (100%) rename {packages => pug-language-tools}/pug-language-service/src/services/selectionRanges.ts (100%) rename {packages => pug-language-tools}/pug-language-service/tsconfig.build.json (51%) create mode 100644 pug-language-tools/vscode-pug/.vscodeignore create mode 100644 pug-language-tools/vscode-pug/LICENSE create mode 100644 pug-language-tools/vscode-pug/README.md create mode 100644 pug-language-tools/vscode-pug/client.js create mode 100644 pug-language-tools/vscode-pug/package.json create mode 100644 pug-language-tools/vscode-pug/scripts/build.js create mode 100644 pug-language-tools/vscode-pug/server.js create mode 100644 pug-language-tools/vscode-pug/src/client.ts create mode 100644 pug-language-tools/vscode-pug/tsconfig.build.json diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index dca795bee..b527984ec 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -22,6 +22,6 @@ jobs: # install pnpm - run: npm i -g pnpm - - run: pnpm install --frozen-lockfile --no-optional --filter "." --filter "./packages/**" --filter "./plugins/**" --filter "./vue-language-tools/**" + - run: pnpm install --frozen-lockfile --no-optional - run: pnpm run build-ci - run: pnpm run test diff --git a/.vscode/launch.json b/.vscode/launch.json index cf487d4b6..0146ac263 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -19,6 +19,23 @@ "script": "watch" } }, + { + "name": "Launch Pug", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": [ + "--disable-extensions", + "--extensionDevelopmentPath=${workspaceRoot}/pug-language-tools/vscode-pug" + ], + "outFiles": [ + "${workspaceRoot}/*/*/out/**/*.js" + ], + "preLaunchTask": { + "type": "npm", + "script": "watch" + } + }, { "name": "Launch Svelte Example", "type": "extensionHost", diff --git a/lerna.json b/lerna.json index 4916c90c3..2ec144933 100644 --- a/lerna.json +++ b/lerna.json @@ -6,6 +6,7 @@ "extensions/*", "packages/*", "plugins/*", + "pug-language-tools/*", "vue-language-tools/*" ], "version": "1.0.19" diff --git a/package.json b/package.json index 1b87d1d34..7406f5968 100644 --- a/package.json +++ b/package.json @@ -9,10 +9,11 @@ "watch:typescript-vue-plugin": "cd ./extensions/vscode-typescript-vue-plugin && npm run watch", "prerelease": "npm run build && npm run test", "version:test": "lerna version --exact --force-publish --yes --sync-workspace-lock --no-push --no-git-tag-version", - "release": "npm run release:base && npm run release:vue-language-features && npm run release:typescript-vue-plugin", + "release": "npm run release:base && npm run release:vue && npm run release:pug && npm run release:typescript-vue-plugin", "release:base": "lerna publish --exact --force-publish --yes --sync-workspace-lock", "release:base-next": "lerna publish --exact --force-publish --yes --sync-workspace-lock --dist-tag next", - "release:vue-language-features": "cd ./extensions/vscode-vue-language-features && npm run release", + "release:vue": "cd ./extensions/vscode-vue-language-features && npm run release", + "release:pug": "cd ./pug-language-tools/vscode-pug && npm run release", "release:typescript-vue-plugin": "cd ./extensions/vscode-typescript-vue-plugin && npm run release", "test": "vitest run", "docs:dev": "cd docs && npm run dev", diff --git a/packages/language-server/src/common/project.ts b/packages/language-server/src/common/project.ts index 65455e0aa..4c0653a05 100644 --- a/packages/language-server/src/common/project.ts +++ b/packages/language-server/src/common/project.ts @@ -271,7 +271,7 @@ function createParsedCommandLine( tsConfig: path.PosixPath | ts.CompilerOptions, plugins: ReturnType[], ): ts.ParsedCommandLine { - const extraFileExtensions = plugins.map(plugin => plugin.extraFileExtensions).flat(); + const extraFileExtensions = plugins.map(plugin => plugin.extraFileExtensions ?? []).flat(); try { let content: ts.ParsedCommandLine; if (typeof tsConfig === 'string') { diff --git a/packages/language-server/src/common/server.ts b/packages/language-server/src/common/server.ts index e7e4a404a..682d54b74 100644 --- a/packages/language-server/src/common/server.ts +++ b/packages/language-server/src/common/server.ts @@ -99,7 +99,7 @@ export function createCommonLanguageServer(context: ServerContext) { 'jsx', 'tsx', 'json', - ...plugins.map(plugin => plugin.extraFileExtensions.map(ext => ext.extension)).flat(), + ...plugins.map(plugin => plugin.extraFileExtensions?.map(ext => ext.extension) ?? []).flat(), ].join(',')}}` }, ] diff --git a/packages/language-server/src/common/utils/registerFeatures.ts b/packages/language-server/src/common/utils/registerFeatures.ts index 08ccc17dd..521e1c19e 100644 --- a/packages/language-server/src/common/utils/registerFeatures.ts +++ b/packages/language-server/src/common/utils/registerFeatures.ts @@ -133,11 +133,23 @@ export function setupCapabilities( if (!initOptions.respectClientCapabilities || params.textDocument?.inlayHint) { server.inlayHintProvider = true; } - if (!initOptions.respectClientCapabilities || params.textDocument?.diagnostic && (initOptions.diagnosticModel ?? DiagnosticModel.Push) === DiagnosticModel.Pull) { + if ((!initOptions.respectClientCapabilities || params.textDocument?.diagnostic) && (initOptions.diagnosticModel ?? DiagnosticModel.Push) === DiagnosticModel.Pull) { server.diagnosticProvider = { documentSelector: [ - ...plugins.map(plugin => plugin.extraFileExtensions.map(ext => ({ pattern: `**/*.${ext.extension}` }))).flat(), - { pattern: '**/*.{ts,js,tsx,jsx}' }, + { + pattern: `**/*.{${[ + 'js', + 'cjs', + 'mjs', + 'ts', + 'cts', + 'mts', + 'jsx', + 'tsx', + // 'json', + ...plugins.map(plugin => plugin.extraFileExtensions?.map(ext => ext.extension) ?? []).flat(), + ].join(',')}}` + } ], interFileDependencies: true, workspaceDiagnostics: false, @@ -150,16 +162,22 @@ export function setupCapabilities( fileOperations: { willRename: { filters: [ - ...plugins.map(plugin => plugin.extraFileExtensions.map(ext => ({ pattern: { glob: `**/*.${ext.extension}` } }))).flat(), - { pattern: { glob: '**/*.js' } }, - { pattern: { glob: '**/*.cjs' } }, - { pattern: { glob: '**/*.mjs' } }, - { pattern: { glob: '**/*.ts' } }, - { pattern: { glob: '**/*.cts' } }, - { pattern: { glob: '**/*.mts' } }, - { pattern: { glob: '**/*.jsx' } }, - { pattern: { glob: '**/*.tsx' } }, - { pattern: { glob: '**/*.json' } }, + { + pattern: { + glob: `**/*.{${[ + 'js', + 'cjs', + 'mjs', + 'ts', + 'cts', + 'mts', + 'jsx', + 'tsx', + 'json', + ...plugins.map(plugin => plugin.extraFileExtensions?.map(ext => ext.extension) ?? []).flat(), + ].join(',')}}` + } + }, ] } } diff --git a/packages/language-server/src/types.ts b/packages/language-server/src/types.ts index 5067f459f..4ece96504 100644 --- a/packages/language-server/src/types.ts +++ b/packages/language-server/src/types.ts @@ -41,7 +41,7 @@ export type LanguageServerPlugin< C = embeddedLS.LanguageService > = (initOptions: A) => { - extraFileExtensions: ts.FileExtensionInfo[]; + extraFileExtensions?: ts.FileExtensionInfo[]; resolveLanguageServiceHost?( ts: typeof import('typescript/lib/tsserverlibrary'), diff --git a/plugins/pug/src/index.ts b/plugins/pug/src/index.ts index 46a91bf0d..6019141a3 100644 --- a/plugins/pug/src/index.ts +++ b/plugins/pug/src/index.ts @@ -48,6 +48,7 @@ export default function (): LanguageServicePlugin & ReturnType= 16.8.0 < 19.0.0' react: '>= 16.8.0 < 19.0.0' @@ -802,7 +830,7 @@ packages: dependencies: '@algolia/autocomplete-core': 1.7.2 '@algolia/autocomplete-preset-algolia': 1.7.2_algoliasearch@4.14.2 - '@docsearch/css': 3.3.0 + '@docsearch/css': 3.3.1 algoliasearch: 4.14.2 transitivePeerDependencies: - '@algolia/client-search' @@ -825,176 +853,176 @@ packages: resolution: {integrity: sha512-8HqW8EVqjnCmWXVpqAOZf+EGESdkR27odcMMMGefgKXtar00SoYNSryGv//TELI4T3QFsECo78p+0lmalk/CFA==} dev: false - /@esbuild/android-arm/0.16.12: - resolution: {integrity: sha512-CTWgMJtpCyCltrvipZrrcjjRu+rzm6pf9V8muCsJqtKujR3kPmU4ffbckvugNNaRmhxAF1ZI3J+0FUIFLFg8KA==} + /@esbuild/android-arm/0.16.13: + resolution: {integrity: sha512-JmtqThupn9Yf+FzANE+GG73ASUkssnPwOsndUElhp23685QzRK+MO1UompOlBaXV9D5FTuYcPnw7p4mCq2YbZQ==} engines: {node: '>=12'} cpu: [arm] os: [android] requiresBuild: true optional: true - /@esbuild/android-arm64/0.16.12: - resolution: {integrity: sha512-0LacmiIW+X0/LOLMZqYtZ7d4uY9fxYABAYhSSOu+OGQVBqH4N5eIYgkT7bBFnR4Nm3qo6qS3RpHKVrDASqj/uQ==} + /@esbuild/android-arm64/0.16.13: + resolution: {integrity: sha512-r4xetsd1ez1NF9/9R2f9Q6AlxqiZLwUqo7ICOcvEVwopVkXUcspIjEbJk0EVTgT6Cp5+ymzGPT6YNV0ievx4yA==} engines: {node: '>=12'} cpu: [arm64] os: [android] requiresBuild: true optional: true - /@esbuild/android-x64/0.16.12: - resolution: {integrity: sha512-sS5CR3XBKQXYpSGMM28VuiUnbX83Z+aWPZzClW+OB2JquKqxoiwdqucJ5qvXS8pM6Up3RtJfDnRQZkz3en2z5g==} + /@esbuild/android-x64/0.16.13: + resolution: {integrity: sha512-hKt1bFht/Vtp0xJ0ZVzFMnPy1y1ycmM3KNnp3zsyZfQmw7nhs2WLO4vxdR5YG+6RsHKCb2zbZ3VwlC0Tij0qyA==} engines: {node: '>=12'} cpu: [x64] os: [android] requiresBuild: true optional: true - /@esbuild/darwin-arm64/0.16.12: - resolution: {integrity: sha512-Dpe5hOAQiQRH20YkFAg+wOpcd4PEuXud+aGgKBQa/VriPJA8zuVlgCOSTwna1CgYl05lf6o5els4dtuyk1qJxQ==} + /@esbuild/darwin-arm64/0.16.13: + resolution: {integrity: sha512-ogrVuNi2URocrr3Ps20f075EMm9V7IeenOi9FRj4qdbT6mQlwLuP4l90PW2iBrKERx0oRkcZprEUNsz/3xd7ww==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] requiresBuild: true optional: true - /@esbuild/darwin-x64/0.16.12: - resolution: {integrity: sha512-ApGRA6X5txIcxV0095X4e4KKv87HAEXfuDRcGTniDWUUN+qPia8sl/BqG/0IomytQWajnUn4C7TOwHduk/FXBQ==} + /@esbuild/darwin-x64/0.16.13: + resolution: {integrity: sha512-Agajik9SBGiKD7FPXE+ExW6x3MgA/dUdpZnXa9y1tyfE4lKQx+eQiknSdrBnWPeqa9wL0AOvkhghmYhpVkyqkA==} engines: {node: '>=12'} cpu: [x64] os: [darwin] requiresBuild: true optional: true - /@esbuild/freebsd-arm64/0.16.12: - resolution: {integrity: sha512-AMdK2gA9EU83ccXCWS1B/KcWYZCj4P3vDofZZkl/F/sBv/fphi2oUqUTox/g5GMcIxk8CF1CVYTC82+iBSyiUg==} + /@esbuild/freebsd-arm64/0.16.13: + resolution: {integrity: sha512-KxMO3/XihBcHM+xQUM6nQZO1SgQuOsd1DCnKF1a4SIf/i5VD45vrqN3k8ePgFrEbMi7m5JeGmvNqwJXinF0a4Q==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] requiresBuild: true optional: true - /@esbuild/freebsd-x64/0.16.12: - resolution: {integrity: sha512-KUKB9w8G/xaAbD39t6gnRBuhQ8vIYYlxGT2I+mT6UGRnCGRr1+ePFIGBQmf5V16nxylgUuuWVW1zU2ktKkf6WQ==} + /@esbuild/freebsd-x64/0.16.13: + resolution: {integrity: sha512-Ez15oqV1vwvZ30cVLeBW14BsWq/fdWNQGMOxxqaSJVQVLqHhvgfQ7gxGDiN9tpJdeQhqJO+Q0r02/Tce5+USNg==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] requiresBuild: true optional: true - /@esbuild/linux-arm/0.16.12: - resolution: {integrity: sha512-vhDdIv6z4eL0FJyNVfdr3C/vdd/Wc6h1683GJsFoJzfKb92dU/v88FhWdigg0i6+3TsbSDeWbsPUXb4dif2abg==} + /@esbuild/linux-arm/0.16.13: + resolution: {integrity: sha512-18dLd2L3mda+iFj6sswyBMSh2UwniamD9M4DwPv8VM+9apRFlQ5IGKxBdumnTuOI4NvwwAernmUseWhYQ9k+rg==} engines: {node: '>=12'} cpu: [arm] os: [linux] requiresBuild: true optional: true - /@esbuild/linux-arm64/0.16.12: - resolution: {integrity: sha512-29HXMLpLklDfmw7T2buGqq3HImSUaZ1ArmrPOMaNiZZQptOSZs32SQtOHEl8xWX5vfdwZqrBfNf8Te4nArVzKQ==} + /@esbuild/linux-arm64/0.16.13: + resolution: {integrity: sha512-qi5n7KwcGViyJeZeQnu8fB6dC3Mlm5PGaqSv2HhQDDx/MPvVfQGNMcv7zcBL4qk3FkuWhGVwXkjQ76x7R0PWlA==} engines: {node: '>=12'} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@esbuild/linux-ia32/0.16.12: - resolution: {integrity: sha512-JFDuNDTTfgD1LJg7wHA42o2uAO/9VzHYK0leAVnCQE/FdMB599YMH73ux+nS0xGr79pv/BK+hrmdRin3iLgQjg==} + /@esbuild/linux-ia32/0.16.13: + resolution: {integrity: sha512-2489Xad9sr+6GD7nB913fUqpCsSwVwgskkQTq4Or2mZntSPYPebyJm8l1YruHo7oqYMTGV6RiwGE4gRo3H+EPQ==} engines: {node: '>=12'} cpu: [ia32] os: [linux] requiresBuild: true optional: true - /@esbuild/linux-loong64/0.16.12: - resolution: {integrity: sha512-xTGzVPqm6WKfCC0iuj1fryIWr1NWEM8DMhAIo+4rFgUtwy/lfHl+Obvus4oddzRDbBetLLmojfVZGmt/g/g+Rw==} + /@esbuild/linux-loong64/0.16.13: + resolution: {integrity: sha512-x8KplRu9Y43Px8I9YS+sPBwQ+fw44Mvp2BPVADopKDWz+h3fcj1BvRU58kxb89WObmwKX9sWdtYzepL4Fmx03A==} engines: {node: '>=12'} cpu: [loong64] os: [linux] requiresBuild: true optional: true - /@esbuild/linux-mips64el/0.16.12: - resolution: {integrity: sha512-zI1cNgHa3Gol+vPYjIYHzKhU6qMyOQrvZ82REr5Fv7rlh5PG6SkkuCoH7IryPqR+BK2c/7oISGsvPJPGnO2bHQ==} + /@esbuild/linux-mips64el/0.16.13: + resolution: {integrity: sha512-qhhdWph9FLwD9rVVC/nUf7k2U4NZIA6/mGx0B7+O6PFV0GjmPA2E3zDQ4NUjq9P26E0DeAZy9akH9dYcUBRU7A==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] requiresBuild: true optional: true - /@esbuild/linux-ppc64/0.16.12: - resolution: {integrity: sha512-/C8OFXExoMmvTDIOAM54AhtmmuDHKoedUd0Otpfw3+AuuVGemA1nQK99oN909uZbLEU6Bi+7JheFMG3xGfZluQ==} + /@esbuild/linux-ppc64/0.16.13: + resolution: {integrity: sha512-cVWAPKsrRVxI1jCeJHnYSbE3BrEU+pZTZK2gfao9HRxuc+3m4+RLfs3EVEpGLmMKEcWfVCB9wZ3yNxnknutGKQ==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] requiresBuild: true optional: true - /@esbuild/linux-riscv64/0.16.12: - resolution: {integrity: sha512-qeouyyc8kAGV6Ni6Isz8hUsKMr00EHgVwUKWNp1r4l88fHEoNTDB8mmestvykW6MrstoGI7g2EAsgr0nxmuGYg==} + /@esbuild/linux-riscv64/0.16.13: + resolution: {integrity: sha512-Agb7dbRyZWnmPn5Vvf0eyqaEUqSsaIUwwyInu2EoFTaIDRp093QU2M5alUyOooMLkRbD1WvqQNwx08Z/g+SAcQ==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] requiresBuild: true optional: true - /@esbuild/linux-s390x/0.16.12: - resolution: {integrity: sha512-s9AyI/5vz1U4NNqnacEGFElqwnHusWa81pskAf8JNDM2eb6b2E6PpBmT8RzeZv6/TxE6/TADn2g9bb0jOUmXwQ==} + /@esbuild/linux-s390x/0.16.13: + resolution: {integrity: sha512-AqRBIrc/+kl08ahliNG+EyU+j41wIzQfwBTKpi80cCDiYvYFPuXjvzZsD9muiu58Isj0RVni9VgC4xK/AnSW4g==} engines: {node: '>=12'} cpu: [s390x] os: [linux] requiresBuild: true optional: true - /@esbuild/linux-x64/0.16.12: - resolution: {integrity: sha512-e8YA7GQGLWhvakBecLptUiKxOk4E/EPtSckS1i0MGYctW8ouvNUoh7xnU15PGO2jz7BYl8q1R6g0gE5HFtzpqQ==} + /@esbuild/linux-x64/0.16.13: + resolution: {integrity: sha512-S4wn2BimuhPcoArRtVrdHUKIymCCZcYAXQE47kUiX4yrUrEX2/ifn5eKNbZ5c1jJKUlh1gC2ESIN+iw3wQax3g==} engines: {node: '>=12'} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@esbuild/netbsd-x64/0.16.12: - resolution: {integrity: sha512-z2+kUxmOqBS+6SRVd57iOLIHE8oGOoEnGVAmwjm2aENSP35HPS+5cK+FL1l+rhrsJOFIPrNHqDUNechpuG96Sg==} + /@esbuild/netbsd-x64/0.16.13: + resolution: {integrity: sha512-2c8JWgfUMlQHTdaR5X3xNMwqOyad8kgeCupuVkdm3QkUOzGREjlTETQsK6oHifocYzDCo9FeKcUwsK356SdR+g==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] requiresBuild: true optional: true - /@esbuild/openbsd-x64/0.16.12: - resolution: {integrity: sha512-PAonw4LqIybwn2/vJujhbg1N9W2W8lw9RtXIvvZoyzoA/4rA4CpiuahVbASmQohiytRsixbNoIOUSjRygKXpyA==} + /@esbuild/openbsd-x64/0.16.13: + resolution: {integrity: sha512-Bwh+PmKD/LK+xBjqIpnYnKYj0fIyQJ0YpRxsn0F+WfzvQ2OA+GKDlf8AHosiCns26Q4Dje388jQVwfOBZ1GaFw==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] requiresBuild: true optional: true - /@esbuild/sunos-x64/0.16.12: - resolution: {integrity: sha512-+wr1tkt1RERi+Zi/iQtkzmMH4nS8+7UIRxjcyRz7lur84wCkAITT50Olq/HiT4JN2X2bjtlOV6vt7ptW5Gw60Q==} + /@esbuild/sunos-x64/0.16.13: + resolution: {integrity: sha512-8wwk6f9XGnhrF94/DBdFM4Xm1JeCyGTCj67r516VS9yvBVQf3Rar54L+XPVDs/oZOokwH+XsktrgkuTMAmjntg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] requiresBuild: true optional: true - /@esbuild/win32-arm64/0.16.12: - resolution: {integrity: sha512-XEjeUSHmjsAOJk8+pXJu9pFY2O5KKQbHXZWQylJzQuIBeiGrpMeq9sTVrHefHxMOyxUgoKQTcaTS+VK/K5SviA==} + /@esbuild/win32-arm64/0.16.13: + resolution: {integrity: sha512-Jmwbp/5ArLCiRAHC33ODfcrlIcbP/exXkOEUVkADNJC4e/so2jm+i8IQFvVX/lA2GWvK3GdgcN0VFfp9YITAbg==} engines: {node: '>=12'} cpu: [arm64] os: [win32] requiresBuild: true optional: true - /@esbuild/win32-ia32/0.16.12: - resolution: {integrity: sha512-eRKPM7e0IecUAUYr2alW7JGDejrFJXmpjt4MlfonmQ5Rz9HWpKFGCjuuIRgKO7W9C/CWVFXdJ2GjddsBXqQI4A==} + /@esbuild/win32-ia32/0.16.13: + resolution: {integrity: sha512-AX6WjntGjhJHzrPSVvjMD7grxt41koHfAOx6lxLorrpDwwIKKPaGDASPZgvFIZHTbwhOtILW6vAXxYPDsKpDJA==} engines: {node: '>=12'} cpu: [ia32] os: [win32] requiresBuild: true optional: true - /@esbuild/win32-x64/0.16.12: - resolution: {integrity: sha512-iPYKN78t3op2+erv2frW568j1q0RpqX6JOLZ7oPPaAV1VaF7dDstOrNw37PVOYoTWE11pV4A1XUitpdEFNIsPg==} + /@esbuild/win32-x64/0.16.13: + resolution: {integrity: sha512-A+U4gM6OOkPS03UgVU08GTpAAAxPsP/8Z4FmneGo4TaVSD99bK9gVJXlqUEPMO/htFXEAht2O6pX4ErtLY5tVg==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -2956,13 +2984,13 @@ packages: dev: false optional: true - /esbuild-plugin-copy/2.0.1_esbuild@0.16.12: + /esbuild-plugin-copy/2.0.1_esbuild@0.16.13: resolution: {integrity: sha512-/mvriqGv2QAyrkui3REZaLEjwqESBKWZQQJtOZEausI8C4QMChREXGASNzmWpTlHo/v+ipLW73QCiNemBKggMw==} peerDependencies: esbuild: '>= 0.14.0' dependencies: chalk: 4.1.2 - esbuild: 0.16.12 + esbuild: 0.16.13 fs-extra: 10.1.0 globby: 11.1.0 dev: true @@ -2976,34 +3004,34 @@ packages: yargs: 17.6.2 dev: true - /esbuild/0.16.12: - resolution: {integrity: sha512-eq5KcuXajf2OmivCl4e89AD3j8fbV+UTE9vczEzq5haA07U9oOTzBWlh3+6ZdjJR7Rz2QfWZ2uxZyhZxBgJ4+g==} + /esbuild/0.16.13: + resolution: {integrity: sha512-oYwFdSEIoKM1oYzyem1osgKJAvg5447XF+05ava21fOtilyb2HeQQh26/74K4WeAk5dZmj/Mx10zUqUnI14jhA==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.16.12 - '@esbuild/android-arm64': 0.16.12 - '@esbuild/android-x64': 0.16.12 - '@esbuild/darwin-arm64': 0.16.12 - '@esbuild/darwin-x64': 0.16.12 - '@esbuild/freebsd-arm64': 0.16.12 - '@esbuild/freebsd-x64': 0.16.12 - '@esbuild/linux-arm': 0.16.12 - '@esbuild/linux-arm64': 0.16.12 - '@esbuild/linux-ia32': 0.16.12 - '@esbuild/linux-loong64': 0.16.12 - '@esbuild/linux-mips64el': 0.16.12 - '@esbuild/linux-ppc64': 0.16.12 - '@esbuild/linux-riscv64': 0.16.12 - '@esbuild/linux-s390x': 0.16.12 - '@esbuild/linux-x64': 0.16.12 - '@esbuild/netbsd-x64': 0.16.12 - '@esbuild/openbsd-x64': 0.16.12 - '@esbuild/sunos-x64': 0.16.12 - '@esbuild/win32-arm64': 0.16.12 - '@esbuild/win32-ia32': 0.16.12 - '@esbuild/win32-x64': 0.16.12 + '@esbuild/android-arm': 0.16.13 + '@esbuild/android-arm64': 0.16.13 + '@esbuild/android-x64': 0.16.13 + '@esbuild/darwin-arm64': 0.16.13 + '@esbuild/darwin-x64': 0.16.13 + '@esbuild/freebsd-arm64': 0.16.13 + '@esbuild/freebsd-x64': 0.16.13 + '@esbuild/linux-arm': 0.16.13 + '@esbuild/linux-arm64': 0.16.13 + '@esbuild/linux-ia32': 0.16.13 + '@esbuild/linux-loong64': 0.16.13 + '@esbuild/linux-mips64el': 0.16.13 + '@esbuild/linux-ppc64': 0.16.13 + '@esbuild/linux-riscv64': 0.16.13 + '@esbuild/linux-s390x': 0.16.13 + '@esbuild/linux-x64': 0.16.13 + '@esbuild/netbsd-x64': 0.16.13 + '@esbuild/openbsd-x64': 0.16.13 + '@esbuild/sunos-x64': 0.16.13 + '@esbuild/win32-arm64': 0.16.13 + '@esbuild/win32-ia32': 0.16.13 + '@esbuild/win32-x64': 0.16.13 /escalade/3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} @@ -6314,7 +6342,7 @@ packages: terser: optional: true dependencies: - esbuild: 0.16.12 + esbuild: 0.16.13 postcss: 8.4.20 resolve: 1.22.1 rollup: 3.7.5 @@ -6349,7 +6377,7 @@ packages: optional: true dependencies: '@types/node': 18.11.18 - esbuild: 0.16.12 + esbuild: 0.16.13 postcss: 8.4.20 resolve: 1.22.1 rollup: 3.7.5 @@ -6357,13 +6385,13 @@ packages: fsevents: 2.3.2 dev: true - /vitepress/1.0.0-alpha.33: - resolution: {integrity: sha512-EhMDqWLllYr5mXqAz4GCQ1o/bu5umQ6C2d8voiSaTHMkYCxsGc31ETykflM6NOhGx6yccwXygrYIIeN1l6BUEA==} + /vitepress/1.0.0-alpha.34: + resolution: {integrity: sha512-ALJLEZYM0rgXDBV8n6P6VXdR8fMjJJIZpm7QqU6CqJwB6JKHW7RBmokx9RcEtPRg/JshYTXO8f6AKPI9BByxkw==} hasBin: true requiresBuild: true dependencies: - '@docsearch/css': 3.3.0 - '@docsearch/js': 3.3.0 + '@docsearch/css': 3.3.1 + '@docsearch/js': 3.3.1 '@vitejs/plugin-vue': 4.0.0_vite@4.0.3+vue@3.2.45 '@vue/devtools-api': 6.4.5 '@vueuse/core': 9.9.0_vue@3.2.45 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index b8001422e..a709d6d21 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -4,4 +4,5 @@ packages: - 'extensions/*' - 'packages/*' - 'plugins/*' + - 'pug-language-tools/*' - 'vue-language-tools/*' diff --git a/packages/pug-language-service/LICENSE b/pug-language-tools/pug-language-server/LICENSE similarity index 100% rename from packages/pug-language-service/LICENSE rename to pug-language-tools/pug-language-server/LICENSE diff --git a/pug-language-tools/pug-language-server/bin/pug-language-server.js b/pug-language-tools/pug-language-server/bin/pug-language-server.js new file mode 100755 index 000000000..d18b06411 --- /dev/null +++ b/pug-language-tools/pug-language-server/bin/pug-language-server.js @@ -0,0 +1,8 @@ +#!/usr/bin/env node +if (process.argv.includes("--version")) { + const pkgJSON = require("../package.json"); + console.log(`${pkgJSON["version"]}`); +} +else { + require("../out/index.js"); +} diff --git a/pug-language-tools/pug-language-server/package.json b/pug-language-tools/pug-language-server/package.json new file mode 100644 index 000000000..fd28ffc7f --- /dev/null +++ b/pug-language-tools/pug-language-server/package.json @@ -0,0 +1,23 @@ +{ + "name": "@volar/pug-language-server", + "version": "1.0.19", + "main": "out/index.js", + "license": "MIT", + "files": [ + "out/**/*.js", + "out/**/*.d.ts" + ], + "bin": { + "pug-language-server": "./bin/pug-language-server.js" + }, + "repository": { + "type": "git", + "url": "https://github.com/johnsoncodehk/volar.git", + "directory": "pug-language-tools/pug-language-server" + }, + "dependencies": { + "@volar-plugins/pug": "1.0.19", + "@volar-plugins/pug-beautify": "1.0.19", + "@volar/language-server": "1.0.19" + } +} diff --git a/pug-language-tools/pug-language-server/src/index.ts b/pug-language-tools/pug-language-server/src/index.ts new file mode 100644 index 000000000..1b1f417eb --- /dev/null +++ b/pug-language-tools/pug-language-server/src/index.ts @@ -0,0 +1,15 @@ +import createPugPlugin from '@volar-plugins/pug'; +import createPugBeautifyPlugin from '@volar-plugins/pug-beautify'; +import { createLanguageServer, LanguageServerPlugin } from '@volar/language-server/node'; + +const plugin: LanguageServerPlugin = () => ({ + extraFileExtensions: [{ extension: 'pug', isMixedContent: true }], + getServicePlugins() { + return [ + createPugPlugin(), + createPugBeautifyPlugin(), + ]; + }, +}); + +createLanguageServer([plugin]); diff --git a/pug-language-tools/pug-language-server/tsconfig.build.json b/pug-language-tools/pug-language-server/tsconfig.build.json new file mode 100644 index 000000000..6e542237f --- /dev/null +++ b/pug-language-tools/pug-language-server/tsconfig.build.json @@ -0,0 +1,26 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "outDir": "out", + "rootDir": "src", + }, + "include": [ + "src" + ], + "exclude": [ + "node_modules", + ".vscode-test" + ], + "references": [ + { + "path": "../../packages/language-server/tsconfig.build.json" + }, + { + "path": "../../plugins/pug/tsconfig.build.json" + }, + { + "path": "../../plugins/pug-beautify/tsconfig.build.json" + } + ] +} \ No newline at end of file diff --git a/pug-language-tools/pug-language-service/LICENSE b/pug-language-tools/pug-language-service/LICENSE new file mode 100644 index 000000000..b55e47a7e --- /dev/null +++ b/pug-language-tools/pug-language-service/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021-present Johnson Chu + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/pug-language-service/package.json b/pug-language-tools/pug-language-service/package.json similarity index 91% rename from packages/pug-language-service/package.json rename to pug-language-tools/pug-language-service/package.json index d7e7e5c78..b647ff8d9 100644 --- a/packages/pug-language-service/package.json +++ b/pug-language-tools/pug-language-service/package.json @@ -10,7 +10,7 @@ "repository": { "type": "git", "url": "https://github.com/johnsoncodehk/volar.git", - "directory": "packages/pug-language-service" + "directory": "pug-language-tools/pug-language-service" }, "devDependencies": { "vscode-html-languageservice": "^5.0.3" diff --git a/packages/pug-language-service/src/baseParse.ts b/pug-language-tools/pug-language-service/src/baseParse.ts similarity index 100% rename from packages/pug-language-service/src/baseParse.ts rename to pug-language-tools/pug-language-service/src/baseParse.ts diff --git a/packages/pug-language-service/src/index.ts b/pug-language-tools/pug-language-service/src/index.ts similarity index 100% rename from packages/pug-language-service/src/index.ts rename to pug-language-tools/pug-language-service/src/index.ts diff --git a/packages/pug-language-service/src/pugDocument.ts b/pug-language-tools/pug-language-service/src/pugDocument.ts similarity index 100% rename from packages/pug-language-service/src/pugDocument.ts rename to pug-language-tools/pug-language-service/src/pugDocument.ts diff --git a/packages/pug-language-service/src/services/completion.ts b/pug-language-tools/pug-language-service/src/services/completion.ts similarity index 100% rename from packages/pug-language-service/src/services/completion.ts rename to pug-language-tools/pug-language-service/src/services/completion.ts diff --git a/packages/pug-language-service/src/services/documentHighlight.ts b/pug-language-tools/pug-language-service/src/services/documentHighlight.ts similarity index 100% rename from packages/pug-language-service/src/services/documentHighlight.ts rename to pug-language-tools/pug-language-service/src/services/documentHighlight.ts diff --git a/packages/pug-language-service/src/services/documentLinks.ts b/pug-language-tools/pug-language-service/src/services/documentLinks.ts similarity index 100% rename from packages/pug-language-service/src/services/documentLinks.ts rename to pug-language-tools/pug-language-service/src/services/documentLinks.ts diff --git a/packages/pug-language-service/src/services/documentSymbol.ts b/pug-language-tools/pug-language-service/src/services/documentSymbol.ts similarity index 100% rename from packages/pug-language-service/src/services/documentSymbol.ts rename to pug-language-tools/pug-language-service/src/services/documentSymbol.ts diff --git a/packages/pug-language-service/src/services/foldingRanges.ts b/pug-language-tools/pug-language-service/src/services/foldingRanges.ts similarity index 100% rename from packages/pug-language-service/src/services/foldingRanges.ts rename to pug-language-tools/pug-language-service/src/services/foldingRanges.ts diff --git a/packages/pug-language-service/src/services/hover.ts b/pug-language-tools/pug-language-service/src/services/hover.ts similarity index 100% rename from packages/pug-language-service/src/services/hover.ts rename to pug-language-tools/pug-language-service/src/services/hover.ts diff --git a/packages/pug-language-service/src/services/quoteComplete.ts b/pug-language-tools/pug-language-service/src/services/quoteComplete.ts similarity index 100% rename from packages/pug-language-service/src/services/quoteComplete.ts rename to pug-language-tools/pug-language-service/src/services/quoteComplete.ts diff --git a/packages/pug-language-service/src/services/scanner.ts b/pug-language-tools/pug-language-service/src/services/scanner.ts similarity index 100% rename from packages/pug-language-service/src/services/scanner.ts rename to pug-language-tools/pug-language-service/src/services/scanner.ts diff --git a/packages/pug-language-service/src/services/selectionRanges.ts b/pug-language-tools/pug-language-service/src/services/selectionRanges.ts similarity index 100% rename from packages/pug-language-service/src/services/selectionRanges.ts rename to pug-language-tools/pug-language-service/src/services/selectionRanges.ts diff --git a/packages/pug-language-service/tsconfig.build.json b/pug-language-tools/pug-language-service/tsconfig.build.json similarity index 51% rename from packages/pug-language-service/tsconfig.build.json rename to pug-language-tools/pug-language-service/tsconfig.build.json index 85d03a9dd..3e8014af6 100644 --- a/packages/pug-language-service/tsconfig.build.json +++ b/pug-language-tools/pug-language-service/tsconfig.build.json @@ -14,16 +14,16 @@ ], "references": [ { - "path": "../shared/tsconfig.build.json" + "path": "../../packages/shared/tsconfig.build.json" }, { - "path": "../source-map/tsconfig.build.json" + "path": "../../packages/source-map/tsconfig.build.json" }, { - "path": "../language-service/tsconfig.build.json" + "path": "../../packages/language-service/tsconfig.build.json" }, { - "path": "../transforms/tsconfig.build.json" + "path": "../../packages/transforms/tsconfig.build.json" }, ], } \ No newline at end of file diff --git a/pug-language-tools/vscode-pug/.vscodeignore b/pug-language-tools/vscode-pug/.vscodeignore new file mode 100644 index 000000000..dc83992c1 --- /dev/null +++ b/pug-language-tools/vscode-pug/.vscodeignore @@ -0,0 +1,5 @@ +out +scripts +src +tsconfig.build.json +tsconfig.build.tsbuildinfo diff --git a/pug-language-tools/vscode-pug/LICENSE b/pug-language-tools/vscode-pug/LICENSE new file mode 100644 index 000000000..b55e47a7e --- /dev/null +++ b/pug-language-tools/vscode-pug/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021-present Johnson Chu + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/pug-language-tools/vscode-pug/README.md b/pug-language-tools/vscode-pug/README.md new file mode 100644 index 000000000..38850bfe1 --- /dev/null +++ b/pug-language-tools/vscode-pug/README.md @@ -0,0 +1,3 @@ +# Pug Language Features (Volar) + +Basic language support for Pug base on [vscode-html-languageservice](https://github.com/microsoft/vscode-html-languageservice). diff --git a/pug-language-tools/vscode-pug/client.js b/pug-language-tools/vscode-pug/client.js new file mode 100644 index 000000000..a83481c85 --- /dev/null +++ b/pug-language-tools/vscode-pug/client.js @@ -0,0 +1,3 @@ +let modulePath = './dist/node/client'; +try { modulePath = require.resolve('./out/client'); } catch { } +module.exports = require(modulePath); diff --git a/pug-language-tools/vscode-pug/package.json b/pug-language-tools/vscode-pug/package.json new file mode 100644 index 000000000..42e018f11 --- /dev/null +++ b/pug-language-tools/vscode-pug/package.json @@ -0,0 +1,55 @@ +{ + "private": true, + "name": "vscode-pug", + "version": "1.0.19", + "repository": { + "type": "git", + "url": "https://github.com/johnsoncodehk/volar.git", + "directory": "pug-language-tools/vscode-pug" + }, + "displayName": "Pug Language Features (Volar)", + "description": "Pug Language Features (Volar)", + "author": "johnsoncodehk", + "publisher": "johnsoncodehk", + "engines": { + "vscode": "^1.67.0" + }, + "activationEvents": [ + "onLanguage:jade" + ], + "main": "client", + "contributes": { + "configuration": { + "type": "object", + "title": "Volar-Pug", + "properties": { + "volar-pug-language-server.trace.server": { + "scope": "window", + "type": "string", + "enum": [ + "off", + "messages", + "verbose" + ], + "default": "off", + "description": "Traces the communication between VS Code and the language server." + } + } + } + }, + "scripts": { + "prebuild": "cd ../.. && npm run build", + "build": "node scripts/build -- --minify", + "pack": "npm run build && vsce package --pre-release", + "release": "npm run build && vsce publish --pre-release" + }, + "devDependencies": { + "@volar/pug-language-server": "1.0.19", + "@types/vscode": "1.67.0", + "@volar/language-server": "1.0.19", + "esbuild": "latest", + "typesafe-path": "^0.2.2", + "vsce": "latest", + "vscode-languageclient": "^8.0.2" + } +} diff --git a/pug-language-tools/vscode-pug/scripts/build.js b/pug-language-tools/vscode-pug/scripts/build.js new file mode 100644 index 000000000..b7d52f71a --- /dev/null +++ b/pug-language-tools/vscode-pug/scripts/build.js @@ -0,0 +1,31 @@ +require('esbuild').build({ + entryPoints: { + client: './out/client.js', + server: './node_modules/@volar/pug-language-server/bin/pug-language-server.js', + }, + bundle: true, + metafile: process.argv.includes('--metafile'), + outdir: './dist/node', + external: [ + 'vscode', + ], + format: 'cjs', + platform: 'node', + tsconfig: '../../tsconfig.build.json', + define: { 'process.env.NODE_ENV': '"production"' }, + minify: process.argv.includes('--minify'), + watch: process.argv.includes('--watch'), + plugins: [ + { + name: 'umd2esm', + setup(build) { + build.onResolve({ filter: /^(vscode-.*|estree-walker|jsonc-parser)/ }, args => { + const pathUmdMay = require.resolve(args.path, { paths: [args.resolveDir] }) + // Call twice the replace is to solve the problem of the path in Windows + const pathEsm = pathUmdMay.replace('/umd/', '/esm/').replace('\\umd\\', '\\esm\\') + return { path: pathEsm } + }) + }, + }, + ], +}).catch(() => process.exit(1)) diff --git a/pug-language-tools/vscode-pug/server.js b/pug-language-tools/vscode-pug/server.js new file mode 100644 index 000000000..3f43fffc7 --- /dev/null +++ b/pug-language-tools/vscode-pug/server.js @@ -0,0 +1,3 @@ +let modulePath = './dist/node/server'; +try { modulePath = require.resolve('@volar/pug-language-server/bin/pug-language-server'); } catch { } +module.exports = require(modulePath); diff --git a/pug-language-tools/vscode-pug/src/client.ts b/pug-language-tools/vscode-pug/src/client.ts new file mode 100644 index 000000000..9af36843a --- /dev/null +++ b/pug-language-tools/vscode-pug/src/client.ts @@ -0,0 +1,50 @@ +import { LanguageServerInitializationOptions, ServerMode, DiagnosticModel } from '@volar/language-server'; +import * as path from 'typesafe-path'; +import * as vscode from 'vscode'; +import * as lsp from 'vscode-languageclient/node'; + +let client: lsp.BaseLanguageClient; + +export async function activate(context: vscode.ExtensionContext) { + + const initializationOptions: LanguageServerInitializationOptions = { + typescript: { + tsdk: path.join( + vscode.env.appRoot as path.OsPath, + 'extensions/node_modules/typescript/lib' as path.PosixPath, + ), + }, + diagnosticModel: DiagnosticModel.Pull, + serverMode: ServerMode.Syntactic, // avoid cross file behavior for better performance + }; + const serverModule = vscode.Uri.joinPath(context.extensionUri, 'server.js'); + const runOptions = { execArgv: [] }; + const debugOptions = { execArgv: ['--nolazy', '--inspect=' + 6009] }; + const serverOptions: lsp.ServerOptions = { + run: { + module: serverModule.fsPath, + transport: lsp.TransportKind.ipc, + options: runOptions + }, + debug: { + module: serverModule.fsPath, + transport: lsp.TransportKind.ipc, + options: debugOptions + }, + }; + const clientOptions: lsp.LanguageClientOptions = { + documentSelector: [{ language: 'jade' }], + initializationOptions, + }; + client = new lsp.LanguageClient( + 'volar-pug-language-server', + 'Pug (Volar)', + serverOptions, + clientOptions, + ); + await client.start(); +} + +export function deactivate(): Thenable | undefined { + return client?.stop(); +} diff --git a/pug-language-tools/vscode-pug/tsconfig.build.json b/pug-language-tools/vscode-pug/tsconfig.build.json new file mode 100644 index 000000000..4376f71d8 --- /dev/null +++ b/pug-language-tools/vscode-pug/tsconfig.build.json @@ -0,0 +1,24 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "noEmit": false, + "outDir": "out", + "rootDir": "src", + }, + "include": [ + "src", + "src/**/*.json" + ], + "exclude": [ + "node_modules", + ".vscode-test" + ], + "references": [ + { + "path": "../../packages/language-server/tsconfig.build.json" + }, + { + "path": "../pug-language-server/tsconfig.build.json" + } + ] +} \ No newline at end of file diff --git a/tsconfig.build.json b/tsconfig.build.json index 0c8d2c218..33f4e8305 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -9,9 +9,15 @@ { "path": "./extensions/vscode-typescript-vue-plugin/tsconfig.build.json" }, + { + "path": "./pug-language-tools/vscode-pug/tsconfig.build.json" + }, { "path": "./examples/vscode-svelte/tsconfig.build.json" }, + { + "path": "./examples/vscode-angular/tsconfig.build.json" + }, // Extra Pkgs { "path": "./vue-language-tools/vue-language-plugin-pug/tsconfig.build.json" @@ -35,9 +41,6 @@ { "path": "./examples/vscode-svelte/tsconfig.build.json" }, - { - "path": "./examples/vscode-angular/tsconfig.build.json" - }, // IDE / tests { "path": "./tsconfig.json" diff --git a/vue-language-tools/vue-language-plugin-pug/tsconfig.build.json b/vue-language-tools/vue-language-plugin-pug/tsconfig.build.json index 2fea0a2d6..808d5d348 100644 --- a/vue-language-tools/vue-language-plugin-pug/tsconfig.build.json +++ b/vue-language-tools/vue-language-plugin-pug/tsconfig.build.json @@ -14,7 +14,7 @@ ], "references": [ { - "path": "../../packages/pug-language-service/tsconfig.build.json" + "path": "../../pug-language-tools/pug-language-service/tsconfig.build.json" }, { "path": "../../packages/source-map/tsconfig.build.json" diff --git a/vue-language-tools/vue-language-service/tsconfig.build.json b/vue-language-tools/vue-language-service/tsconfig.build.json index 12eafedeb..5ba4c6f8a 100644 --- a/vue-language-tools/vue-language-service/tsconfig.build.json +++ b/vue-language-tools/vue-language-service/tsconfig.build.json @@ -45,9 +45,6 @@ { "path": "../../packages/language-service/tsconfig.build.json" }, - { - "path": "../../packages/pug-language-service/tsconfig.build.json" - }, { "path": "../../packages/shared/tsconfig.build.json" }, @@ -64,5 +61,9 @@ { "path": "../vue-typescript/tsconfig.build.json" }, + // pug-language-tools + { + "path": "../../pug-language-tools/pug-language-service/tsconfig.build.json" + }, ], } \ No newline at end of file