tailwind-typescript-plugin 1.4.0-beta.10 → 1.4.0-beta.11

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/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## [1.4.0-beta.11](https://github.com/IvanRodriCalleja/tailwind-typescript-plugin/compare/v1.4.0-beta.10...v1.4.0-beta.11) (2025-11-29)
2
+
3
+ ### ✨ Features
4
+
5
+ * add Tailwind CSS class completion suggestions ([a6f20ff](https://github.com/IvanRodriCalleja/tailwind-typescript-plugin/commit/a6f20ff1c4fb97577e92ce7946ed1e6cd7d196a4))
6
+
1
7
  ## [1.4.0-beta.10](https://github.com/IvanRodriCalleja/tailwind-typescript-plugin/compare/v1.4.0-beta.9...v1.4.0-beta.10) (2025-11-29)
2
8
 
3
9
  ### ⚡ Performance
package/README.md CHANGED
@@ -1116,7 +1116,7 @@ Commit to main → Auto-publishes 1.0.33-beta.3
1116
1116
 
1117
1117
  Users can install beta versions:
1118
1118
  ```bash
1119
- npm install typescript-custom-plugin@beta
1119
+ npm install tailwind-typescript-plugin@beta
1120
1120
  ```
1121
1121
 
1122
1122
  ### Stable Releases (Manual)
@@ -7,6 +7,7 @@ export declare class TailwindTypescriptPlugin {
7
7
  private configService;
8
8
  private diagnosticCache;
9
9
  private codeActionService;
10
+ private completionService;
10
11
  private initializationPromise;
11
12
  private cssFileWatcher;
12
13
  private cssFilePath;
@@ -60,6 +61,14 @@ export declare class TailwindTypescriptPlugin {
60
61
  * Create the getEditsForRefactor method to handle Tailwind refactor actions
61
62
  */
62
63
  private createGetEditsForRefactor;
64
+ /**
65
+ * Create the getCompletionsAtPosition method with Tailwind class completions
66
+ */
67
+ private createGetCompletionsAtPosition;
68
+ /**
69
+ * Create the getCompletionEntryDetails method with CSS documentation
70
+ */
71
+ private createGetCompletionEntryDetails;
63
72
  /**
64
73
  * Clean up resources when the plugin is disposed
65
74
  * This closes file watchers and other resources that would otherwise keep the process alive
@@ -1 +1 @@
1
- {"version":3,"file":"TailwindTypescriptPlugin.d.ts","sourceRoot":"","sources":["../../src/plugin/TailwindTypescriptPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAarD,qBAAa,wBAAwB;IAWxB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAVvC,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,qBAAqB,CAA8B;IAC3D,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,WAAW,CAAuB;gBAEb,UAAU,EAAE,OAAO,EAAE;IAElD;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,eAAe;IAmB5D;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAuD3B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAyC3B;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAoE1B;;;OAGG;IACH,OAAO,CAAC,0BAA0B;IA2ClC;;;OAGG;IACH,OAAO,CAAC,4BAA4B,CA+CjC;IAEH;;OAEG;IACH,OAAO,CAAC,4BAA4B,CAuEjC;IAEH;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAmB1B;;OAEG;IACH,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAIhD;;;OAGG;IACH,OAAO,CAAC,4BAA4B,CA2GjC;IAEH;;OAEG;IACH,OAAO,CAAC,yBAAyB,CAsG9B;IAEH;;;OAGG;IACH,OAAO,IAAI,IAAI;CAMf"}
1
+ {"version":3,"file":"TailwindTypescriptPlugin.d.ts","sourceRoot":"","sources":["../../src/plugin/TailwindTypescriptPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAcrD,qBAAa,wBAAwB;IAYxB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAXvC,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,qBAAqB,CAA8B;IAC3D,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,WAAW,CAAuB;gBAEb,UAAU,EAAE,OAAO,EAAE;IAElD;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,eAAe;IAmB5D;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA0D3B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAyC3B;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IA0E1B;;;OAGG;IACH,OAAO,CAAC,0BAA0B;IAiDlC;;;OAGG;IACH,OAAO,CAAC,4BAA4B,CA+CjC;IAEH;;OAEG;IACH,OAAO,CAAC,4BAA4B,CAuEjC;IAEH;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAmB1B;;OAEG;IACH,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAIhD;;;OAGG;IACH,OAAO,CAAC,4BAA4B,CA2GjC;IAEH;;OAEG;IACH,OAAO,CAAC,yBAAyB,CAsG9B;IAEH;;OAEG;IACH,OAAO,CAAC,8BAA8B,CAyCnC;IAEH;;OAEG;IACH,OAAO,CAAC,+BAA+B,CAkEpC;IAEH;;;OAGG;IACH,OAAO,IAAI,IAAI;CAMf"}
@@ -9,6 +9,7 @@ const path_1 = __importDefault(require("path"));
9
9
  const TailwindValidator_1 = require("../infrastructure/TailwindValidator");
10
10
  const ClassNameExtractionService_1 = require("../services/ClassNameExtractionService");
11
11
  const CodeActionService_1 = require("../services/CodeActionService");
12
+ const CompletionService_1 = require("../services/CompletionService");
12
13
  const DiagnosticService_1 = require("../services/DiagnosticService");
13
14
  const FileDiagnosticCache_1 = require("../services/FileDiagnosticCache");
14
15
  const PluginConfigService_1 = require("../services/PluginConfigService");
@@ -251,6 +252,57 @@ class TailwindTypescriptPlugin {
251
252
  }
252
253
  return undefined;
253
254
  };
255
+ /**
256
+ * Create the getCompletionsAtPosition method with Tailwind class completions
257
+ */
258
+ this.createGetCompletionsAtPosition = (info) => (fileName, position, options) => {
259
+ this.logger.log(`[getCompletionsAtPosition] fileName=${fileName}, position=${position}`);
260
+ // Get original TypeScript completions
261
+ const prior = info.languageService.getCompletionsAtPosition(fileName, position, options);
262
+ // Skip if completion service not initialized or not a supported file
263
+ if (!this.completionService || !this.shouldValidateFile(fileName)) {
264
+ return prior;
265
+ }
266
+ // Get source file
267
+ const program = info.languageService.getProgram();
268
+ if (!program) {
269
+ return prior;
270
+ }
271
+ const sourceFile = program.getSourceFile(fileName);
272
+ if (!sourceFile) {
273
+ return prior;
274
+ }
275
+ // Get Tailwind completions
276
+ const tailwindCompletions = this.completionService.getCompletionsAtPosition(this.typescript, sourceFile, position, prior);
277
+ if (!tailwindCompletions) {
278
+ return prior;
279
+ }
280
+ return tailwindCompletions;
281
+ };
282
+ /**
283
+ * Create the getCompletionEntryDetails method with CSS documentation
284
+ */
285
+ this.createGetCompletionEntryDetails = (info) => (fileName, position, entryName, formatOptions, source, preferences, data) => {
286
+ this.logger.log(`[getCompletionEntryDetails] fileName=${fileName}, position=${position}, entryName=${entryName}`);
287
+ // Get source file
288
+ const program = info.languageService.getProgram();
289
+ if (!program) {
290
+ return info.languageService.getCompletionEntryDetails(fileName, position, entryName, formatOptions, source, preferences, data);
291
+ }
292
+ const sourceFile = program.getSourceFile(fileName);
293
+ if (!sourceFile) {
294
+ return info.languageService.getCompletionEntryDetails(fileName, position, entryName, formatOptions, source, preferences, data);
295
+ }
296
+ // Try to get Tailwind completion details first
297
+ if (this.completionService && this.shouldValidateFile(fileName)) {
298
+ const tailwindDetails = this.completionService.getCompletionEntryDetails(this.typescript, sourceFile, position, entryName);
299
+ if (tailwindDetails) {
300
+ return tailwindDetails;
301
+ }
302
+ }
303
+ // Fall back to original TypeScript completion details
304
+ return info.languageService.getCompletionEntryDetails(fileName, position, entryName, formatOptions, source, preferences, data);
305
+ };
254
306
  }
255
307
  /**
256
308
  * Create the plugin proxy for TypeScript Language Service
@@ -294,6 +346,8 @@ class TailwindTypescriptPlugin {
294
346
  );
295
347
  // Initialize code action service for quick fixes
296
348
  this.codeActionService = new CodeActionService_1.CodeActionService(this.validator);
349
+ // Initialize completion service for Tailwind class autocompletion
350
+ this.completionService = new CompletionService_1.CompletionService(this.validator, this.logger);
297
351
  // Set allowed classes from config
298
352
  const allowedClasses = this.configService.getAllowedClasses();
299
353
  if (allowedClasses.length > 0) {
@@ -358,6 +412,11 @@ class TailwindTypescriptPlugin {
358
412
  // Clear the diagnostic cache - all files need revalidation
359
413
  this.diagnosticCache.clear();
360
414
  this.logger.log('[CSSWatcher] Diagnostic cache cleared');
415
+ // Clear the completion service cache
416
+ if (this.completionService) {
417
+ this.completionService.clearCache();
418
+ this.logger.log('[CSSWatcher] Completion cache cleared');
419
+ }
361
420
  // Reload the validator (this clears its internal cache too)
362
421
  this.validator
363
422
  .reload()
@@ -446,6 +505,10 @@ class TailwindTypescriptPlugin {
446
505
  proxy.getApplicableRefactors = this.createGetApplicableRefactors(info);
447
506
  // Override getEditsForRefactor to handle our refactors
448
507
  proxy.getEditsForRefactor = this.createGetEditsForRefactor(info);
508
+ // Override getCompletionsAtPosition to provide Tailwind class completions
509
+ proxy.getCompletionsAtPosition = this.createGetCompletionsAtPosition(info);
510
+ // Override getCompletionEntryDetails to provide CSS documentation for completions
511
+ proxy.getCompletionEntryDetails = this.createGetCompletionEntryDetails(info);
449
512
  return proxy;
450
513
  }
451
514
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"TailwindTypescriptPlugin.js","sourceRoot":"","sources":["../../src/plugin/TailwindTypescriptPlugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TailwindTypescriptPlugin.js","sourceRoot":"","sources":["../../src/plugin/TailwindTypescriptPlugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ import * as ts from 'typescript/lib/tsserverlibrary';
2
+ import { TailwindValidator } from '../infrastructure/TailwindValidator';
3
+ import { Logger } from '../utils/Logger';
4
+ /**
5
+ * Service that provides autocompletion for Tailwind CSS class names
6
+ *
7
+ * Provides completions when:
8
+ * - Cursor is inside a className attribute's string literal
9
+ * - Cursor is inside a utility function argument (clsx, cn, classnames, etc.)
10
+ * - Cursor is inside tv() or cva() class strings
11
+ *
12
+ * Features:
13
+ * - Filters completions based on what's already typed
14
+ * - Excludes classes already present in the same className
15
+ * - Handles space-separated class lists properly
16
+ */
17
+ export declare class CompletionService {
18
+ private readonly validator;
19
+ private readonly logger;
20
+ /** Cached sorted class list for faster completion generation */
21
+ private cachedClassList;
22
+ constructor(validator: TailwindValidator, logger: Logger);
23
+ /**
24
+ * Get completions at the given position
25
+ */
26
+ getCompletionsAtPosition(typescript: typeof ts, sourceFile: ts.SourceFile, position: number, existingCompletions: ts.CompletionInfo | undefined): ts.CompletionInfo | undefined;
27
+ /**
28
+ * Get completion entry details for a specific completion item
29
+ * Formats the documentation with markdown CSS code blocks for syntax highlighting
30
+ */
31
+ getCompletionEntryDetails(typescript: typeof ts, sourceFile: ts.SourceFile, position: number, entryName: string): ts.CompletionEntryDetails | undefined;
32
+ /**
33
+ * Format CSS output for display in the completion documentation
34
+ * Transforms the raw Tailwind CSS output into a nicely formatted rule block
35
+ */
36
+ private formatCssForDisplay;
37
+ /**
38
+ * Extract just the CSS declarations from a CSS rule for the detail summary
39
+ * e.g., ".flex { display: flex; }" -> "display: flex;"
40
+ */
41
+ private extractCssDeclarations;
42
+ /**
43
+ * Check if a name is a valid Tailwind class
44
+ */
45
+ private isTailwindClass;
46
+ /**
47
+ * Analyze the source file at the given position to determine completion context
48
+ */
49
+ private getCompletionContext;
50
+ /**
51
+ * Find the deepest node at the given position
52
+ * Uses TypeScript's built-in method which handles edge cases better
53
+ */
54
+ private findNodeAtPosition;
55
+ /**
56
+ * Check if a string literal node is in a className-like context
57
+ */
58
+ private isClassNameContext;
59
+ /**
60
+ * Check if an attribute name is a className-like attribute
61
+ */
62
+ private isClassNameAttribute;
63
+ /**
64
+ * Check if a function name is a common utility function for class names
65
+ */
66
+ private isUtilityFunction;
67
+ /**
68
+ * Get the name of a call expression
69
+ */
70
+ private getCallExpressionName;
71
+ /**
72
+ * Find the parent call expression of a node
73
+ */
74
+ private findParentCallExpression;
75
+ /**
76
+ * Generate completion entries for Tailwind classes
77
+ */
78
+ private generateCompletions;
79
+ /**
80
+ * Get the cached class list, initializing if necessary
81
+ */
82
+ private getClassList;
83
+ /**
84
+ * Clear the cached class list (call when design system reloads)
85
+ */
86
+ clearCache(): void;
87
+ /**
88
+ * Check if a class name is related to colors
89
+ * Uses a pattern-based approach to detect color classes efficiently
90
+ */
91
+ private isColorClass;
92
+ /**
93
+ * Generate sort text for completion ordering
94
+ * Classes that start with the prefix get priority
95
+ */
96
+ private getSortText;
97
+ }
98
+ //# sourceMappingURL=CompletionService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CompletionService.d.ts","sourceRoot":"","sources":["../../src/services/CompletionService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAErD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAkBzC;;;;;;;;;;;;GAYG;AACH,qBAAa,iBAAiB;IAK5B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM;IALxB,gEAAgE;IAChE,OAAO,CAAC,eAAe,CAAyB;gBAG9B,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,MAAM;IAGhC;;OAEG;IACH,wBAAwB,CACvB,UAAU,EAAE,OAAO,EAAE,EACrB,UAAU,EAAE,EAAE,CAAC,UAAU,EACzB,QAAQ,EAAE,MAAM,EAChB,mBAAmB,EAAE,EAAE,CAAC,cAAc,GAAG,SAAS,GAChD,EAAE,CAAC,cAAc,GAAG,SAAS;IA+BhC;;;OAGG;IACH,yBAAyB,CACxB,UAAU,EAAE,OAAO,EAAE,EACrB,UAAU,EAAE,EAAE,CAAC,UAAU,EACzB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GACf,EAAE,CAAC,sBAAsB,GAAG,SAAS;IAuCxC;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAuC3B;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAiB9B;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAkF5B;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IA8B1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAwD1B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAU5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAezB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAiB7B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAyBhC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA8C3B;;OAEG;IACH,OAAO,CAAC,YAAY;IAQpB;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;;OAGG;IACH,OAAO,CAAC,YAAY;IA+EpB;;;OAGG;IACH,OAAO,CAAC,WAAW;CAcnB"}
@@ -0,0 +1,484 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CompletionService = void 0;
4
+ /**
5
+ * Service that provides autocompletion for Tailwind CSS class names
6
+ *
7
+ * Provides completions when:
8
+ * - Cursor is inside a className attribute's string literal
9
+ * - Cursor is inside a utility function argument (clsx, cn, classnames, etc.)
10
+ * - Cursor is inside tv() or cva() class strings
11
+ *
12
+ * Features:
13
+ * - Filters completions based on what's already typed
14
+ * - Excludes classes already present in the same className
15
+ * - Handles space-separated class lists properly
16
+ */
17
+ class CompletionService {
18
+ constructor(validator, logger) {
19
+ this.validator = validator;
20
+ this.logger = logger;
21
+ /** Cached sorted class list for faster completion generation */
22
+ this.cachedClassList = null;
23
+ }
24
+ /**
25
+ * Get completions at the given position
26
+ */
27
+ getCompletionsAtPosition(typescript, sourceFile, position, existingCompletions) {
28
+ const context = this.getCompletionContext(typescript, sourceFile, position);
29
+ if (!context.isInClassNameContext) {
30
+ this.logger.log('[CompletionService] Not in className context, returning original completions');
31
+ return existingCompletions;
32
+ }
33
+ this.logger.log(`[CompletionService] In className context, prefix="${context.currentPrefix}", existingClasses=${context.existingClasses.size}`);
34
+ const tailwindCompletions = this.generateCompletions(typescript, context);
35
+ if (tailwindCompletions.length === 0) {
36
+ return existingCompletions;
37
+ }
38
+ // Create completion info with Tailwind classes
39
+ const completionInfo = {
40
+ isGlobalCompletion: false,
41
+ isMemberCompletion: false,
42
+ isNewIdentifierLocation: false,
43
+ entries: tailwindCompletions
44
+ };
45
+ return completionInfo;
46
+ }
47
+ /**
48
+ * Get completion entry details for a specific completion item
49
+ * Formats the documentation with markdown CSS code blocks for syntax highlighting
50
+ */
51
+ getCompletionEntryDetails(typescript, sourceFile, position, entryName) {
52
+ // Check if this is a Tailwind class completion
53
+ if (!this.isTailwindClass(entryName)) {
54
+ return undefined;
55
+ }
56
+ // Get the CSS for this class
57
+ const cssResults = this.validator.getCssForClasses([entryName]);
58
+ const css = cssResults[0];
59
+ const documentation = [];
60
+ if (css) {
61
+ // Format the CSS with proper structure like Tailwind IntelliSense
62
+ const formattedCss = this.formatCssForDisplay(css);
63
+ // Use markdown code block for syntax highlighting
64
+ documentation.push({
65
+ kind: 'text',
66
+ text: '```css\n' + formattedCss + '\n```'
67
+ });
68
+ }
69
+ // Extract just the declarations for the detail (short summary)
70
+ const detail = css ? this.extractCssDeclarations(css) : undefined;
71
+ // Check if this is a color class for the icon
72
+ const isColor = this.isColorClass(entryName);
73
+ return {
74
+ name: entryName,
75
+ kind: typescript.ScriptElementKind.string,
76
+ // Set 'color' kindModifier for color classes so VS Code shows color icon
77
+ kindModifiers: isColor ? 'color' : '',
78
+ displayParts: detail ? [{ kind: 'text', text: detail }] : [{ kind: 'text', text: entryName }],
79
+ documentation
80
+ };
81
+ }
82
+ /**
83
+ * Format CSS output for display in the completion documentation
84
+ * Transforms the raw Tailwind CSS output into a nicely formatted rule block
85
+ */
86
+ formatCssForDisplay(css) {
87
+ // The CSS from Tailwind typically looks like:
88
+ // .flex { display: flex; }
89
+ // We want to format it nicely with proper indentation
90
+ // First, let's clean up and format the CSS
91
+ const formatted = css.trim();
92
+ // If it's already well-formatted, return as-is
93
+ if (formatted.includes('\n')) {
94
+ return formatted;
95
+ }
96
+ // Single-line CSS: format it nicely
97
+ // Match pattern: .selector { declarations }
98
+ const singleLineMatch = formatted.match(/^([^{]+)\{([^}]+)\}$/);
99
+ if (singleLineMatch) {
100
+ const selector = singleLineMatch[1].trim();
101
+ const declarations = singleLineMatch[2].trim();
102
+ // Split declarations and format each on its own line
103
+ const declParts = declarations
104
+ .split(';')
105
+ .map(d => d.trim())
106
+ .filter(d => d.length > 0);
107
+ if (declParts.length === 1) {
108
+ // Single declaration: keep on one line
109
+ return `${selector} {\n ${declParts[0]};\n}`;
110
+ }
111
+ else {
112
+ // Multiple declarations: each on its own line
113
+ const formattedDecls = declParts.map(d => ` ${d};`).join('\n');
114
+ return `${selector} {\n${formattedDecls}\n}`;
115
+ }
116
+ }
117
+ return formatted;
118
+ }
119
+ /**
120
+ * Extract just the CSS declarations from a CSS rule for the detail summary
121
+ * e.g., ".flex { display: flex; }" -> "display: flex;"
122
+ */
123
+ extractCssDeclarations(css) {
124
+ // Match the content inside the curly braces
125
+ const match = css.match(/\{([^}]+)\}/);
126
+ if (match) {
127
+ // Clean up the declarations
128
+ return (match[1]
129
+ .trim()
130
+ .split(';')
131
+ .map(d => d.trim())
132
+ .filter(d => d.length > 0)
133
+ .join('; ') + ';');
134
+ }
135
+ return css.trim();
136
+ }
137
+ /**
138
+ * Check if a name is a valid Tailwind class
139
+ */
140
+ isTailwindClass(name) {
141
+ return this.validator.isValidClass(name);
142
+ }
143
+ /**
144
+ * Analyze the source file at the given position to determine completion context
145
+ */
146
+ getCompletionContext(typescript, sourceFile, position) {
147
+ const defaultContext = {
148
+ isInClassNameContext: false,
149
+ currentPrefix: '',
150
+ prefixStart: position,
151
+ stringStart: position,
152
+ existingClasses: new Set()
153
+ };
154
+ // Find the node at the current position
155
+ let node = this.findNodeAtPosition(typescript, sourceFile, position);
156
+ if (!node) {
157
+ this.logger.log(`[CompletionService] No node found at position ${position}`);
158
+ return defaultContext;
159
+ }
160
+ this.logger.log(`[CompletionService] Found node kind: ${typescript.SyntaxKind[node.kind]} at position ${position}`);
161
+ // If we found a JsxAttribute, look for its string literal initializer
162
+ if (typescript.isJsxAttribute(node)) {
163
+ const initializer = node.initializer;
164
+ if (initializer && typescript.isStringLiteral(initializer)) {
165
+ node = initializer;
166
+ this.logger.log(`[CompletionService] Found string literal in JsxAttribute initializer`);
167
+ }
168
+ }
169
+ // Check if we're in a string literal
170
+ if (!typescript.isStringLiteral(node) && !typescript.isNoSubstitutionTemplateLiteral(node)) {
171
+ this.logger.log(`[CompletionService] Node is not a string literal: ${typescript.SyntaxKind[node.kind]}`);
172
+ return defaultContext;
173
+ }
174
+ // Check if this string is in a className context
175
+ if (!this.isClassNameContext(typescript, node)) {
176
+ this.logger.log(`[CompletionService] Node is not in className context`);
177
+ return defaultContext;
178
+ }
179
+ // We're in a className context! Now extract the completion details
180
+ const stringContent = node.text;
181
+ const stringStart = node.getStart(sourceFile) + 1; // +1 to skip the opening quote
182
+ const positionInString = position - stringStart;
183
+ // Handle cursor at or before string start
184
+ if (positionInString < 0) {
185
+ return defaultContext;
186
+ }
187
+ // Find the current "word" being typed (from last space to cursor)
188
+ const textBeforeCursor = stringContent.substring(0, positionInString);
189
+ const lastSpaceIndex = textBeforeCursor.lastIndexOf(' ');
190
+ const currentPrefix = lastSpaceIndex === -1 ? textBeforeCursor : textBeforeCursor.substring(lastSpaceIndex + 1);
191
+ const prefixStart = stringStart + (lastSpaceIndex === -1 ? 0 : lastSpaceIndex + 1);
192
+ // Get all existing classes in this attribute (for duplicate filtering)
193
+ const existingClasses = new Set(stringContent.split(/\s+/).filter(c => c.length > 0));
194
+ // Remove the current prefix from existing classes if it's a partial match
195
+ // (so we can still suggest completions for partially typed classes)
196
+ if (currentPrefix) {
197
+ existingClasses.delete(currentPrefix);
198
+ }
199
+ return {
200
+ isInClassNameContext: true,
201
+ currentPrefix,
202
+ prefixStart,
203
+ stringStart,
204
+ existingClasses
205
+ };
206
+ }
207
+ /**
208
+ * Find the deepest node at the given position
209
+ * Uses TypeScript's built-in method which handles edge cases better
210
+ */
211
+ findNodeAtPosition(typescript, sourceFile, position) {
212
+ function find(node) {
213
+ // Use getStart without sourceFile to include trivia, which helps with edge positions
214
+ const start = node.getStart(sourceFile);
215
+ const end = node.getEnd();
216
+ // Position must be within the node's range (inclusive of end for completions)
217
+ if (position < start || position > end) {
218
+ return undefined;
219
+ }
220
+ // Check children first to find the deepest matching node
221
+ let result;
222
+ typescript.forEachChild(node, child => {
223
+ const found = find(child);
224
+ if (found) {
225
+ result = found;
226
+ }
227
+ });
228
+ return result || node;
229
+ }
230
+ return find(sourceFile);
231
+ }
232
+ /**
233
+ * Check if a string literal node is in a className-like context
234
+ */
235
+ isClassNameContext(typescript, node) {
236
+ const parent = node.parent;
237
+ // Case 1: JSX attribute like className="..."
238
+ if (typescript.isJsxAttribute(parent)) {
239
+ const attrName = parent.name.getText();
240
+ return this.isClassNameAttribute(attrName);
241
+ }
242
+ // Case 2: Property assignment like { className: "..." }
243
+ if (typescript.isPropertyAssignment(parent)) {
244
+ const propName = parent.name.getText();
245
+ return this.isClassNameAttribute(propName);
246
+ }
247
+ // Case 3: Inside a call expression (utility function like clsx, cn, etc.)
248
+ // Check parent chain for call expression
249
+ let current = node;
250
+ while (current.parent) {
251
+ current = current.parent;
252
+ if (typescript.isCallExpression(current)) {
253
+ const callName = this.getCallExpressionName(typescript, current);
254
+ if (callName && this.isUtilityFunction(callName)) {
255
+ return true;
256
+ }
257
+ }
258
+ // Case 4: Inside tv() or cva() variant definitions
259
+ if (typescript.isPropertyAssignment(current)) {
260
+ const parentCall = this.findParentCallExpression(typescript, current);
261
+ if (parentCall) {
262
+ const callName = this.getCallExpressionName(typescript, parentCall);
263
+ if (callName === 'tv' || callName === 'cva') {
264
+ return true;
265
+ }
266
+ }
267
+ }
268
+ // Stop at certain boundaries
269
+ if (typescript.isBlock(current) ||
270
+ typescript.isSourceFile(current) ||
271
+ typescript.isFunctionDeclaration(current) ||
272
+ typescript.isArrowFunction(current)) {
273
+ break;
274
+ }
275
+ }
276
+ return false;
277
+ }
278
+ /**
279
+ * Check if an attribute name is a className-like attribute
280
+ */
281
+ isClassNameAttribute(name) {
282
+ const classNameAttributes = [
283
+ 'className',
284
+ 'class',
285
+ 'classname', // case variations
286
+ 'classList'
287
+ ];
288
+ return classNameAttributes.includes(name) || classNameAttributes.includes(name.toLowerCase());
289
+ }
290
+ /**
291
+ * Check if a function name is a common utility function for class names
292
+ */
293
+ isUtilityFunction(name) {
294
+ const utilityFunctions = [
295
+ 'clsx',
296
+ 'cn',
297
+ 'classnames',
298
+ 'classNames',
299
+ 'cx',
300
+ 'cva',
301
+ 'tv',
302
+ 'twMerge',
303
+ 'twJoin'
304
+ ];
305
+ return utilityFunctions.includes(name);
306
+ }
307
+ /**
308
+ * Get the name of a call expression
309
+ */
310
+ getCallExpressionName(typescript, callExpr) {
311
+ const expr = callExpr.expression;
312
+ if (typescript.isIdentifier(expr)) {
313
+ return expr.text;
314
+ }
315
+ if (typescript.isPropertyAccessExpression(expr)) {
316
+ return expr.name.text;
317
+ }
318
+ return undefined;
319
+ }
320
+ /**
321
+ * Find the parent call expression of a node
322
+ */
323
+ findParentCallExpression(typescript, node) {
324
+ let current = node.parent;
325
+ while (current) {
326
+ if (typescript.isCallExpression(current)) {
327
+ return current;
328
+ }
329
+ if (typescript.isBlock(current) ||
330
+ typescript.isSourceFile(current) ||
331
+ typescript.isFunctionDeclaration(current)) {
332
+ break;
333
+ }
334
+ current = current.parent;
335
+ }
336
+ return undefined;
337
+ }
338
+ /**
339
+ * Generate completion entries for Tailwind classes
340
+ */
341
+ generateCompletions(typescript, context) {
342
+ // Get all classes from the validator
343
+ const allClasses = this.getClassList();
344
+ const prefix = context.currentPrefix.toLowerCase();
345
+ // Filter and create completion entries
346
+ const entries = [];
347
+ for (const className of allClasses) {
348
+ // Skip classes that are already in the attribute
349
+ if (context.existingClasses.has(className)) {
350
+ continue;
351
+ }
352
+ // Filter by prefix if one is being typed
353
+ if (prefix && !className.toLowerCase().startsWith(prefix)) {
354
+ continue;
355
+ }
356
+ // Check if this is a color-related class
357
+ const isColorClass = this.isColorClass(className);
358
+ entries.push({
359
+ name: className,
360
+ kind: typescript.ScriptElementKind.string,
361
+ // VS Code recognizes 'color' kindModifier and shows a color icon
362
+ kindModifiers: isColorClass ? 'color' : '',
363
+ sortText: this.getSortText(className, prefix),
364
+ insertText: className,
365
+ replacementSpan: {
366
+ start: context.prefixStart,
367
+ length: context.currentPrefix.length
368
+ }
369
+ });
370
+ }
371
+ this.logger.log(`[CompletionService] Generated ${entries.length} completions for prefix "${prefix}"`);
372
+ return entries;
373
+ }
374
+ /**
375
+ * Get the cached class list, initializing if necessary
376
+ */
377
+ getClassList() {
378
+ if (this.cachedClassList === null) {
379
+ this.cachedClassList = this.validator.getAllClasses().sort();
380
+ this.logger.log(`[CompletionService] Cached ${this.cachedClassList.length} classes`);
381
+ }
382
+ return this.cachedClassList;
383
+ }
384
+ /**
385
+ * Clear the cached class list (call when design system reloads)
386
+ */
387
+ clearCache() {
388
+ this.cachedClassList = null;
389
+ }
390
+ /**
391
+ * Check if a class name is related to colors
392
+ * Uses a pattern-based approach to detect color classes efficiently
393
+ */
394
+ isColorClass(className) {
395
+ // Color-related prefixes in Tailwind CSS
396
+ // These patterns match classes that typically set colors
397
+ const colorPrefixes = [
398
+ 'bg-', // background-color
399
+ 'text-', // color (text color)
400
+ 'border-', // border-color (but not border-0, border-2, etc.)
401
+ 'ring-', // ring-color (but not ring-0, ring-1, etc.)
402
+ 'outline-', // outline-color (but not outline-0, outline-1, etc.)
403
+ 'shadow-', // box-shadow colors (but not shadow-sm, shadow-lg, etc.)
404
+ 'accent-', // accent-color
405
+ 'caret-', // caret-color
406
+ 'fill-', // SVG fill
407
+ 'stroke-', // SVG stroke
408
+ 'from-', // gradient from color
409
+ 'via-', // gradient via color
410
+ 'to-', // gradient to color
411
+ 'divide-', // divide color (but not divide-x, divide-y)
412
+ 'placeholder-', // placeholder color
413
+ 'decoration-' // text-decoration-color
414
+ ];
415
+ // Check if class starts with any color prefix
416
+ const hasColorPrefix = colorPrefixes.some(prefix => className.startsWith(prefix));
417
+ if (!hasColorPrefix) {
418
+ return false;
419
+ }
420
+ // Filter out non-color variants of these prefixes
421
+ // These are utilities that use the same prefix but aren't colors
422
+ const nonColorPatterns = [
423
+ // Border utilities that aren't colors
424
+ /^border-[0-8]$/,
425
+ /^border-(collapse|separate|spacing|none|hidden|solid|dashed|dotted|double)$/,
426
+ /^border-(x|y|t|r|b|l|s|e)-[0-8]$/,
427
+ // Ring utilities that aren't colors
428
+ /^ring-[0-8]$/,
429
+ /^ring-(inset|offset-[0-8])$/,
430
+ // Outline utilities that aren't colors
431
+ /^outline-[0-8]$/,
432
+ /^outline-(none|dashed|dotted|double|offset-[0-8])$/,
433
+ // Shadow utilities that aren't colors
434
+ /^shadow-(sm|md|lg|xl|2xl|inner|none)$/,
435
+ // Divide utilities that aren't colors
436
+ /^divide-(x|y)(-[0-8]|-reverse)?$/,
437
+ /^divide-(solid|dashed|dotted|double|none)$/,
438
+ // Text utilities that aren't colors (sizes, alignment, etc.)
439
+ /^text-(xs|sm|base|lg|xl|[2-9]xl|left|center|right|justify|start|end|wrap|nowrap|balance|pretty)$/,
440
+ // Stroke width
441
+ /^stroke-[0-2]$/,
442
+ // Decoration utilities that aren't colors
443
+ /^decoration-(slice|clone|solid|double|dotted|dashed|wavy|auto|from-font|[0-8])$/
444
+ ];
445
+ // If it matches any non-color pattern, it's not a color class
446
+ if (nonColorPatterns.some(pattern => pattern.test(className))) {
447
+ return false;
448
+ }
449
+ // Additional check: color classes typically have a color name or number
450
+ // e.g., bg-red-500, text-blue-200, border-gray-300
451
+ // or named colors like bg-white, text-black, bg-transparent
452
+ const afterPrefix = className.replace(/^[a-z]+-/, '');
453
+ // Common color indicators
454
+ const colorIndicators = [
455
+ // Color names
456
+ /^(slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose)-\d+$/,
457
+ // Special colors
458
+ /^(black|white|transparent|current|inherit)$/,
459
+ // Arbitrary colors
460
+ /^\[.*\]$/,
461
+ // Opacity variants on colors
462
+ /^.*\/\d+$/
463
+ ];
464
+ return colorIndicators.some(pattern => pattern.test(afterPrefix));
465
+ }
466
+ /**
467
+ * Generate sort text for completion ordering
468
+ * Classes that start with the prefix get priority
469
+ */
470
+ getSortText(className, prefix) {
471
+ // Exact match gets highest priority
472
+ if (className === prefix) {
473
+ return '0' + className;
474
+ }
475
+ // Prefix match gets high priority
476
+ if (prefix && className.toLowerCase().startsWith(prefix.toLowerCase())) {
477
+ return '1' + className;
478
+ }
479
+ // Everything else sorted alphabetically
480
+ return '2' + className;
481
+ }
482
+ }
483
+ exports.CompletionService = CompletionService;
484
+ //# sourceMappingURL=CompletionService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CompletionService.js","sourceRoot":"","sources":["../../src/services/CompletionService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=CompletionService.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CompletionService.spec.d.ts","sourceRoot":"","sources":["../../src/services/CompletionService.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,334 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const ts = __importStar(require("typescript/lib/tsserverlibrary"));
37
+ const TailwindValidator_1 = require("../infrastructure/TailwindValidator");
38
+ const Logger_1 = require("../utils/Logger");
39
+ const CompletionService_1 = require("./CompletionService");
40
+ describe('CompletionService', () => {
41
+ let validator;
42
+ let completionService;
43
+ beforeEach(() => {
44
+ validator = new TailwindValidator_1.TailwindValidator('/fake/path.css', new Logger_1.NoOpLogger());
45
+ // Mock the validator methods
46
+ jest
47
+ .spyOn(validator, 'getAllClasses')
48
+ .mockReturnValue([
49
+ 'flex',
50
+ 'flex-row',
51
+ 'flex-col',
52
+ 'items-center',
53
+ 'items-start',
54
+ 'items-end',
55
+ 'justify-center',
56
+ 'justify-between',
57
+ 'p-4',
58
+ 'px-4',
59
+ 'py-4',
60
+ 'bg-red-500',
61
+ 'bg-blue-500',
62
+ 'text-white',
63
+ 'text-black'
64
+ ]);
65
+ jest.spyOn(validator, 'isValidClass').mockImplementation((className) => {
66
+ return validator.getAllClasses().includes(className);
67
+ });
68
+ jest.spyOn(validator, 'getCssForClasses').mockImplementation((classNames) => {
69
+ return classNames.map(name => {
70
+ if (name === 'flex')
71
+ return '.flex { display: flex; }';
72
+ if (name === 'p-4')
73
+ return '.p-4 { padding: 1rem; }';
74
+ return null;
75
+ });
76
+ });
77
+ completionService = new CompletionService_1.CompletionService(validator, new Logger_1.NoOpLogger());
78
+ });
79
+ describe('getCompletionsAtPosition', () => {
80
+ it('should return original completions when not in className context', () => {
81
+ const sourceCode = 'const x = 1;';
82
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
83
+ const result = completionService.getCompletionsAtPosition(ts, sourceFile, 5, // Position in "const"
84
+ undefined);
85
+ expect(result).toBeUndefined();
86
+ });
87
+ it('should provide completions inside className attribute', () => {
88
+ const sourceCode = '<div className="">Hello</div>';
89
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
90
+ // Position inside the empty className string (after the opening quote)
91
+ const position = 16;
92
+ const result = completionService.getCompletionsAtPosition(ts, sourceFile, position, undefined);
93
+ expect(result).toBeDefined();
94
+ expect(result.entries.length).toBeGreaterThan(0);
95
+ // Should include flex classes
96
+ const flexEntry = result.entries.find(e => e.name === 'flex');
97
+ expect(flexEntry).toBeDefined();
98
+ });
99
+ it('should filter completions based on prefix', () => {
100
+ const sourceCode = '<div className="fl">Hello</div>';
101
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
102
+ // Position after "fl"
103
+ const position = 18;
104
+ const result = completionService.getCompletionsAtPosition(ts, sourceFile, position, undefined);
105
+ expect(result).toBeDefined();
106
+ // Should only include classes starting with "fl"
107
+ const allStartWithFl = result.entries.every(e => e.name.toLowerCase().startsWith('fl'));
108
+ expect(allStartWithFl).toBe(true);
109
+ // Should include flex, flex-row, flex-col
110
+ const names = result.entries.map(e => e.name);
111
+ expect(names).toContain('flex');
112
+ expect(names).toContain('flex-row');
113
+ expect(names).toContain('flex-col');
114
+ });
115
+ it('should provide completions after space in className', () => {
116
+ const sourceCode = '<div className="flex ">Hello</div>';
117
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
118
+ // Position after "flex " (after the space)
119
+ const position = 21;
120
+ const result = completionService.getCompletionsAtPosition(ts, sourceFile, position, undefined);
121
+ expect(result).toBeDefined();
122
+ // Should provide all classes except "flex" which is already present
123
+ const names = result.entries.map(e => e.name);
124
+ expect(names).not.toContain('flex');
125
+ expect(names).toContain('items-center');
126
+ });
127
+ it('should exclude already existing classes from completions', () => {
128
+ // className="flex items-center p"
129
+ // Position: 16 21 35
130
+ const sourceCode = '<div className="flex items-center p">Hello</div>';
131
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
132
+ // Position after "p" (typing a new class) - position 35 is after the "p"
133
+ const position = 35;
134
+ const result = completionService.getCompletionsAtPosition(ts, sourceFile, position, undefined);
135
+ expect(result).toBeDefined();
136
+ const names = result.entries.map(e => e.name);
137
+ // Should not include already present classes
138
+ expect(names).not.toContain('flex');
139
+ expect(names).not.toContain('items-center');
140
+ // Should include p-4, px-4, py-4 as they match the "p" prefix
141
+ expect(names).toContain('p-4');
142
+ expect(names).toContain('px-4');
143
+ expect(names).toContain('py-4');
144
+ });
145
+ it('should provide completions in utility function arguments', () => {
146
+ const sourceCode = 'const classes = cn("flex ", isActive && "");';
147
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
148
+ // Position inside the second empty string in cn()
149
+ const position = 41;
150
+ const result = completionService.getCompletionsAtPosition(ts, sourceFile, position, undefined);
151
+ expect(result).toBeDefined();
152
+ expect(result.entries.length).toBeGreaterThan(0);
153
+ });
154
+ it('should provide completions in clsx function', () => {
155
+ const sourceCode = 'const classes = clsx("f");';
156
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
157
+ // Position after "f"
158
+ const position = 23;
159
+ const result = completionService.getCompletionsAtPosition(ts, sourceFile, position, undefined);
160
+ expect(result).toBeDefined();
161
+ // Should include classes starting with "f"
162
+ const names = result.entries.map(e => e.name);
163
+ expect(names).toContain('flex');
164
+ });
165
+ it('should provide completions in object property className', () => {
166
+ const sourceCode = 'const obj = { className: "fl" };';
167
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
168
+ // Position after "fl"
169
+ const position = 28;
170
+ const result = completionService.getCompletionsAtPosition(ts, sourceFile, position, undefined);
171
+ expect(result).toBeDefined();
172
+ const names = result.entries.map(e => e.name);
173
+ expect(names).toContain('flex');
174
+ });
175
+ it('should set correct replacement span for partial class names', () => {
176
+ const sourceCode = '<div className="flex ite">Hello</div>';
177
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
178
+ // Position after "ite"
179
+ const position = 24;
180
+ const result = completionService.getCompletionsAtPosition(ts, sourceFile, position, undefined);
181
+ expect(result).toBeDefined();
182
+ // Each entry should have a replacement span
183
+ const itemsCenter = result.entries.find(e => e.name === 'items-center');
184
+ expect(itemsCenter).toBeDefined();
185
+ expect(itemsCenter.replacementSpan).toBeDefined();
186
+ expect(itemsCenter.replacementSpan.length).toBe(3); // "ite" length
187
+ });
188
+ });
189
+ describe('getCompletionEntryDetails', () => {
190
+ it('should return CSS documentation for valid Tailwind class', () => {
191
+ const sourceCode = '<div className="flex">Hello</div>';
192
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
193
+ const result = completionService.getCompletionEntryDetails(ts, sourceFile, 16, 'flex');
194
+ expect(result).toBeDefined();
195
+ expect(result.name).toBe('flex');
196
+ expect(result.documentation).toBeDefined();
197
+ expect(result.documentation.length).toBeGreaterThan(0);
198
+ expect(result.documentation[0].text).toContain('display: flex');
199
+ });
200
+ it('should format documentation with markdown CSS code block', () => {
201
+ const sourceCode = '<div className="flex">Hello</div>';
202
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
203
+ const result = completionService.getCompletionEntryDetails(ts, sourceFile, 16, 'flex');
204
+ expect(result).toBeDefined();
205
+ expect(result.documentation).toBeDefined();
206
+ // Documentation should be wrapped in markdown CSS code block for syntax highlighting
207
+ const docText = result.documentation[0].text;
208
+ expect(docText).toContain('```css');
209
+ expect(docText).toContain('```');
210
+ });
211
+ it('should provide short CSS summary in displayParts', () => {
212
+ const sourceCode = '<div className="flex">Hello</div>';
213
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
214
+ const result = completionService.getCompletionEntryDetails(ts, sourceFile, 16, 'flex');
215
+ expect(result).toBeDefined();
216
+ expect(result.displayParts).toBeDefined();
217
+ expect(result.displayParts.length).toBeGreaterThan(0);
218
+ // displayParts should contain just the declaration (e.g., "display: flex;")
219
+ const displayText = result.displayParts[0].text;
220
+ expect(displayText).toContain('display: flex');
221
+ expect(displayText).not.toContain('.flex');
222
+ expect(displayText).not.toContain('{');
223
+ });
224
+ it('should return undefined for non-Tailwind class', () => {
225
+ const sourceCode = '<div className="my-custom-class">Hello</div>';
226
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
227
+ const result = completionService.getCompletionEntryDetails(ts, sourceFile, 16, 'my-custom-class');
228
+ expect(result).toBeUndefined();
229
+ });
230
+ it('should format CSS with proper indentation', () => {
231
+ // Mock a class with multiple declarations
232
+ jest.spyOn(validator, 'getCssForClasses').mockImplementation((classNames) => {
233
+ return classNames.map(name => {
234
+ if (name === 'p-4')
235
+ return '.p-4 { padding-top: 1rem; padding-right: 1rem; padding-bottom: 1rem; padding-left: 1rem; }';
236
+ return null;
237
+ });
238
+ });
239
+ const sourceCode = '<div className="p-4">Hello</div>';
240
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
241
+ const result = completionService.getCompletionEntryDetails(ts, sourceFile, 16, 'p-4');
242
+ expect(result).toBeDefined();
243
+ const docText = result.documentation[0].text;
244
+ // Should be formatted with newlines for multiple declarations
245
+ expect(docText).toContain('\n');
246
+ expect(docText).toContain('padding-top: 1rem;');
247
+ expect(docText).toContain('padding-right: 1rem;');
248
+ });
249
+ });
250
+ describe('color class detection', () => {
251
+ it('should mark color classes with "color" kindModifier', () => {
252
+ // Add color classes to the mock
253
+ jest.spyOn(validator, 'getAllClasses').mockReturnValue([
254
+ 'flex',
255
+ 'bg-red-500',
256
+ 'bg-blue-200',
257
+ 'text-white',
258
+ 'text-black',
259
+ 'border-gray-300',
260
+ 'ring-indigo-500',
261
+ 'text-sm', // not a color
262
+ 'border-2' // not a color
263
+ ]);
264
+ const sourceCode = '<div className="">Hello</div>';
265
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
266
+ const result = completionService.getCompletionsAtPosition(ts, sourceFile, 16, undefined);
267
+ expect(result).toBeDefined();
268
+ // Color classes should have 'color' kindModifier
269
+ const bgRed = result.entries.find(e => e.name === 'bg-red-500');
270
+ expect(bgRed?.kindModifiers).toBe('color');
271
+ const textWhite = result.entries.find(e => e.name === 'text-white');
272
+ expect(textWhite?.kindModifiers).toBe('color');
273
+ const borderGray = result.entries.find(e => e.name === 'border-gray-300');
274
+ expect(borderGray?.kindModifiers).toBe('color');
275
+ // Non-color classes should have empty kindModifier
276
+ const flexEntry = result.entries.find(e => e.name === 'flex');
277
+ expect(flexEntry?.kindModifiers).toBe('');
278
+ const textSm = result.entries.find(e => e.name === 'text-sm');
279
+ expect(textSm?.kindModifiers).toBe('');
280
+ const border2 = result.entries.find(e => e.name === 'border-2');
281
+ expect(border2?.kindModifiers).toBe('');
282
+ });
283
+ it('should detect various color class patterns', () => {
284
+ jest.spyOn(validator, 'getAllClasses').mockReturnValue([
285
+ 'from-purple-400', // gradient from
286
+ 'via-pink-500', // gradient via
287
+ 'to-red-500', // gradient to
288
+ 'fill-current', // SVG fill
289
+ 'stroke-blue-600', // SVG stroke
290
+ 'accent-violet-500', // accent color
291
+ 'shadow-sm', // not a color (shadow size)
292
+ 'outline-none', // not a color (outline style)
293
+ 'divide-y', // not a color (divide direction)
294
+ 'text-center' // not a color (text alignment)
295
+ ]);
296
+ const sourceCode = '<div className="">Hello</div>';
297
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
298
+ const result = completionService.getCompletionsAtPosition(ts, sourceFile, 16, undefined);
299
+ expect(result).toBeDefined();
300
+ // Color classes
301
+ expect(result.entries.find(e => e.name === 'from-purple-400')?.kindModifiers).toBe('color');
302
+ expect(result.entries.find(e => e.name === 'via-pink-500')?.kindModifiers).toBe('color');
303
+ expect(result.entries.find(e => e.name === 'to-red-500')?.kindModifiers).toBe('color');
304
+ expect(result.entries.find(e => e.name === 'fill-current')?.kindModifiers).toBe('color');
305
+ expect(result.entries.find(e => e.name === 'stroke-blue-600')?.kindModifiers).toBe('color');
306
+ expect(result.entries.find(e => e.name === 'accent-violet-500')?.kindModifiers).toBe('color');
307
+ // Non-color classes
308
+ expect(result.entries.find(e => e.name === 'shadow-sm')?.kindModifiers).toBe('');
309
+ expect(result.entries.find(e => e.name === 'outline-none')?.kindModifiers).toBe('');
310
+ expect(result.entries.find(e => e.name === 'divide-y')?.kindModifiers).toBe('');
311
+ expect(result.entries.find(e => e.name === 'text-center')?.kindModifiers).toBe('');
312
+ });
313
+ });
314
+ describe('clearCache', () => {
315
+ it('should clear the cached class list', () => {
316
+ const sourceCode = '<div className="">Hello</div>';
317
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
318
+ // First call to populate cache
319
+ completionService.getCompletionsAtPosition(ts, sourceFile, 16, undefined);
320
+ // Clear cache
321
+ completionService.clearCache();
322
+ // Mock different classes
323
+ jest.spyOn(validator, 'getAllClasses').mockReturnValue(['new-class', 'another-class']);
324
+ // Get completions again
325
+ const result = completionService.getCompletionsAtPosition(ts, sourceFile, 16, undefined);
326
+ expect(result).toBeDefined();
327
+ const names = result.entries.map(e => e.name);
328
+ expect(names).toContain('new-class');
329
+ expect(names).toContain('another-class');
330
+ expect(names).not.toContain('flex');
331
+ });
332
+ });
333
+ });
334
+ //# sourceMappingURL=CompletionService.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CompletionService.spec.js","sourceRoot":"","sources":["../../src/services/CompletionService.spec.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tailwind-typescript-plugin",
3
- "version": "1.4.0-beta.10",
3
+ "version": "1.4.0-beta.11",
4
4
  "description": "TypeScript Language Service plugin that validates Tailwind CSS class names in JSX/TSX files. Catches typos and invalid classes in real-time with support for tailwind-variants and class-variance-authority.",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",