From 3890cdfe1b9388075e2edcb75d4004c92c4fbf1d Mon Sep 17 00:00:00 2001 From: Pat Cavit Date: Thu, 2 Nov 2023 23:19:07 -0700 Subject: [PATCH 1/3] I dunno wtf I'm doing yet --- LICENSE | 2 +- package-lock.json | 195 +++++++++++++++++++++- package.json | 4 +- packages/aliases/LICENSE | 2 +- packages/browserify/LICENSE | 2 +- packages/cli/LICENSE | 2 +- packages/glob/LICENSE | 2 +- packages/language-server/LICENSE | 21 +++ packages/language-server/package.json | 32 ++++ packages/language-server/server.js | 224 ++++++++++++++++++++++++++ packages/namer/LICENSE | 2 +- packages/paths/LICENSE | 2 +- packages/postcss/LICENSE | 2 +- packages/processor/LICENSE | 2 +- packages/rollup-rewriter/LICENSE | 2 +- packages/rollup/LICENSE | 2 +- packages/stylelint-config/LICENSE | 2 +- packages/svelte/LICENSE | 2 +- packages/test-utils/LICENSE | 2 +- packages/vscode/package.json | 40 +++++ packages/vscode/vscode.js | 66 ++++++++ packages/webpack/LICENSE | 2 +- 22 files changed, 594 insertions(+), 18 deletions(-) create mode 100644 packages/language-server/LICENSE create mode 100644 packages/language-server/package.json create mode 100644 packages/language-server/server.js create mode 100644 packages/vscode/package.json create mode 100644 packages/vscode/vscode.js diff --git a/LICENSE b/LICENSE index 76aab6f21..164d05bde 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 Pat Cavit +Copyright (c) 2023 Pat Cavit Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/package-lock.json b/package-lock.json index 90c3f6250..09b4e7b3e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "0.0.0", "license": "MIT", "workspaces": [ - "./packages/*" + "packages/*" ], "devDependencies": { "@babel/eslint-parser": "^7.18.2", @@ -2334,6 +2334,10 @@ "resolved": "packages/glob", "link": true }, + "node_modules/@modular-css/language-server": { + "resolved": "packages/language-server", + "link": true + }, "node_modules/@modular-css/path-aliases": { "resolved": "packages/aliases", "link": true @@ -2378,6 +2382,10 @@ "resolved": "packages/vite", "link": true }, + "node_modules/@modular-css/vscode": { + "resolved": "packages/vscode", + "link": true + }, "node_modules/@modular-css/webpack": { "resolved": "packages/webpack", "link": true @@ -15824,6 +15832,90 @@ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true }, + "node_modules/vscode-jsonrpc": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", + "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/vscode-languageclient": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-9.0.1.tgz", + "integrity": "sha512-JZiimVdvimEuHh5olxhxkht09m3JzUGwggb5eRUkzzJhZ2KjCN0nh55VfiED9oez9DyF8/fz1g1iBV3h+0Z2EA==", + "dependencies": { + "minimatch": "^5.1.0", + "semver": "^7.3.7", + "vscode-languageserver-protocol": "3.17.5" + }, + "engines": { + "vscode": "^1.82.0" + } + }, + "node_modules/vscode-languageclient/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/vscode-languageclient/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vscode-languageclient/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vscode-languageserver": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz", + "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==", + "dependencies": { + "vscode-languageserver-protocol": "3.17.5" + }, + "bin": { + "installServerIntoExtension": "bin/installServerIntoExtension" + } + }, + "node_modules/vscode-languageserver-protocol": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", + "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", + "dependencies": { + "vscode-jsonrpc": "8.2.0", + "vscode-languageserver-types": "3.17.5" + } + }, + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.11.tgz", + "integrity": "sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==" + }, + "node_modules/vscode-languageserver-types": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==" + }, "node_modules/w3c-keyname": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.5.tgz", @@ -16236,6 +16328,16 @@ "globule": "^1.1.0" } }, + "packages/language-server": { + "name": "@modular-css/language-server", + "version": "29.0.3", + "license": "MIT", + "dependencies": { + "@modular-css/processor": "^29.0.3", + "vscode-languageserver": "^9.0.1", + "vscode-languageserver-textdocument": "^1.0.11" + } + }, "packages/namer": { "name": "@modular-css/shortnames", "version": "28.0.0", @@ -16349,6 +16451,15 @@ "vite": "^3 || ^4" } }, + "packages/vscode": { + "name": "@modular-css/vscode", + "version": "29.0.3", + "license": "MIT", + "dependencies": { + "vscode-languageclient": "^9.0.1" + }, + "devDependencies": {} + }, "packages/webpack": { "name": "@modular-css/webpack", "version": "29.0.3", @@ -18080,6 +18191,14 @@ "globule": "^1.1.0" } }, + "@modular-css/language-server": { + "version": "file:packages/language-server", + "requires": { + "@modular-css/processor": "^29.0.3", + "vscode-languageserver": "^9.0.1", + "vscode-languageserver-textdocument": "^1.0.11" + } + }, "@modular-css/path-aliases": { "version": "file:packages/aliases", "requires": { @@ -18162,6 +18281,12 @@ "@rollup/pluginutils": "^5.0.2" } }, + "@modular-css/vscode": { + "version": "file:packages/vscode", + "requires": { + "vscode-languageclient": "^9.0.1" + } + }, "@modular-css/webpack": { "version": "file:packages/webpack", "requires": { @@ -28170,6 +28295,74 @@ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true }, + "vscode-jsonrpc": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", + "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==" + }, + "vscode-languageclient": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-9.0.1.tgz", + "integrity": "sha512-JZiimVdvimEuHh5olxhxkht09m3JzUGwggb5eRUkzzJhZ2KjCN0nh55VfiED9oez9DyF8/fz1g1iBV3h+0Z2EA==", + "requires": { + "minimatch": "^5.1.0", + "semver": "^7.3.7", + "vscode-languageserver-protocol": "3.17.5" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "vscode-languageserver": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz", + "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==", + "requires": { + "vscode-languageserver-protocol": "3.17.5" + } + }, + "vscode-languageserver-protocol": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", + "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", + "requires": { + "vscode-jsonrpc": "8.2.0", + "vscode-languageserver-types": "3.17.5" + } + }, + "vscode-languageserver-textdocument": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.11.tgz", + "integrity": "sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==" + }, + "vscode-languageserver-types": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==" + }, "w3c-keyname": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.5.tgz", diff --git a/package.json b/package.json index 8a90aa90f..7654cfa8d 100644 --- a/package.json +++ b/package.json @@ -76,6 +76,6 @@ "webpack": "^5.0.0" }, "workspaces": [ - "./packages/*" + "packages/*" ] -} +} \ No newline at end of file diff --git a/packages/aliases/LICENSE b/packages/aliases/LICENSE index 2e6060b3f..164d05bde 100644 --- a/packages/aliases/LICENSE +++ b/packages/aliases/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2017 Pat Cavit +Copyright (c) 2023 Pat Cavit Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/browserify/LICENSE b/packages/browserify/LICENSE index 76aab6f21..164d05bde 100644 --- a/packages/browserify/LICENSE +++ b/packages/browserify/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 Pat Cavit +Copyright (c) 2023 Pat Cavit Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/cli/LICENSE b/packages/cli/LICENSE index 76aab6f21..164d05bde 100644 --- a/packages/cli/LICENSE +++ b/packages/cli/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 Pat Cavit +Copyright (c) 2023 Pat Cavit Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/glob/LICENSE b/packages/glob/LICENSE index 76aab6f21..164d05bde 100644 --- a/packages/glob/LICENSE +++ b/packages/glob/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 Pat Cavit +Copyright (c) 2023 Pat Cavit Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/language-server/LICENSE b/packages/language-server/LICENSE new file mode 100644 index 000000000..164d05bde --- /dev/null +++ b/packages/language-server/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Pat Cavit + +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/language-server/package.json b/packages/language-server/package.json new file mode 100644 index 000000000..176076bd7 --- /dev/null +++ b/packages/language-server/package.json @@ -0,0 +1,32 @@ +{ + "name": "@modular-css/language-server", + "version": "29.0.3", + "description": "Language server for modular-css support in editors", + "main": "./server.js", + "repository": { + "type": "git", + "url": "https://github.com/tivac/modular-css.git", + "directory": "packages/language-server" + }, + "bugs": { + "url": "https://github.com/tivac/modular-css/issues" + }, + "author": "Pat Cavit ", + "homepage": "https://m-css.com", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "keywords": [ + "css", + "css-modules", + "modular-css", + "postcss", + "language-server" + ], + "dependencies": { + "@modular-css/processor": "^29.0.3", + "vscode-languageserver": "^9.0.1", + "vscode-languageserver-textdocument": "^1.0.11" + } +} diff --git a/packages/language-server/server.js b/packages/language-server/server.js new file mode 100644 index 000000000..b360ab060 --- /dev/null +++ b/packages/language-server/server.js @@ -0,0 +1,224 @@ +const { + createConnection, + TextDocuments, + DiagnosticSeverity, + ProposedFeatures, + DidChangeConfigurationNotification, + CompletionItemKind, + TextDocumentSyncKind, +} = require("vscode-languageserver/node"); + +const { TextDocument } = require("vscode-languageserver-textdocument"); + +// Create a connection for the server, using Node's IPC as a transport. +// Also include all preview / proposed LSP features. +const connection = createConnection(ProposedFeatures.all); + +// Create a simple text document manager. +const documents = new TextDocuments(TextDocument); + +// The global settings, used when the `workspace/configuration` request is not supported by the client. +// Please note that this is not the case when using this server with the client provided in this example +// but could happen with other clients. +const defaultSettings = { + maxNumberOfProblems : 1000, +}; +let globalSettings = defaultSettings; + +// Cache the settings of all open documents +const documentSettings = new Map(); + +let hasConfigurationCapability = false; +let hasWorkspaceFolderCapability = false; +let hasDiagnosticRelatedInformationCapability = false; + +function getDocumentSettings(resource) { + if(!hasConfigurationCapability) { + return Promise.resolve(globalSettings); + } + + let result = documentSettings.get(resource); + + if(!result) { + result = connection.workspace.getConfiguration({ + scopeUri : resource, + section : "languageServerExample", + }); + + documentSettings.set(resource, result); + } + + return result; +} + +async function validateTextDocument(textDocument) { + // In this simple example we get the settings for every validate run. + const settings = await getDocumentSettings(textDocument.uri); + + // The validator creates diagnostics for all uppercase words length 2 and more + const text = textDocument.getText(); + const pattern = /\b[A-Z]{2,}\b/g; + let m; + + let problems = 0; + const diagnostics = []; + + while((m = pattern.exec(text)) && problems < settings.maxNumberOfProblems) { + problems++; + const diagnostic = { + severity : DiagnosticSeverity.Warning, + range : { + start : textDocument.positionAt(m.index), + end : textDocument.positionAt(m.index + m[0].length), + }, + message : `${m[0]} is all uppercase.`, + source : "ex", + }; + + if(hasDiagnosticRelatedInformationCapability) { + diagnostic.relatedInformation = [{ + location : { + uri : textDocument.uri, + range : Object.assign({}, diagnostic.range), + }, + message : "Spelling matters", + }, { + location : { + uri : textDocument.uri, + range : Object.assign({}, diagnostic.range), + }, + message : "Particularly for names", + }]; + } + + diagnostics.push(diagnostic); + } + + // Send the computed diagnostics to VS Code. + connection.sendDiagnostics({ + uri : textDocument.uri, + diagnostics, + }); +} + +connection.onInitialize((params) => { + const { + capabilities, + } = params; + + // Does the client support the `workspace/configuration` request? + // If not, we fall back using global settings. + hasConfigurationCapability = Boolean(capabilities.workspace && Boolean(capabilities.workspace.configuration)); + hasWorkspaceFolderCapability = Boolean(capabilities.workspace && Boolean(capabilities.workspace.workspaceFolders)); + hasDiagnosticRelatedInformationCapability = Boolean(capabilities.textDocument && + capabilities.textDocument.publishDiagnostics && + capabilities.textDocument.publishDiagnostics.relatedInformation); + + const result = { + capabilities : { + textDocumentSync : TextDocumentSyncKind.Incremental, + // Tell the client that this server supports code completion. + completionProvider : { + resolveProvider : true, + }, + }, + }; + + if(hasWorkspaceFolderCapability) { + result.capabilities.workspace = { + workspaceFolders : { + supported : true, + }, + }; + } + + return result; +}); + +connection.onInitialized(() => { + if(hasConfigurationCapability) { + // Register for all configuration changes. + connection.client.register(DidChangeConfigurationNotification.type, undefined); + } + if(hasWorkspaceFolderCapability) { + connection.workspace.onDidChangeWorkspaceFolders((_event) => { + connection.console.log("Workspace folder change event received."); + }); + } +}); + + +connection.onDidChangeConfiguration((change) => { + if(hasConfigurationCapability) { + // Reset all cached document settings + documentSettings.clear(); + } else { + globalSettings = ( + (change.settings.languageServerExample || defaultSettings) + ); + } + + // Revalidate all open text documents + documents.all().forEach(validateTextDocument); +}); + + +// Only keep settings for open documents +documents.onDidClose((e) => { + documentSettings.delete(e.document.uri); +}); + +// The content of a text document has changed. This event is emitted +// when the text document first opened or when its content has changed. +documents.onDidChangeContent((change) => { + validateTextDocument(change.document); +}); + + +connection.onDidChangeWatchedFiles((_change) => { + // Monitored files have change in VS Code + connection.console.log("We received a file change event"); +}); + +// This handler provides the initial list of the completion items. +connection.onCompletion( + (_textDocumentPosition) => + // The pass parameter contains the position of the text document in + // which code complete got requested. For the example we ignore this + // info and always provide the same completion items. + [{ + label : "TypeScript", + kind : CompletionItemKind.Text, + data : 1, + }, + { + label : "JavaScript", + kind : CompletionItemKind.Text, + data : 2, + }, + ] + +); + +// This handler resolves additional information for the item selected in +// the completion list. +connection.onCompletionResolve( + (item) => { + if(item.data === 1) { + item.detail = "TypeScript details"; + item.documentation = "TypeScript documentation"; + } else if(item.data === 2) { + item.detail = "JavaScript details"; + item.documentation = "JavaScript documentation"; + } + + return item; + } +); + +// Make the text document manager listen on the connection +// for open, change and close text document events +documents.listen(connection); + +// Listen on the connection +connection.listen(); diff --git a/packages/namer/LICENSE b/packages/namer/LICENSE index 852fad5e9..dc86fdcb6 100644 --- a/packages/namer/LICENSE +++ b/packages/namer/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2019 Pat Cavit +Copyright (c) 2023 Pat Cavit Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/paths/LICENSE b/packages/paths/LICENSE index 76aab6f21..164d05bde 100644 --- a/packages/paths/LICENSE +++ b/packages/paths/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 Pat Cavit +Copyright (c) 2023 Pat Cavit Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/postcss/LICENSE b/packages/postcss/LICENSE index 76aab6f21..164d05bde 100644 --- a/packages/postcss/LICENSE +++ b/packages/postcss/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 Pat Cavit +Copyright (c) 2023 Pat Cavit Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/processor/LICENSE b/packages/processor/LICENSE index 76aab6f21..164d05bde 100644 --- a/packages/processor/LICENSE +++ b/packages/processor/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 Pat Cavit +Copyright (c) 2023 Pat Cavit Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/rollup-rewriter/LICENSE b/packages/rollup-rewriter/LICENSE index 76aab6f21..164d05bde 100644 --- a/packages/rollup-rewriter/LICENSE +++ b/packages/rollup-rewriter/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 Pat Cavit +Copyright (c) 2023 Pat Cavit Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/rollup/LICENSE b/packages/rollup/LICENSE index 76aab6f21..164d05bde 100644 --- a/packages/rollup/LICENSE +++ b/packages/rollup/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 Pat Cavit +Copyright (c) 2023 Pat Cavit Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/stylelint-config/LICENSE b/packages/stylelint-config/LICENSE index 76aab6f21..164d05bde 100644 --- a/packages/stylelint-config/LICENSE +++ b/packages/stylelint-config/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 Pat Cavit +Copyright (c) 2023 Pat Cavit Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/svelte/LICENSE b/packages/svelte/LICENSE index 2e6060b3f..164d05bde 100644 --- a/packages/svelte/LICENSE +++ b/packages/svelte/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2017 Pat Cavit +Copyright (c) 2023 Pat Cavit Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/test-utils/LICENSE b/packages/test-utils/LICENSE index 76aab6f21..164d05bde 100644 --- a/packages/test-utils/LICENSE +++ b/packages/test-utils/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 Pat Cavit +Copyright (c) 2023 Pat Cavit Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/vscode/package.json b/packages/vscode/package.json new file mode 100644 index 000000000..0686b26dd --- /dev/null +++ b/packages/vscode/package.json @@ -0,0 +1,40 @@ +{ + "name": "modular-css-vscode", + "displayName": "modular-css", + "publisher": "modular-css", + "version": "29.0.3", + "description": "VSCode extension for modular-css support", + "main": "./vscode.js", + "author": "Pat Cavit ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tivac/modular-css/issues" + }, + "homepage": "https://m-css.com", + "repository": { + "type": "git", + "url": "git+https://github.com/tivac/modular-css.git" + }, + "keywords": [ + "css", + "css-modules", + "modular-css", + "postcss", + "vscode" + ], + "dependencies": { + "@modular-css/language-service": "^29.0.0", + "vscode-languageclient": "^9.0.1" + }, + "engines": { + "vscode": "^1.74.0" + }, + "contributes": { + "commands": [ + { + "command": "extension.helloWorld", + "title": "Hello World" + } + ] + } +} \ No newline at end of file diff --git a/packages/vscode/vscode.js b/packages/vscode/vscode.js new file mode 100644 index 000000000..e6b22221c --- /dev/null +++ b/packages/vscode/vscode.js @@ -0,0 +1,66 @@ +const { workspace, commands, window } = require("vscode"); + +const { LanguageClient, TransportKind } = require("vscode-languageclient/node"); + +let client; + +exports.activate = (context) => { + // The server is implemented in node + const serverModule = require.resolve("@modular-css/language-server"); + + // If the extension is launched in debug mode then the debug server options are used + // Otherwise the run options are used + const serverOptions = { + run : { module : serverModule, transport : TransportKind.ipc }, + debug : { + module : serverModule, + transport : TransportKind.ipc, + }, + }; + + // Options to control the language client + const clientOptions = { + // Register the server for plain text documents + documentSelector : [{ scheme : "file", language : "plaintext" }], + synchronize : { + // Notify the server about file changes to '.clientrc files contained in the workspace + fileEvents : workspace.createFileSystemWatcher("**/.clientrc"), + }, + }; + + // Create the language client and start the client. + client = new LanguageClient( + "languageServerExample", + "Language Server Example", + serverOptions, + clientOptions + ); + + // Start the client. This will also launch the server + client.start(); + + + // Use the console to output diagnostic information (console.log) and errors (console.error) + // This line of code will only be executed once when your extension is activated + console.log('Congratulations, your extension "helloworld-sample" is now active!'); + + // The command has been defined in the package.json file + // Now provide the implementation of the command with registerCommand + // The commandId parameter must match the command field in package.json + const disposable = commands.registerCommand("extension.helloWorld", () => { + // The code you place here will be executed every time your command is executed + + // Display a message box to the user + window.showInformationMessage("Hello World!"); + }); + + context.subscriptions.push(disposable); +}; + +exports.deactivate = () => { + if(!client) { + return undefined; + } + + return client.stop(); +}; diff --git a/packages/webpack/LICENSE b/packages/webpack/LICENSE index 76aab6f21..164d05bde 100644 --- a/packages/webpack/LICENSE +++ b/packages/webpack/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 Pat Cavit +Copyright (c) 2023 Pat Cavit Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From 543ef40ff2ab9e5c277950954987f6b85d004408 Mon Sep 17 00:00:00 2001 From: Pat Cavit Date: Thu, 2 Nov 2023 23:25:56 -0700 Subject: [PATCH 2/3] holy shit the server started up --- packages/language-server/package.json | 2 +- packages/vscode/package.json | 30 +++++++++++++++++++++++++-- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/packages/language-server/package.json b/packages/language-server/package.json index 176076bd7..545fffba9 100644 --- a/packages/language-server/package.json +++ b/packages/language-server/package.json @@ -29,4 +29,4 @@ "vscode-languageserver": "^9.0.1", "vscode-languageserver-textdocument": "^1.0.11" } -} +} \ No newline at end of file diff --git a/packages/vscode/package.json b/packages/vscode/package.json index 0686b26dd..134f9f6bc 100644 --- a/packages/vscode/package.json +++ b/packages/vscode/package.json @@ -35,6 +35,32 @@ "command": "extension.helloWorld", "title": "Hello World" } - ] - } + ], + "configuration": { + "type": "object", + "title": "Example configuration", + "properties": { + "languageServerExample.maxNumberOfProblems": { + "scope": "resource", + "type": "number", + "default": 100, + "description": "Controls the maximum number of problems produced by the server." + }, + "languageServerExample.trace.server": { + "scope": "window", + "type": "string", + "enum": [ + "off", + "messages", + "verbose" + ], + "default": "off", + "description": "Traces the communication between VS Code and the language server." + } + } + } + }, + "activationEvents": [ + "onLanguage:plaintext" + ] } \ No newline at end of file From 78e69c10fa0220e47e1e353c9e53446ea08ae09e Mon Sep 17 00:00:00 2001 From: Pat Cavit Date: Thu, 2 Nov 2023 23:29:30 -0700 Subject: [PATCH 3/3] chore: fix deps --- package-lock.json | 72 ++++++++++++++++++++++----- packages/language-server/package.json | 1 + packages/vscode/package.json | 2 +- 3 files changed, 62 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index 09b4e7b3e..05661a425 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2382,10 +2382,6 @@ "resolved": "packages/vite", "link": true }, - "node_modules/@modular-css/vscode": { - "resolved": "packages/vscode", - "link": true - }, "node_modules/@modular-css/webpack": { "resolved": "packages/webpack", "link": true @@ -3086,6 +3082,11 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@vscode/l10n": { + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.16.tgz", + "integrity": "sha512-JT5CvrIYYCrmB+dCana8sUqJEcGB1ZDXNLMQ2+42bW995WmNoenijWMUdZfwmuQUTQcEVVIa2OecZzTYWUW9Cg==" + }, "node_modules/@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -10959,6 +10960,10 @@ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "dev": true }, + "node_modules/modular-css-vscode": { + "resolved": "packages/vscode", + "link": true + }, "node_modules/module-deps": { "version": "6.2.3", "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz", @@ -15832,6 +15837,17 @@ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true }, + "node_modules/vscode-css-languageservice": { + "version": "6.2.10", + "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.2.10.tgz", + "integrity": "sha512-sYUZPku4mQ06AWGCbMyjv2tdR6juBW6hTbVPFwbJvNVzdtEfBioQOgkdXg7yMJNWnXkvWSU1FL2kb4Vxu5Cdyw==", + "dependencies": { + "@vscode/l10n": "^0.0.16", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-languageserver-types": "3.17.5", + "vscode-uri": "^3.0.8" + } + }, "node_modules/vscode-jsonrpc": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", @@ -15916,6 +15932,11 @@ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==" }, + "node_modules/vscode-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", + "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==" + }, "node_modules/w3c-keyname": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.5.tgz", @@ -16334,6 +16355,7 @@ "license": "MIT", "dependencies": { "@modular-css/processor": "^29.0.3", + "vscode-css-languageservice": "^6.2.10", "vscode-languageserver": "^9.0.1", "vscode-languageserver-textdocument": "^1.0.11" } @@ -16452,13 +16474,16 @@ } }, "packages/vscode": { - "name": "@modular-css/vscode", + "name": "modular-css-vscode", "version": "29.0.3", "license": "MIT", "dependencies": { + "@modular-css/language-server": "^29.0.0", "vscode-languageclient": "^9.0.1" }, - "devDependencies": {} + "engines": { + "vscode": "^1.74.0" + } }, "packages/webpack": { "name": "@modular-css/webpack", @@ -18195,6 +18220,7 @@ "version": "file:packages/language-server", "requires": { "@modular-css/processor": "^29.0.3", + "vscode-css-languageservice": "^6.2.10", "vscode-languageserver": "^9.0.1", "vscode-languageserver-textdocument": "^1.0.11" } @@ -18281,12 +18307,6 @@ "@rollup/pluginutils": "^5.0.2" } }, - "@modular-css/vscode": { - "version": "file:packages/vscode", - "requires": { - "vscode-languageclient": "^9.0.1" - } - }, "@modular-css/webpack": { "version": "file:packages/webpack", "requires": { @@ -18877,6 +18897,11 @@ } } }, + "@vscode/l10n": { + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.16.tgz", + "integrity": "sha512-JT5CvrIYYCrmB+dCana8sUqJEcGB1ZDXNLMQ2+42bW995WmNoenijWMUdZfwmuQUTQcEVVIa2OecZzTYWUW9Cg==" + }, "@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -24767,6 +24792,13 @@ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "dev": true }, + "modular-css-vscode": { + "version": "file:packages/vscode", + "requires": { + "@modular-css/language-server": "^29.0.0", + "vscode-languageclient": "^9.0.1" + } + }, "module-deps": { "version": "6.2.3", "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz", @@ -28295,6 +28327,17 @@ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true }, + "vscode-css-languageservice": { + "version": "6.2.10", + "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.2.10.tgz", + "integrity": "sha512-sYUZPku4mQ06AWGCbMyjv2tdR6juBW6hTbVPFwbJvNVzdtEfBioQOgkdXg7yMJNWnXkvWSU1FL2kb4Vxu5Cdyw==", + "requires": { + "@vscode/l10n": "^0.0.16", + "vscode-languageserver-textdocument": "^1.0.11", + "vscode-languageserver-types": "3.17.5", + "vscode-uri": "^3.0.8" + } + }, "vscode-jsonrpc": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", @@ -28363,6 +28406,11 @@ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==" }, + "vscode-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", + "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==" + }, "w3c-keyname": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.5.tgz", diff --git a/packages/language-server/package.json b/packages/language-server/package.json index 545fffba9..4e3838a9e 100644 --- a/packages/language-server/package.json +++ b/packages/language-server/package.json @@ -26,6 +26,7 @@ ], "dependencies": { "@modular-css/processor": "^29.0.3", + "vscode-css-languageservice": "^6.2.10", "vscode-languageserver": "^9.0.1", "vscode-languageserver-textdocument": "^1.0.11" } diff --git a/packages/vscode/package.json b/packages/vscode/package.json index 134f9f6bc..7c3a93b28 100644 --- a/packages/vscode/package.json +++ b/packages/vscode/package.json @@ -23,7 +23,7 @@ "vscode" ], "dependencies": { - "@modular-css/language-service": "^29.0.0", + "@modular-css/language-server": "^29.0.0", "vscode-languageclient": "^9.0.1" }, "engines": {