vscode-gem-languageservice 0.0.5 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1 @@
1
+ # Gem Languageservice for VS Code
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env node
2
+ "use strict";
2
3
  var __create = Object.create;
3
4
  var __defProp = Object.defineProperty;
4
5
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts", "../src/provider.ts", "../src/global.ts", "../src/documents.ts"],
4
- "sourcesContent": ["#!/usr/bin/env node\n\n// biome-ignore assist/source/organizeImports: export/path\nimport { TextDocument } from 'vscode-languageserver-textdocument';\nimport { createConnection, ProposedFeatures, TextDocuments } from 'vscode-languageserver/node';\n\nimport { Provider } from './provider';\n\nconst connection = createConnection(ProposedFeatures.all);\nconst documents = new TextDocuments(TextDocument);\n\nconnection.onInitialize(() => {\n return {\n capabilities: {\n colorProvider: true,\n documentSymbolProvider: true,\n },\n };\n});\n\nconst provider = new Provider();\n\nconnection.onColorPresentation(({ color }) => {\n return provider.provideColorPresentations(color);\n});\n\nconnection.onDocumentColor(({ textDocument }) => {\n return provider.provideDocumentColors(documents.get(textDocument.uri)!);\n});\n\nconnection.onDocumentSymbol(({ textDocument }) => {\n return provider.provideDocumentSymbols(documents.get(textDocument.uri)!);\n});\n\ndocuments.listen(connection);\nconnection.listen();\n", "// biome-ignore assist/source/organizeImports: export/path\nimport cssColors from 'css-color-keywords';\nimport type { HexColor } from 'duoyun-ui/lib/color';\nimport { parseHexColor, rgbToHexColor } from 'duoyun-ui/lib/color';\nimport { isNotNullish } from 'duoyun-ui/lib/types';\nimport type { TextDocument } from 'vscode-languageserver-textdocument';\nimport type { ColorInformation, ColorPresentation, SymbolInformation } from 'vscode-languageserver/node';\nimport { Color, Range } from 'vscode-languageserver/node';\nimport { cssLanguageService, documents, htmlLanguageService } from './global';\n\nexport class Provider {\n provideDocumentColors(document: TextDocument): ColorInformation[] {\n return [\n // NOTE: ignore `<style>`\n ...[...documents.getAllCSS(document), ...documents.getAllCSSFragment(document)].flatMap(\n ({ doc, startIndex, cssDoc }) => {\n const colors = cssLanguageService.findDocumentColors(doc, cssDoc);\n return colors.map((e) => ({\n ...e,\n range: {\n start: document.positionAt(startIndex + doc.offsetAt(e.range.start)),\n end: document.positionAt(startIndex + doc.offsetAt(e.range.end)),\n },\n }));\n },\n ),\n ...documents\n .getAllStyleValue(document)\n .map(({ text, startIndex }) => {\n const hex = (cssColors[text] || text) as HexColor;\n if (!hex.startsWith('#')) return;\n const [red, green, blue, alpha] = parseHexColor(hex);\n const range = Range.create(document.positionAt(startIndex), document.positionAt(startIndex + hex.length));\n const color = Color.create(red / 255, green / 255, blue / 255, alpha);\n return { range, color };\n })\n .filter(isNotNullish),\n ];\n }\n\n provideColorPresentations({ red, green, blue, alpha }: Color): ColorPresentation[] {\n return [{ label: rgbToHexColor([red * 255, green * 255, blue * 255, alpha]) }];\n }\n\n provideDocumentSymbols(document: TextDocument): SymbolInformation[] {\n return [\n ...documents.getAllCSS(document).map((e) => {\n const symbols = cssLanguageService.findDocumentSymbols(e.doc, e.cssDoc);\n return { ...e, symbols };\n }),\n ...documents.getAllHTML(document).map((e) => {\n const symbols = htmlLanguageService.findDocumentSymbols(e.doc, e.htmlDoc);\n return { ...e, symbols };\n }),\n ].flatMap(({ startIndex, symbols, doc }) =>\n symbols.map((symbol) => ({\n ...symbol,\n location: {\n uri: document.uri,\n range: {\n start: document.positionAt(startIndex + doc.offsetAt(symbol.location.range.start)),\n end: document.positionAt(startIndex + doc.offsetAt(symbol.location.range.end)),\n },\n },\n })),\n );\n }\n}\n", "import { getCSSLanguageService, type Stylesheet } from '@mantou/vscode-css-languageservice';\nimport { getLanguageService as getHTMLanguageService, type HTMLDocument } from '@mantou/vscode-html-languageservice';\nimport { Cache } from 'duoyun-ui/lib/cache';\n\nimport { CSTDocs } from './documents';\n\nexport const cssLanguageService = getCSSLanguageService();\nexport const htmlLanguageService = getHTMLanguageService();\nexport const documents = new CSTDocs();\nexport const cssCache = new Cache<Stylesheet>({ max: 1000 });\nexport const htmlCache = new Cache<HTMLDocument>({ max: 1000 });\n", "import type { Stylesheet } from '@mantou/vscode-css-languageservice';\nimport type { HTMLDocument } from '@mantou/vscode-html-languageservice';\nimport { Cache } from 'duoyun-ui/lib/cache';\nimport Parser from 'tree-sitter';\nimport tsTypescript from 'tree-sitter-typescript';\nimport { TextDocument } from 'vscode-languageserver-textdocument';\n\nimport { cssLanguageService, htmlLanguageService } from './global';\n\nconst language = tsTypescript.typescript as Parser.Language;\n\nfunction processTemplate({ children }: Parser.SyntaxNode) {\n return {\n startIndex: children[1].startIndex,\n text: children\n .slice(1, -1)\n .reduce((p, c) => p + (c.type === 'template_substitution' ? c.text.replaceAll(/./g, '_') : c.text), ''),\n };\n}\n\nexport class CSTDocs extends WeakMap<TextDocument, Parser.Tree> {\n #cssCache = new Cache<Stylesheet>({ max: 1000 });\n #htmlCache = new Cache<HTMLDocument>({ max: 1000 });\n\n getTypeScriptCST(textDocument: TextDocument) {\n const parser = new Parser();\n parser.setLanguage(language);\n\n const oldTree = this.get(textDocument);\n if (oldTree?.getText(oldTree.rootNode) === textDocument.getText()) return oldTree;\n\n const newTree = parser.parse(textDocument.getText());\n this.set(textDocument, newTree);\n\n return newTree;\n }\n\n getAllTemplate(textDocument: TextDocument, tag: string) {\n const tree = this.getTypeScriptCST(textDocument);\n const query = new Parser.Query(\n language,\n `\n (call_expression\n function: (identifier) @tag (#eq? @tag \"${tag}\")\n arguments: (template_string) @injection.content\n )\n `,\n );\n const matches = query.matches(tree.rootNode);\n const templateStrings = matches.map(({ captures }) => captures.pop()!.node);\n return templateStrings.map(processTemplate);\n }\n\n getStyles(textDocument: TextDocument) {\n const tree = this.getTypeScriptCST(textDocument);\n const query = new Parser.Query(\n language,\n `\n (call_expression\n function: (identifier) @_name (#eq? @_name \"css\")\n arguments: (arguments (object (pair\n value: (template_string) @injection.content\n )))\n )\n `,\n );\n const matches = query.matches(tree.rootNode);\n const templateStrings = matches.map(({ captures }) => captures.pop()!.node);\n return templateStrings.map(processTemplate);\n }\n\n getAllStyleValue(textDocument: TextDocument) {\n const tree = this.getTypeScriptCST(textDocument);\n const query = new Parser.Query(\n language,\n `\n (call_expression\n function: (identifier) @_name (#eq? @_name \"styleMap\")\n arguments: (arguments (object (pair\n value: (string (string_fragment) @injection.content)\n )))\n )\n `,\n );\n const matches = query.matches(tree.rootNode);\n return matches.map(({ captures }) => captures.pop()!.node);\n }\n\n getAllCSS(textDocument: TextDocument) {\n return this.getAllTemplate(textDocument, 'css').map((e) => {\n const doc = TextDocument.create(``, 'css', 1, e.text);\n const cssDoc = this.#cssCache.get(e.text, () => cssLanguageService.parseStylesheet(doc));\n return { ...e, doc, cssDoc };\n });\n }\n\n getAllCSSFragment(textDocument: TextDocument) {\n return [...this.getAllTemplate(textDocument, 'styled'), ...this.getStyles(textDocument)].map((e) => {\n const doc = TextDocument.create(``, 'css', 1, `.parent {${e.text}}`);\n const cssDoc = this.#cssCache.get(e.text, () => cssLanguageService.parseStylesheet(doc));\n return { ...e, startIndex: e.startIndex - 9, doc, cssDoc };\n });\n }\n\n getAllHTML(textDocument: TextDocument) {\n return this.getAllTemplate(textDocument, 'html').map((e) => {\n const doc = TextDocument.create(``, 'html', 1, e.text);\n const htmlDoc = this.#htmlCache.get(e.text, () => htmlLanguageService.parseHTMLDocument(doc));\n return { ...e, doc, htmlDoc };\n });\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["#!/usr/bin/env node\n\n// biome-ignore assist/source/organizeImports: export/path\nimport { TextDocument } from 'vscode-languageserver-textdocument';\nimport { createConnection, ProposedFeatures, TextDocuments } from 'vscode-languageserver/node';\n\nimport { Provider } from './provider';\n\nconst connection = createConnection(ProposedFeatures.all);\nconst documents = new TextDocuments(TextDocument);\n\nconnection.onInitialize(() => {\n return {\n capabilities: {\n colorProvider: true,\n documentSymbolProvider: true,\n },\n };\n});\n\nconst provider = new Provider();\n\nconnection.onColorPresentation(({ color }) => {\n return provider.provideColorPresentations(color);\n});\n\nconnection.onDocumentColor(({ textDocument }) => {\n return provider.provideDocumentColors(documents.get(textDocument.uri)!);\n});\n\nconnection.onDocumentSymbol(({ textDocument }) => {\n return provider.provideDocumentSymbols(documents.get(textDocument.uri)!);\n});\n\ndocuments.listen(connection);\nconnection.listen();\n", "// @ts-expect-error\n// biome-ignore assist/source/organizeImports: export/path\nimport cssColors from 'css-color-keywords';\nimport type { HexColor } from 'duoyun-ui/lib/color';\nimport { parseHexColor, rgbToHexColor } from 'duoyun-ui/lib/color';\nimport { isNotNullish } from 'duoyun-ui/lib/types';\nimport type { TextDocument } from 'vscode-languageserver-textdocument';\nimport type { ColorInformation, ColorPresentation, SymbolInformation } from 'vscode-languageserver/node';\nimport { Color, Range } from 'vscode-languageserver/node';\nimport { cssLanguageService, documents, htmlLanguageService } from './global';\n\nexport class Provider {\n provideDocumentColors(document: TextDocument): ColorInformation[] {\n return [\n // NOTE: ignore `<style>`\n ...[...documents.getAllCSS(document), ...documents.getAllCSSFragment(document)].flatMap(\n ({ doc, startIndex, cssDoc }) => {\n const colors = cssLanguageService.findDocumentColors(doc, cssDoc);\n return colors.map((e) => ({\n ...e,\n range: {\n start: document.positionAt(startIndex + doc.offsetAt(e.range.start)),\n end: document.positionAt(startIndex + doc.offsetAt(e.range.end)),\n },\n }));\n },\n ),\n ...documents\n .getAllStyleValue(document)\n .map(({ text, startIndex }) => {\n const hex = (cssColors[text] || text) as HexColor;\n if (!hex.startsWith('#')) return;\n const [red, green, blue, alpha] = parseHexColor(hex);\n const range = Range.create(document.positionAt(startIndex), document.positionAt(startIndex + hex.length));\n const color = Color.create(red / 255, green / 255, blue / 255, alpha);\n return { range, color };\n })\n .filter(isNotNullish),\n ];\n }\n\n provideColorPresentations({ red, green, blue, alpha }: Color): ColorPresentation[] {\n return [{ label: rgbToHexColor([red * 255, green * 255, blue * 255, alpha]) }];\n }\n\n provideDocumentSymbols(document: TextDocument): SymbolInformation[] {\n return [\n ...documents.getAllCSS(document).map((e) => {\n const symbols = cssLanguageService.findDocumentSymbols(e.doc, e.cssDoc);\n return { ...e, symbols };\n }),\n ...documents.getAllHTML(document).map((e) => {\n const symbols = htmlLanguageService.findDocumentSymbols(e.doc, e.htmlDoc);\n return { ...e, symbols };\n }),\n ].flatMap(({ startIndex, symbols, doc }) =>\n symbols.map((symbol) => ({\n ...symbol,\n location: {\n uri: document.uri,\n range: {\n start: document.positionAt(startIndex + doc.offsetAt(symbol.location.range.start)),\n end: document.positionAt(startIndex + doc.offsetAt(symbol.location.range.end)),\n },\n },\n })),\n );\n }\n}\n", "import { getCSSLanguageService, type Stylesheet } from '@mantou/vscode-css-languageservice';\nimport { getLanguageService as getHTMLanguageService, type HTMLDocument } from '@mantou/vscode-html-languageservice';\nimport { Cache } from 'duoyun-ui/lib/cache';\n\nimport { CSTDocs } from './documents';\n\nexport const cssLanguageService = getCSSLanguageService();\nexport const htmlLanguageService = getHTMLanguageService();\nexport const documents = new CSTDocs();\nexport const cssCache = new Cache<Stylesheet>({ max: 1000 });\nexport const htmlCache = new Cache<HTMLDocument>({ max: 1000 });\n", "import type { Stylesheet } from '@mantou/vscode-css-languageservice';\nimport type { HTMLDocument } from '@mantou/vscode-html-languageservice';\nimport { Cache } from 'duoyun-ui/lib/cache';\nimport Parser from 'tree-sitter';\nimport tsTypescript from 'tree-sitter-typescript';\nimport { TextDocument } from 'vscode-languageserver-textdocument';\n\nimport { cssLanguageService, htmlLanguageService } from './global';\n\nconst language = tsTypescript.typescript as Parser.Language;\n\nfunction processTemplate({ children }: Parser.SyntaxNode) {\n return {\n startIndex: children[1].startIndex,\n text: children\n .slice(1, -1)\n .reduce((p, c) => p + (c.type === 'template_substitution' ? c.text.replaceAll(/./g, '_') : c.text), ''),\n };\n}\n\nexport class CSTDocs extends WeakMap<TextDocument, Parser.Tree> {\n #cssCache = new Cache<Stylesheet>({ max: 1000 });\n #htmlCache = new Cache<HTMLDocument>({ max: 1000 });\n\n getTypeScriptCST(textDocument: TextDocument) {\n const parser = new Parser();\n parser.setLanguage(language);\n\n const oldTree = this.get(textDocument);\n if (oldTree?.getText(oldTree.rootNode) === textDocument.getText()) return oldTree;\n\n const newTree = parser.parse(textDocument.getText());\n this.set(textDocument, newTree);\n\n return newTree;\n }\n\n getAllTemplate(textDocument: TextDocument, tag: string) {\n const tree = this.getTypeScriptCST(textDocument);\n const query = new Parser.Query(\n language,\n `\n (call_expression\n function: (identifier) @tag (#eq? @tag \"${tag}\")\n arguments: (template_string) @injection.content\n )\n `,\n );\n const matches = query.matches(tree.rootNode);\n const templateStrings = matches.map(({ captures }) => captures.pop()!.node);\n return templateStrings.map(processTemplate);\n }\n\n getStyles(textDocument: TextDocument) {\n const tree = this.getTypeScriptCST(textDocument);\n const query = new Parser.Query(\n language,\n `\n (call_expression\n function: (identifier) @_name (#eq? @_name \"css\")\n arguments: (arguments (object (pair\n value: (template_string) @injection.content\n )))\n )\n `,\n );\n const matches = query.matches(tree.rootNode);\n const templateStrings = matches.map(({ captures }) => captures.pop()!.node);\n return templateStrings.map(processTemplate);\n }\n\n getAllStyleValue(textDocument: TextDocument) {\n const tree = this.getTypeScriptCST(textDocument);\n const query = new Parser.Query(\n language,\n `\n (call_expression\n function: (identifier) @_name (#eq? @_name \"styleMap\")\n arguments: (arguments (object (pair\n value: (string (string_fragment) @injection.content)\n )))\n )\n `,\n );\n const matches = query.matches(tree.rootNode);\n return matches.map(({ captures }) => captures.pop()!.node);\n }\n\n getAllCSS(textDocument: TextDocument) {\n return this.getAllTemplate(textDocument, 'css').map((e) => {\n const doc = TextDocument.create(``, 'css', 1, e.text);\n const cssDoc = this.#cssCache.get(e.text, () => cssLanguageService.parseStylesheet(doc));\n return { ...e, doc, cssDoc };\n });\n }\n\n getAllCSSFragment(textDocument: TextDocument) {\n return [...this.getAllTemplate(textDocument, 'styled'), ...this.getStyles(textDocument)].map((e) => {\n const doc = TextDocument.create(``, 'css', 1, `.parent {${e.text}}`);\n const cssDoc = this.#cssCache.get(e.text, () => cssLanguageService.parseStylesheet(doc));\n return { ...e, startIndex: e.startIndex - 9, doc, cssDoc };\n });\n }\n\n getAllHTML(textDocument: TextDocument) {\n return this.getAllTemplate(textDocument, 'html').map((e) => {\n const doc = TextDocument.create(``, 'html', 1, e.text);\n const htmlDoc = this.#htmlCache.get(e.text, () => htmlLanguageService.parseHTMLDocument(doc));\n return { ...e, doc, htmlDoc };\n });\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_vscode_languageserver_textdocument", "import_node", "import_cache", "tsTypescript", "Parser", "getHTMLanguageService", "cssColors", "documents"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vscode-gem-languageservice",
3
- "version": "0.0.5",
3
+ "version": "0.0.8",
4
4
  "description": "Language service for Gem",
5
5
  "keywords": [
6
6
  "gem",
@@ -13,7 +13,7 @@
13
13
  "/dist/"
14
14
  ],
15
15
  "scripts": {
16
- "build": "esbuild ./src/index.ts --outdir=./dist --platform=node --sourcemap --bundle --packages=external --external:tree-sitter*",
16
+ "build": "esbuild ./src/index.ts --outdir=./dist --platform=node --sourcemap --bundle --packages=external",
17
17
  "prepublishOnly": "pnpm run build",
18
18
  "start": "pnpm run build --watch"
19
19
  },
@@ -21,14 +21,14 @@
21
21
  "@mantou/vscode-css-languageservice": "^6.3.6",
22
22
  "@mantou/vscode-html-languageservice": "^5.3.6",
23
23
  "css-color-keywords": "^1.0.0",
24
- "duoyun-ui": "^2.2.0",
24
+ "duoyun-ui": "^2.2.3",
25
25
  "tree-sitter": "^0.22.4",
26
26
  "tree-sitter-typescript": "^0.23.2",
27
27
  "vscode-languageserver": "^9.0.1",
28
28
  "vscode-languageserver-textdocument": "^1.0.12"
29
29
  },
30
30
  "devDependencies": {
31
- "@gemjs/config": "^2.1.0"
31
+ "@gemjs/config": "^2.1.3"
32
32
  },
33
33
  "author": "mantou132",
34
34
  "license": "MIT",