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 +6 -0
- package/README.md +1 -1
- package/lib/plugin/TailwindTypescriptPlugin.d.ts +9 -0
- package/lib/plugin/TailwindTypescriptPlugin.d.ts.map +1 -1
- package/lib/plugin/TailwindTypescriptPlugin.js +63 -0
- package/lib/plugin/TailwindTypescriptPlugin.js.map +1 -1
- package/lib/services/CompletionService.d.ts +98 -0
- package/lib/services/CompletionService.d.ts.map +1 -0
- package/lib/services/CompletionService.js +484 -0
- package/lib/services/CompletionService.js.map +1 -0
- package/lib/services/CompletionService.spec.d.ts +2 -0
- package/lib/services/CompletionService.spec.d.ts.map +1 -0
- package/lib/services/CompletionService.spec.js +334 -0
- package/lib/services/CompletionService.spec.js.map +1 -0
- package/package.json +1 -1
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-
|
|
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;
|
|
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 @@
|
|
|
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.
|
|
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",
|