css-variable-lsp 1.0.17 → 1.0.18

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.
Files changed (42) hide show
  1. package/package.json +1 -1
  2. package/docs/SCSS_SASS_SUPPORT_RESEARCH.md +0 -96
  3. package/out/handlers/callHierarchy.js +0 -128
  4. package/out/handlers/callHierarchy.js.map +0 -1
  5. package/out/handlers/codeAction.js +0 -142
  6. package/out/handlers/codeAction.js.map +0 -1
  7. package/out/handlers/codeLens.js +0 -41
  8. package/out/handlers/codeLens.js.map +0 -1
  9. package/out/handlers/declaration.js +0 -34
  10. package/out/handlers/declaration.js.map +0 -1
  11. package/out/handlers/documentHighlight.js +0 -45
  12. package/out/handlers/documentHighlight.js.map +0 -1
  13. package/out/handlers/documentLink.js +0 -61
  14. package/out/handlers/documentLink.js.map +0 -1
  15. package/out/handlers/documentSync.js +0 -15
  16. package/out/handlers/documentSync.js.map +0 -1
  17. package/out/handlers/foldingRange.js +0 -77
  18. package/out/handlers/foldingRange.js.map +0 -1
  19. package/out/handlers/formatting.js +0 -99
  20. package/out/handlers/formatting.js.map +0 -1
  21. package/out/handlers/implementation.js +0 -35
  22. package/out/handlers/implementation.js.map +0 -1
  23. package/out/handlers/inlayHint.js +0 -46
  24. package/out/handlers/inlayHint.js.map +0 -1
  25. package/out/handlers/linkedEditingRange.js +0 -45
  26. package/out/handlers/linkedEditingRange.js.map +0 -1
  27. package/out/handlers/prepareRename.js +0 -44
  28. package/out/handlers/prepareRename.js.map +0 -1
  29. package/out/handlers/selectionRange.js +0 -100
  30. package/out/handlers/selectionRange.js.map +0 -1
  31. package/out/handlers/semanticTokens.js +0 -57
  32. package/out/handlers/semanticTokens.js.map +0 -1
  33. package/out/handlers/signatureHelp.js +0 -54
  34. package/out/handlers/signatureHelp.js.map +0 -1
  35. package/out/handlers/typeDefinition.js +0 -35
  36. package/out/handlers/typeDefinition.js.map +0 -1
  37. package/out/hierarchy/callHierarchy.js +0 -119
  38. package/out/hierarchy/callHierarchy.js.map +0 -1
  39. package/out/hierarchy/shared/hierarchyTypes.js +0 -45
  40. package/out/hierarchy/shared/hierarchyTypes.js.map +0 -1
  41. package/out/hierarchy/shared/variableAnalyzer.js +0 -43
  42. package/out/hierarchy/shared/variableAnalyzer.js.map +0 -1
@@ -1,77 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.handleFoldingRange = handleFoldingRange;
4
- const node_1 = require("vscode-languageserver/node");
5
- const csstree = require("css-tree");
6
- /**
7
- * Handle folding range requests for CSS documents.
8
- * Provides folding for:
9
- * - CSS rule blocks (selector { ... })
10
- * - At-rules (@media, @keyframes, @supports, etc.)
11
- * - Multi-line comments
12
- */
13
- function handleFoldingRange(params, documents) {
14
- const document = documents.get(params.textDocument.uri);
15
- if (!document) {
16
- return null;
17
- }
18
- const text = document.getText();
19
- const foldingRanges = [];
20
- // Parse CSS and find foldable blocks
21
- try {
22
- const ast = csstree.parse(text, {
23
- positions: true,
24
- onParseError: () => {
25
- // Ignore parse errors for folding
26
- },
27
- });
28
- csstree.walk(ast, {
29
- enter: (node) => {
30
- // Fold CSS rules (selector { ... })
31
- if (node.type === "Rule" && node.loc) {
32
- const startLine = node.loc.start.line - 1; // LSP is 0-based
33
- const endLine = node.loc.end.line - 1;
34
- // Only fold if it spans multiple lines
35
- if (endLine > startLine) {
36
- foldingRanges.push({
37
- startLine,
38
- endLine,
39
- kind: node_1.FoldingRangeKind.Region,
40
- });
41
- }
42
- }
43
- // Fold at-rules (@media, @keyframes, @supports, @font-face, etc.)
44
- if (node.type === "Atrule" && node.loc && node.block) {
45
- const startLine = node.loc.start.line - 1;
46
- const endLine = node.loc.end.line - 1;
47
- if (endLine > startLine) {
48
- foldingRanges.push({
49
- startLine,
50
- endLine,
51
- kind: node_1.FoldingRangeKind.Region,
52
- });
53
- }
54
- }
55
- },
56
- });
57
- }
58
- catch {
59
- // If CSS parsing fails, fall back to brace matching
60
- }
61
- // Find multi-line comments using regex
62
- const commentRegex = /\/\*[\s\S]*?\*\//g;
63
- let match;
64
- while ((match = commentRegex.exec(text)) !== null) {
65
- const startPos = document.positionAt(match.index);
66
- const endPos = document.positionAt(match.index + match[0].length);
67
- if (endPos.line > startPos.line) {
68
- foldingRanges.push({
69
- startLine: startPos.line,
70
- endLine: endPos.line,
71
- kind: node_1.FoldingRangeKind.Comment,
72
- });
73
- }
74
- }
75
- return foldingRanges;
76
- }
77
- //# sourceMappingURL=foldingRange.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"foldingRange.js","sourceRoot":"","sources":["../../src/handlers/foldingRange.ts"],"names":[],"mappings":";;AAeA,gDA0EC;AAzFD,qDAIoC;AAEpC,oCAAoC;AAEpC;;;;;;GAMG;AACH,SAAgB,kBAAkB,CAChC,MAA0B,EAC1B,SAAyD;IAEzD,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IACxD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;IAChC,MAAM,aAAa,GAAmB,EAAE,CAAC;IAEzC,qCAAqC;IACrC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE;YAC9B,SAAS,EAAE,IAAI;YACf,YAAY,EAAE,GAAG,EAAE;gBACjB,kCAAkC;YACpC,CAAC;SACF,CAAC,CAAC;QAEH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE;YAChB,KAAK,EAAE,CAAC,IAAqB,EAAE,EAAE;gBAC/B,oCAAoC;gBACpC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;oBACrC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,iBAAiB;oBAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;oBAEtC,uCAAuC;oBACvC,IAAI,OAAO,GAAG,SAAS,EAAE,CAAC;wBACxB,aAAa,CAAC,IAAI,CAAC;4BACjB,SAAS;4BACT,OAAO;4BACP,IAAI,EAAE,uBAAgB,CAAC,MAAM;yBAC9B,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAED,kEAAkE;gBAClE,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACrD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;oBAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;oBAEtC,IAAI,OAAO,GAAG,SAAS,EAAE,CAAC;wBACxB,aAAa,CAAC,IAAI,CAAC;4BACjB,SAAS;4BACT,OAAO;4BACP,IAAI,EAAE,uBAAgB,CAAC,MAAM;yBAC9B,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,oDAAoD;IACtD,CAAC;IAED,uCAAuC;IACvC,MAAM,YAAY,GAAG,mBAAmB,CAAC;IACzC,IAAI,KAAK,CAAC;IACV,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAElE,IAAI,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;YAChC,aAAa,CAAC,IAAI,CAAC;gBACjB,SAAS,EAAE,QAAQ,CAAC,IAAI;gBACxB,OAAO,EAAE,MAAM,CAAC,IAAI;gBACpB,IAAI,EAAE,uBAAgB,CAAC,OAAO;aAC/B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC"}
@@ -1,99 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.handleDocumentFormatting = handleDocumentFormatting;
4
- exports.handleDocumentRangeFormatting = handleDocumentRangeFormatting;
5
- const node_1 = require("vscode-languageserver/node");
6
- /**
7
- * Handle document formatting requests.
8
- * Basic CSS formatting implementation.
9
- */
10
- function handleDocumentFormatting(params, documents) {
11
- const document = documents.get(params.textDocument.uri);
12
- if (!document) {
13
- return null;
14
- }
15
- const text = document.getText();
16
- const formatted = formatCss(text, params.options);
17
- // Replace entire document
18
- const fullRange = {
19
- start: document.positionAt(0),
20
- end: document.positionAt(text.length),
21
- };
22
- return [node_1.TextEdit.replace(fullRange, formatted)];
23
- }
24
- /**
25
- * Handle document range formatting requests.
26
- */
27
- function handleDocumentRangeFormatting(params, documents) {
28
- const document = documents.get(params.textDocument.uri);
29
- if (!document) {
30
- return null;
31
- }
32
- const startOffset = document.offsetAt(params.range.start);
33
- const endOffset = document.offsetAt(params.range.end);
34
- const text = document.getText();
35
- // Format the selected text (basic implementation)
36
- const selectedText = text.slice(startOffset, endOffset);
37
- const formatted = formatCss(selectedText, params.options);
38
- return [node_1.TextEdit.replace(params.range, formatted)];
39
- }
40
- /**
41
- * Simple CSS formatter.
42
- * TODO: Integrate a proper parser/formatter like prettier or css-tree's generator if needed.
43
- * This is a basic rule-based formatter.
44
- */
45
- function formatCss(text, options) {
46
- const indentChar = options.insertSpaces ? " ".repeat(options.tabSize) : "\t";
47
- let depth = 0;
48
- let output = "";
49
- let insideString = null;
50
- // Normalize newlines
51
- const lines = text
52
- .split(/\r?\n/)
53
- .map((l) => l.trim())
54
- .filter((l) => l.length > 0);
55
- const joined = lines.join(" ");
56
- // Simple tokenizing
57
- let i = 0;
58
- while (i < joined.length) {
59
- const char = joined[i];
60
- if (insideString) {
61
- output += char;
62
- if (char === insideString && joined[i - 1] !== "\\") {
63
- insideString = null;
64
- }
65
- i++;
66
- continue;
67
- }
68
- if (char === '"' || char === "'") {
69
- insideString = char;
70
- output += char;
71
- i++;
72
- continue;
73
- }
74
- if (char === "{") {
75
- depth++;
76
- output += " {\n" + indentChar.repeat(depth);
77
- i++;
78
- }
79
- else if (char === "}") {
80
- depth = Math.max(0, depth - 1);
81
- output = output.trimEnd() + "\n" + indentChar.repeat(depth) + "}";
82
- // If next char is not a closing brace, add newline
83
- if (i + 1 < joined.length && joined[i + 1] !== "}") {
84
- output += "\n" + indentChar.repeat(depth);
85
- }
86
- i++;
87
- }
88
- else if (char === ";") {
89
- output += ";\n" + indentChar.repeat(depth);
90
- i++;
91
- }
92
- else {
93
- output += char;
94
- i++;
95
- }
96
- }
97
- return output.trim() + "\n";
98
- }
99
- //# sourceMappingURL=formatting.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"formatting.js","sourceRoot":"","sources":["../../src/handlers/formatting.ts"],"names":[],"mappings":"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"}
@@ -1,35 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.handleImplementation = handleImplementation;
4
- const node_1 = require("vscode-languageserver/node");
5
- /**
6
- * Handle implementation requests for CSS variables.
7
- * For CSS variables, implementation points to where the variable is actually
8
- * used or defined (similar to definition for variables).
9
- */
10
- function handleImplementation(params, documents, cssVariableManager) {
11
- const document = documents.get(params.textDocument.uri);
12
- if (!document) {
13
- return null;
14
- }
15
- const text = document.getText();
16
- const offset = document.offsetAt(params.position);
17
- // Find the word at the cursor position
18
- const left = text.slice(0, offset).match(/[\w-]*$/);
19
- const right = text.slice(offset).match(/^[\w-]*/);
20
- if (!left || !right) {
21
- return null;
22
- }
23
- const word = left[0] + right[0];
24
- // Check if it's a CSS variable
25
- if (word.startsWith("--")) {
26
- const variables = cssVariableManager.getVariables(word);
27
- if (variables.length > 0) {
28
- // For CSS variables, implementation points to the definition
29
- // This could be enhanced to point to actual usage/implementation sites
30
- return node_1.Location.create(variables[0].uri, variables[0].range);
31
- }
32
- }
33
- return null;
34
- }
35
- //# sourceMappingURL=implementation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"implementation.js","sourceRoot":"","sources":["../../src/handlers/implementation.ts"],"names":[],"mappings":";;AAcA,oDAkCC;AAzCD,qDAAsD;AAEtD;;;;GAIG;AACH,SAAgB,oBAAoB,CAClC,MAAkC,EAClC,SAAyD,EACzD,kBAAsC;IAEtC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IACxD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAElD,uCAAuC;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAElD,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAEhC,+BAA+B;IAC/B,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,kBAAkB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACxD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,6DAA6D;YAC7D,uEAAuE;YACvE,OAAO,eAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,46 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.handleInlayHints = handleInlayHints;
4
- const node_1 = require("vscode-languageserver/node");
5
- /**
6
- * Handle inlay hint requests for CSS documents.
7
- * Shows resolved variable values inline after var() usages.
8
- */
9
- function handleInlayHints(params, documents, cssVariableManager) {
10
- const document = documents.get(params.textDocument.uri);
11
- if (!document) {
12
- return null;
13
- }
14
- const text = document.getText();
15
- const hints = [];
16
- // Find all var(--name) usages
17
- const varRegex = /var\((--[\w-]+)(?:\s*,\s*[^)]+)?\)/g;
18
- let match;
19
- while ((match = varRegex.exec(text)) !== null) {
20
- const variableName = match[1];
21
- const matchEnd = match.index + match[0].length;
22
- // Check if this match is within the requested range
23
- const endPos = document.positionAt(matchEnd);
24
- if (endPos.line < params.range.start.line ||
25
- endPos.line > params.range.end.line) {
26
- continue;
27
- }
28
- // Get the variable value
29
- const variables = cssVariableManager.getVariables(variableName);
30
- if (variables.length === 0) {
31
- continue;
32
- }
33
- // Use the first (highest priority) definition
34
- const value = variables[0].value;
35
- // Truncate long values
36
- const displayValue = value.length > 30 ? value.slice(0, 27) + "..." : value;
37
- hints.push({
38
- position: endPos,
39
- label: ` → ${displayValue}`,
40
- kind: node_1.InlayHintKind.Type,
41
- paddingLeft: true,
42
- });
43
- }
44
- return hints;
45
- }
46
- //# sourceMappingURL=inlayHint.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"inlayHint.js","sourceRoot":"","sources":["../../src/handlers/inlayHint.ts"],"names":[],"mappings":";;AAYA,4CAmDC;AA/DD,qDAIoC;AAIpC;;;GAGG;AACH,SAAgB,gBAAgB,CAC9B,MAAuB,EACvB,SAAyD,EACzD,kBAAsC;IAEtC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IACxD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;IAChC,MAAM,KAAK,GAAgB,EAAE,CAAC;IAE9B,8BAA8B;IAC9B,MAAM,QAAQ,GAAG,qCAAqC,CAAC;IACvD,IAAI,KAAK,CAAC;IAEV,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC9C,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAE/C,oDAAoD;QACpD,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC7C,IACE,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI;YACrC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EACnC,CAAC;YACD,SAAS;QACX,CAAC;QAED,yBAAyB;QACzB,MAAM,SAAS,GAAG,kBAAkB,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QAChE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,SAAS;QACX,CAAC;QAED,8CAA8C;QAC9C,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAEjC,uBAAuB;QACvB,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QAE5E,KAAK,CAAC,IAAI,CAAC;YACT,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,MAAM,YAAY,EAAE;YAC3B,IAAI,EAAE,oBAAa,CAAC,IAAI;YACxB,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1,45 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.handleLinkedEditingRange = handleLinkedEditingRange;
4
- /**
5
- * Handle linked editing range requests for CSS variables.
6
- * Returns ranges that should be edited simultaneously (variable name in definition and usages).
7
- */
8
- function handleLinkedEditingRange(params, documents, cssVariableManager) {
9
- const document = documents.get(params.textDocument.uri);
10
- if (!document) {
11
- return null;
12
- }
13
- const text = document.getText();
14
- const offset = document.offsetAt(params.position);
15
- // Find the word at the cursor position
16
- const left = text.slice(0, offset).match(/[\w-]*$/);
17
- const right = text.slice(offset).match(/^[\w-]*/);
18
- if (!left || !right) {
19
- return null;
20
- }
21
- const word = left[0] + right[0];
22
- // Only for CSS variables
23
- if (!word.startsWith("--")) {
24
- return null;
25
- }
26
- // Get all references to this variable in the current document
27
- const references = cssVariableManager.getReferences(word);
28
- const documentRefs = references.filter((ref) => ref.uri === document.uri);
29
- if (documentRefs.length === 0) {
30
- return null;
31
- }
32
- // Return all ranges that contain just the variable name
33
- const ranges = documentRefs
34
- .map((ref) => ref.nameRange || ref.range)
35
- .filter((range) => range !== undefined);
36
- if (ranges.length === 0) {
37
- return null;
38
- }
39
- return {
40
- ranges,
41
- // CSS variable names follow this pattern
42
- wordPattern: "--[\\w-]+",
43
- };
44
- }
45
- //# sourceMappingURL=linkedEditingRange.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"linkedEditingRange.js","sourceRoot":"","sources":["../../src/handlers/linkedEditingRange.ts"],"names":[],"mappings":";;AAYA,4DAkDC;AAtDD;;;GAGG;AACH,SAAgB,wBAAwB,CACtC,MAAgC,EAChC,SAAyD,EACzD,kBAAsC;IAEtC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IACxD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAElD,uCAAuC;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAElD,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAEhC,yBAAyB;IACzB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,8DAA8D;IAC9D,MAAM,UAAU,GAAG,kBAAkB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG,CAAC,CAAC;IAE1E,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wDAAwD;IACxD,MAAM,MAAM,GAAY,YAAY;SACjC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,KAAK,CAAC;SACxC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAY,CAAC;IAErD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,MAAM;QACN,yCAAyC;QACzC,WAAW,EAAE,WAAW;KACzB,CAAC;AACJ,CAAC"}
@@ -1,44 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.handlePrepareRename = handlePrepareRename;
4
- /**
5
- * Handle prepare rename requests for CSS variables.
6
- * Validates that the rename target is a valid CSS variable and returns its range.
7
- */
8
- function handlePrepareRename(params, documents, cssVariableManager) {
9
- const document = documents.get(params.textDocument.uri);
10
- if (!document) {
11
- return null;
12
- }
13
- const text = document.getText();
14
- const offset = document.offsetAt(params.position);
15
- // Find the word at the cursor position
16
- const left = text.slice(0, offset).match(/[\w-]*$/);
17
- const right = text.slice(offset).match(/^[\w-]*/);
18
- if (!left || !right) {
19
- return null;
20
- }
21
- const word = left[0] + right[0];
22
- // Only allow renaming CSS variables
23
- if (!word.startsWith("--")) {
24
- return null;
25
- }
26
- // Check if this variable exists (either as definition or usage)
27
- const definitions = cssVariableManager.getVariables(word);
28
- const usages = cssVariableManager.getVariableUsages(word);
29
- if (definitions.length === 0 && usages.length === 0) {
30
- // Variable doesn't exist in the workspace
31
- return null;
32
- }
33
- // Calculate the range of the variable name
34
- const startOffset = offset - left[0].length;
35
- const endOffset = offset + right[0].length;
36
- return {
37
- range: {
38
- start: document.positionAt(startOffset),
39
- end: document.positionAt(endOffset),
40
- },
41
- placeholder: word,
42
- };
43
- }
44
- //# sourceMappingURL=prepareRename.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prepareRename.js","sourceRoot":"","sources":["../../src/handlers/prepareRename.ts"],"names":[],"mappings":";;AAQA,kDAgDC;AApDD;;;GAGG;AACH,SAAgB,mBAAmB,CACjC,MAA2B,EAC3B,SAAyD,EACzD,kBAAsC;IAEtC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IACxD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAElD,uCAAuC;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAElD,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAEhC,oCAAoC;IACpC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gEAAgE;IAChE,MAAM,WAAW,GAAG,kBAAkB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAE1D,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,0CAA0C;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,2CAA2C;IAC3C,MAAM,WAAW,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC5C,MAAM,SAAS,GAAG,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAE3C,OAAO;QACL,KAAK,EAAE;YACL,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC;YACvC,GAAG,EAAE,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC;SACpC;QACD,WAAW,EAAE,IAAI;KAClB,CAAC;AACJ,CAAC"}
@@ -1,100 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.handleSelectionRanges = handleSelectionRanges;
4
- const csstree = require("css-tree");
5
- /**
6
- * Handle selection range requests for CSS documents.
7
- * Returns nested selection ranges for smart "expand selection" functionality.
8
- * Selection hierarchy: value → declaration → rule block → at-rule → stylesheet
9
- */
10
- function handleSelectionRanges(params, documents) {
11
- const document = documents.get(params.textDocument.uri);
12
- if (!document) {
13
- return null;
14
- }
15
- const text = document.getText();
16
- const results = [];
17
- // Parse CSS once
18
- let ast = null;
19
- try {
20
- ast = csstree.parse(text, {
21
- positions: true,
22
- parseCustomProperty: true,
23
- onParseError: () => { },
24
- });
25
- }
26
- catch {
27
- // If parsing fails, return null
28
- return null;
29
- }
30
- for (const position of params.positions) {
31
- const offset = document.offsetAt(position);
32
- const ranges = findContainingRanges(ast, offset, document);
33
- if (ranges.length === 0) {
34
- // Fallback: return the whole document
35
- results.push({
36
- range: {
37
- start: { line: 0, character: 0 },
38
- end: document.positionAt(text.length),
39
- },
40
- });
41
- }
42
- else {
43
- // Build nested SelectionRange from innermost to outermost
44
- let selectionRange;
45
- for (let i = ranges.length - 1; i >= 0; i--) {
46
- selectionRange = {
47
- range: ranges[i],
48
- parent: selectionRange,
49
- };
50
- }
51
- results.push(selectionRange);
52
- }
53
- }
54
- return results;
55
- }
56
- /**
57
- * Find all AST nodes that contain the given offset, from innermost to outermost.
58
- */
59
- function findContainingRanges(ast, offset, document) {
60
- const containers = [];
61
- csstree.walk(ast, {
62
- enter(node) {
63
- if (!node.loc)
64
- return;
65
- const startOffset = document.offsetAt({
66
- line: node.loc.start.line - 1,
67
- character: node.loc.start.column - 1,
68
- });
69
- const endOffset = document.offsetAt({
70
- line: node.loc.end.line - 1,
71
- character: node.loc.end.column - 1,
72
- });
73
- if (offset >= startOffset && offset <= endOffset) {
74
- // Include useful node types for selection
75
- if (node.type === "StyleSheet" ||
76
- node.type === "Rule" ||
77
- node.type === "Atrule" ||
78
- node.type === "Block" ||
79
- node.type === "Declaration" ||
80
- node.type === "Value" ||
81
- node.type === "SelectorList" ||
82
- node.type === "Selector") {
83
- containers.push({ type: node.type, loc: node.loc });
84
- }
85
- }
86
- },
87
- });
88
- // Convert to Range objects, outermost first (StyleSheet → ... → Value)
89
- return containers.map((c) => ({
90
- start: {
91
- line: c.loc.start.line - 1,
92
- character: c.loc.start.column - 1,
93
- },
94
- end: {
95
- line: c.loc.end.line - 1,
96
- character: c.loc.end.column - 1,
97
- },
98
- }));
99
- }
100
- //# sourceMappingURL=selectionRange.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"selectionRange.js","sourceRoot":"","sources":["../../src/handlers/selectionRange.ts"],"names":[],"mappings":"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"}
@@ -1,57 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.semanticTokensLegend = exports.tokenModifiers = exports.tokenTypes = void 0;
4
- exports.handleSemanticTokens = handleSemanticTokens;
5
- const node_1 = require("vscode-languageserver/node");
6
- // Define token types and modifiers
7
- exports.tokenTypes = [
8
- "variable",
9
- "property",
10
- "value",
11
- "string",
12
- "comment",
13
- ];
14
- exports.tokenModifiers = ["declaration", "readonly", "static"];
15
- exports.semanticTokensLegend = {
16
- tokenTypes: exports.tokenTypes,
17
- tokenModifiers: exports.tokenModifiers,
18
- };
19
- /**
20
- * Handle semantic tokens requests.
21
- * Provides syntax highlighting for CSS variables and properties.
22
- */
23
- function handleSemanticTokens(params, documents, cssVariableManager) {
24
- const document = documents.get(params.textDocument.uri);
25
- if (!document) {
26
- return null;
27
- }
28
- const text = document.getText();
29
- const builder = new node_1.SemanticTokensBuilder();
30
- // Highlight CSS variables --var-name
31
- const variableRegex = /--[\w-]+/g;
32
- let match;
33
- while ((match = variableRegex.exec(text)) !== null) {
34
- const startPos = document.positionAt(match.index);
35
- const length = match[0].length;
36
- // Determine if it's a declaration or usage
37
- // Heuristic: check if followed by ":"
38
- const afterMatch = text.slice(match.index + length);
39
- const isDeclaration = /^\s*:/.test(afterMatch);
40
- let variableType = 0; // "variable"
41
- let modifiers = 0;
42
- if (isDeclaration) {
43
- modifiers |= 1 << 0; // "declaration"
44
- }
45
- builder.push(startPos.line, startPos.character, length, variableType, modifiers);
46
- }
47
- // Highlight var() functions
48
- const varFuncRegex = /var\(/g;
49
- while ((match = varFuncRegex.exec(text)) !== null) {
50
- const startPos = document.positionAt(match.index);
51
- // Highlight "var"
52
- builder.push(startPos.line, startPos.character, 3, 1, // "property" (misusing property for function keyword here for distinction)
53
- 0);
54
- }
55
- return builder.build();
56
- }
57
- //# sourceMappingURL=semanticTokens.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"semanticTokens.js","sourceRoot":"","sources":["../../src/handlers/semanticTokens.ts"],"names":[],"mappings":";;;AA2BA,oDAyDC;AApFD,qDAIoC;AAIpC,mCAAmC;AACtB,QAAA,UAAU,GAAG;IACxB,UAAU;IACV,UAAU;IACV,OAAO;IACP,QAAQ;IACR,SAAS;CACV,CAAC;AACW,QAAA,cAAc,GAAG,CAAC,aAAa,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AAEvD,QAAA,oBAAoB,GAAG;IAClC,UAAU,EAAV,kBAAU;IACV,cAAc,EAAd,sBAAc;CACf,CAAC;AAEF;;;GAGG;AACH,SAAgB,oBAAoB,CAClC,MAA4B,EAC5B,SAAyD,EACzD,kBAAsC;IAEtC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IACxD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;IAChC,MAAM,OAAO,GAAG,IAAI,4BAAqB,EAAE,CAAC;IAE5C,qCAAqC;IACrC,MAAM,aAAa,GAAG,WAAW,CAAC;IAClC,IAAI,KAAK,CAAC;IAEV,OAAO,CAAC,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACnD,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAE/B,2CAA2C;QAC3C,sCAAsC;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;QACpD,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE/C,IAAI,YAAY,GAAG,CAAC,CAAC,CAAC,aAAa;QACnC,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,IAAI,aAAa,EAAE,CAAC;YAClB,SAAS,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB;QACvC,CAAC;QAED,OAAO,CAAC,IAAI,CACV,QAAQ,CAAC,IAAI,EACb,QAAQ,CAAC,SAAS,EAClB,MAAM,EACN,YAAY,EACZ,SAAS,CACV,CAAC;IACJ,CAAC;IAED,4BAA4B;IAC5B,MAAM,YAAY,GAAG,QAAQ,CAAC;IAC9B,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAClD,kBAAkB;QAClB,OAAO,CAAC,IAAI,CACV,QAAQ,CAAC,IAAI,EACb,QAAQ,CAAC,SAAS,EAClB,CAAC,EACD,CAAC,EAAE,2EAA2E;QAC9E,CAAC,CACF,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC;AACzB,CAAC"}
@@ -1,54 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.handleSignatureHelp = handleSignatureHelp;
4
- /**
5
- * Handle signature help requests for CSS documents.
6
- * Provides parameter hints for var(--name, fallback) syntax.
7
- */
8
- function handleSignatureHelp(params, documents, cssVariableManager) {
9
- const document = documents.get(params.textDocument.uri);
10
- if (!document) {
11
- return null;
12
- }
13
- const text = document.getText();
14
- const offset = document.offsetAt(params.position);
15
- // Look backwards for "var(" to see if we're inside a var() call
16
- const textBefore = text.slice(0, offset);
17
- const varMatch = textBefore.match(/var\(\s*(--[\w-]*)?(?:\s*,\s*)?$/);
18
- if (!varMatch) {
19
- return null;
20
- }
21
- // Determine which parameter we're in
22
- const afterVar = textBefore.slice(textBefore.lastIndexOf("var("));
23
- const hasComma = afterVar.includes(",");
24
- const activeParameter = hasComma ? 1 : 0;
25
- // Get variable info if we have a name
26
- const varName = varMatch[1];
27
- let variableInfo = "";
28
- if (varName) {
29
- const variables = cssVariableManager.getVariables(varName);
30
- if (variables.length > 0) {
31
- variableInfo = ` (current value: ${variables[0].value})`;
32
- }
33
- }
34
- const signature = {
35
- label: "var(--custom-property, fallback-value)",
36
- documentation: `CSS custom property (variable) function.${variableInfo}\n\nThe var() function substitutes the value of a custom property.`,
37
- parameters: [
38
- {
39
- label: "--custom-property",
40
- documentation: "The name of the custom property to use, starting with --",
41
- },
42
- {
43
- label: "fallback-value",
44
- documentation: "Optional fallback value used if the property is not defined",
45
- },
46
- ],
47
- };
48
- return {
49
- signatures: [signature],
50
- activeSignature: 0,
51
- activeParameter,
52
- };
53
- }
54
- //# sourceMappingURL=signatureHelp.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"signatureHelp.js","sourceRoot":"","sources":["../../src/handlers/signatureHelp.ts"],"names":[],"mappings":";;AAaA,kDA0DC;AA9DD;;;GAGG;AACH,SAAgB,mBAAmB,CACjC,MAA2B,EAC3B,SAAyD,EACzD,kBAAsC;IAEtC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IACxD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAElD,gEAAgE;IAChE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAEtE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qCAAqC;IACrC,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,eAAe,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzC,sCAAsC;IACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,SAAS,GAAG,kBAAkB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC3D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,YAAY,GAAG,oBAAoB,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAyB;QACtC,KAAK,EAAE,wCAAwC;QAC/C,aAAa,EAAE,2CAA2C,YAAY,oEAAoE;QAC1I,UAAU,EAAE;YACV;gBACE,KAAK,EAAE,mBAAmB;gBAC1B,aAAa,EACX,0DAA0D;aACrC;YACzB;gBACE,KAAK,EAAE,gBAAgB;gBACvB,aAAa,EACX,6DAA6D;aACxC;SAC1B;KACF,CAAC;IAEF,OAAO;QACL,UAAU,EAAE,CAAC,SAAS,CAAC;QACvB,eAAe,EAAE,CAAC;QAClB,eAAe;KAChB,CAAC;AACJ,CAAC"}
@@ -1,35 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.handleTypeDefinition = handleTypeDefinition;
4
- const node_1 = require("vscode-languageserver/node");
5
- /**
6
- * Handle type definition requests for CSS variables.
7
- * For CSS variables, type definition is similar to definition -
8
- * it refers to where the variable type/value is defined.
9
- */
10
- function handleTypeDefinition(params, documents, cssVariableManager) {
11
- const document = documents.get(params.textDocument.uri);
12
- if (!document) {
13
- return null;
14
- }
15
- const text = document.getText();
16
- const offset = document.offsetAt(params.position);
17
- // Find the word at the cursor position
18
- const left = text.slice(0, offset).match(/[\w-]*$/);
19
- const right = text.slice(offset).match(/^[\w-]*/);
20
- if (!left || !right) {
21
- return null;
22
- }
23
- const word = left[0] + right[0];
24
- // Check if it's a CSS variable
25
- if (word.startsWith("--")) {
26
- const variables = cssVariableManager.getVariables(word);
27
- if (variables.length > 0) {
28
- // For CSS variables, type definition points to where the variable is defined
29
- // This could be enhanced to include type information (color, size, etc.)
30
- return node_1.Location.create(variables[0].uri, variables[0].range);
31
- }
32
- }
33
- return null;
34
- }
35
- //# sourceMappingURL=typeDefinition.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"typeDefinition.js","sourceRoot":"","sources":["../../src/handlers/typeDefinition.ts"],"names":[],"mappings":";;AAcA,oDAkCC;AAzCD,qDAAsD;AAEtD;;;;GAIG;AACH,SAAgB,oBAAoB,CAClC,MAAkC,EAClC,SAAyD,EACzD,kBAAsC;IAEtC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IACxD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAElD,uCAAuC;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAElD,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAEhC,+BAA+B;IAC/B,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,kBAAkB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACxD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,6EAA6E;YAC7E,yEAAyE;YACzE,OAAO,eAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}