tailwind-typescript-plugin 1.4.1-beta.11 → 1.4.1-beta.13
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 +12 -0
- package/README.md +212 -143
- package/lib/core/interfaces.d.ts +17 -12
- package/lib/core/interfaces.d.ts.map +1 -1
- package/lib/core/types.d.ts +75 -0
- package/lib/core/types.d.ts.map +1 -1
- package/lib/infrastructure/TailwindValidator.css-vars.spec.js +1 -11
- package/lib/infrastructure/TailwindValidator.css-vars.spec.js.map +1 -1
- package/lib/infrastructure/TailwindValidator.d.ts +1 -3
- package/lib/infrastructure/TailwindValidator.d.ts.map +1 -1
- package/lib/infrastructure/TailwindValidator.js +6 -26
- package/lib/infrastructure/TailwindValidator.js.map +1 -1
- package/lib/infrastructure/TailwindValidator.spec.js +7 -17
- package/lib/infrastructure/TailwindValidator.spec.js.map +1 -1
- package/lib/plugin/TailwindTypescriptPlugin.d.ts +4 -1
- package/lib/plugin/TailwindTypescriptPlugin.d.ts.map +1 -1
- package/lib/plugin/TailwindTypescriptPlugin.js +49 -56
- package/lib/plugin/TailwindTypescriptPlugin.js.map +1 -1
- package/lib/services/CodeActionService.spec.js +1 -2
- package/lib/services/CodeActionService.spec.js.map +1 -1
- package/lib/services/CompletionService.d.ts +11 -3
- package/lib/services/CompletionService.d.ts.map +1 -1
- package/lib/services/CompletionService.js +97 -12
- package/lib/services/CompletionService.js.map +1 -1
- package/lib/services/CompletionService.spec.js +155 -12
- package/lib/services/CompletionService.spec.js.map +1 -1
- package/lib/services/ConflictClassDetection.spec.js +5 -5
- package/lib/services/ConflictClassDetection.spec.js.map +1 -1
- package/lib/services/DiagnosticService.d.ts +8 -8
- package/lib/services/DiagnosticService.d.ts.map +1 -1
- package/lib/services/DiagnosticService.js +29 -13
- package/lib/services/DiagnosticService.js.map +1 -1
- package/lib/services/DuplicateClassDetection.spec.js +20 -21
- package/lib/services/DuplicateClassDetection.spec.js.map +1 -1
- package/lib/services/PluginConfigService.d.ts +38 -15
- package/lib/services/PluginConfigService.d.ts.map +1 -1
- package/lib/services/PluginConfigService.js +182 -82
- package/lib/services/PluginConfigService.js.map +1 -1
- package/lib/services/ValidationService.d.ts +5 -4
- package/lib/services/ValidationService.d.ts.map +1 -1
- package/lib/services/ValidationService.js +39 -42
- package/lib/services/ValidationService.js.map +1 -1
- package/package.json +1 -1
|
@@ -15,9 +15,8 @@ exports.CompletionService = void 0;
|
|
|
15
15
|
* - Handles space-separated class lists properly
|
|
16
16
|
*/
|
|
17
17
|
class CompletionService {
|
|
18
|
-
constructor(validator,
|
|
18
|
+
constructor(validator, config) {
|
|
19
19
|
this.validator = validator;
|
|
20
|
-
this.logger = logger;
|
|
21
20
|
this.config = config;
|
|
22
21
|
/** Cached sorted class list for faster completion generation */
|
|
23
22
|
this.cachedClassList = null;
|
|
@@ -30,7 +29,6 @@ class CompletionService {
|
|
|
30
29
|
if (config.classVarianceAuthorityEnabled) {
|
|
31
30
|
this.utilityFunctionNames.add('cva');
|
|
32
31
|
}
|
|
33
|
-
this.logger.log(`[CompletionService] Initialized with utility functions: ${Array.from(this.utilityFunctionNames).join(', ')}`);
|
|
34
32
|
}
|
|
35
33
|
/**
|
|
36
34
|
* Get completions at the given position
|
|
@@ -38,10 +36,8 @@ class CompletionService {
|
|
|
38
36
|
getCompletionsAtPosition(typescript, sourceFile, position, existingCompletions) {
|
|
39
37
|
const context = this.getCompletionContext(typescript, sourceFile, position);
|
|
40
38
|
if (!context.isInClassNameContext) {
|
|
41
|
-
this.logger.log('[CompletionService] Not in className context, returning original completions');
|
|
42
39
|
return existingCompletions;
|
|
43
40
|
}
|
|
44
|
-
this.logger.log(`[CompletionService] In className context, prefix="${context.currentPrefix}", existingClasses=${context.existingClasses.size}`);
|
|
45
41
|
const tailwindCompletions = this.generateCompletions(typescript, context);
|
|
46
42
|
if (tailwindCompletions.length === 0) {
|
|
47
43
|
return existingCompletions;
|
|
@@ -55,6 +51,102 @@ class CompletionService {
|
|
|
55
51
|
};
|
|
56
52
|
return completionInfo;
|
|
57
53
|
}
|
|
54
|
+
/**
|
|
55
|
+
* Get quick info (hover) at position for Tailwind class names
|
|
56
|
+
* Shows the CSS generated by the class when hovering over it
|
|
57
|
+
*/
|
|
58
|
+
getQuickInfoAtPosition(typescript, sourceFile, position) {
|
|
59
|
+
// Find the class name at the cursor position
|
|
60
|
+
const classInfo = this.findClassNameAtPosition(typescript, sourceFile, position);
|
|
61
|
+
if (!classInfo) {
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
const { className, start, length } = classInfo;
|
|
65
|
+
// Get the CSS for this class
|
|
66
|
+
const cssResults = this.validator.getCssForClasses([className]);
|
|
67
|
+
const css = cssResults[0];
|
|
68
|
+
if (!css) {
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
// Format the CSS with proper structure
|
|
72
|
+
const formattedCss = this.formatCssForDisplay(css);
|
|
73
|
+
// Extract just the declarations for the display (short summary)
|
|
74
|
+
const declarations = this.extractCssDeclarations(css);
|
|
75
|
+
// Check if this is a color class for the icon
|
|
76
|
+
const isColor = this.isColorClass(className);
|
|
77
|
+
return {
|
|
78
|
+
kind: typescript.ScriptElementKind.string,
|
|
79
|
+
kindModifiers: isColor ? 'color' : '',
|
|
80
|
+
textSpan: {
|
|
81
|
+
start,
|
|
82
|
+
length
|
|
83
|
+
},
|
|
84
|
+
displayParts: [{ kind: 'text', text: declarations }],
|
|
85
|
+
documentation: [
|
|
86
|
+
{
|
|
87
|
+
kind: 'text',
|
|
88
|
+
text: '```css\n' + formattedCss + '\n```'
|
|
89
|
+
}
|
|
90
|
+
]
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Find a Tailwind class name at the given position
|
|
95
|
+
* Returns the class name, its start position, and length if found
|
|
96
|
+
*/
|
|
97
|
+
findClassNameAtPosition(typescript, sourceFile, position) {
|
|
98
|
+
// Find the node at the current position
|
|
99
|
+
let node = this.findNodeAtPosition(typescript, sourceFile, position);
|
|
100
|
+
if (!node) {
|
|
101
|
+
return undefined;
|
|
102
|
+
}
|
|
103
|
+
// If we found a JsxAttribute, look for its string literal initializer
|
|
104
|
+
if (typescript.isJsxAttribute(node)) {
|
|
105
|
+
const initializer = node.initializer;
|
|
106
|
+
if (initializer && typescript.isStringLiteral(initializer)) {
|
|
107
|
+
node = initializer;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Check if we're in a string literal
|
|
111
|
+
if (!typescript.isStringLiteral(node) && !typescript.isNoSubstitutionTemplateLiteral(node)) {
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
// Check if this string is in a className context
|
|
115
|
+
if (!this.isClassNameContext(typescript, node)) {
|
|
116
|
+
return undefined;
|
|
117
|
+
}
|
|
118
|
+
// Get the string content and position info
|
|
119
|
+
const stringContent = node.text;
|
|
120
|
+
const stringStart = node.getStart(sourceFile) + 1; // +1 to skip the opening quote
|
|
121
|
+
const positionInString = position - stringStart;
|
|
122
|
+
// Handle cursor at or before string start
|
|
123
|
+
if (positionInString < 0 || positionInString > stringContent.length) {
|
|
124
|
+
return undefined;
|
|
125
|
+
}
|
|
126
|
+
// Find word boundaries around the cursor position
|
|
127
|
+
// Classes are separated by whitespace
|
|
128
|
+
let wordStart = positionInString;
|
|
129
|
+
let wordEnd = positionInString;
|
|
130
|
+
// Find the start of the word
|
|
131
|
+
while (wordStart > 0 && stringContent[wordStart - 1] !== ' ') {
|
|
132
|
+
wordStart--;
|
|
133
|
+
}
|
|
134
|
+
// Find the end of the word
|
|
135
|
+
while (wordEnd < stringContent.length && stringContent[wordEnd] !== ' ') {
|
|
136
|
+
wordEnd++;
|
|
137
|
+
}
|
|
138
|
+
// Extract the class name
|
|
139
|
+
const className = stringContent.substring(wordStart, wordEnd);
|
|
140
|
+
// Validate it's a Tailwind class
|
|
141
|
+
if (!className || !this.isTailwindClass(className)) {
|
|
142
|
+
return undefined;
|
|
143
|
+
}
|
|
144
|
+
return {
|
|
145
|
+
className,
|
|
146
|
+
start: stringStart + wordStart,
|
|
147
|
+
length: className.length
|
|
148
|
+
};
|
|
149
|
+
}
|
|
58
150
|
/**
|
|
59
151
|
* Get completion entry details for a specific completion item
|
|
60
152
|
* Formats the documentation with markdown CSS code blocks for syntax highlighting
|
|
@@ -165,26 +257,21 @@ class CompletionService {
|
|
|
165
257
|
// Find the node at the current position
|
|
166
258
|
let node = this.findNodeAtPosition(typescript, sourceFile, position);
|
|
167
259
|
if (!node) {
|
|
168
|
-
this.logger.log(`[CompletionService] No node found at position ${position}`);
|
|
169
260
|
return defaultContext;
|
|
170
261
|
}
|
|
171
|
-
this.logger.log(`[CompletionService] Found node kind: ${typescript.SyntaxKind[node.kind]} at position ${position}`);
|
|
172
262
|
// If we found a JsxAttribute, look for its string literal initializer
|
|
173
263
|
if (typescript.isJsxAttribute(node)) {
|
|
174
264
|
const initializer = node.initializer;
|
|
175
265
|
if (initializer && typescript.isStringLiteral(initializer)) {
|
|
176
266
|
node = initializer;
|
|
177
|
-
this.logger.log(`[CompletionService] Found string literal in JsxAttribute initializer`);
|
|
178
267
|
}
|
|
179
268
|
}
|
|
180
269
|
// Check if we're in a string literal
|
|
181
270
|
if (!typescript.isStringLiteral(node) && !typescript.isNoSubstitutionTemplateLiteral(node)) {
|
|
182
|
-
this.logger.log(`[CompletionService] Node is not a string literal: ${typescript.SyntaxKind[node.kind]}`);
|
|
183
271
|
return defaultContext;
|
|
184
272
|
}
|
|
185
273
|
// Check if this string is in a className context
|
|
186
274
|
if (!this.isClassNameContext(typescript, node)) {
|
|
187
|
-
this.logger.log(`[CompletionService] Node is not in className context`);
|
|
188
275
|
return defaultContext;
|
|
189
276
|
}
|
|
190
277
|
// We're in a className context! Now extract the completion details
|
|
@@ -372,7 +459,6 @@ class CompletionService {
|
|
|
372
459
|
}
|
|
373
460
|
});
|
|
374
461
|
}
|
|
375
|
-
this.logger.log(`[CompletionService] Generated ${entries.length} completions for prefix "${prefix}"`);
|
|
376
462
|
return entries;
|
|
377
463
|
}
|
|
378
464
|
/**
|
|
@@ -381,7 +467,6 @@ class CompletionService {
|
|
|
381
467
|
getClassList() {
|
|
382
468
|
if (this.cachedClassList === null) {
|
|
383
469
|
this.cachedClassList = this.validator.getAllClasses().sort();
|
|
384
|
-
this.logger.log(`[CompletionService] Cached ${this.cachedClassList.length} classes`);
|
|
385
470
|
}
|
|
386
471
|
return this.cachedClassList;
|
|
387
472
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompletionService.js","sourceRoot":"","sources":["../../src/services/CompletionService.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CompletionService.js","sourceRoot":"","sources":["../../src/services/CompletionService.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,7 +35,6 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
const ts = __importStar(require("typescript/lib/tsserverlibrary"));
|
|
37
37
|
const TailwindValidator_1 = require("../infrastructure/TailwindValidator");
|
|
38
|
-
const Logger_1 = require("../utils/Logger");
|
|
39
38
|
const CompletionService_1 = require("./CompletionService");
|
|
40
39
|
const defaultConfig = {
|
|
41
40
|
utilityFunctions: ['clsx', 'cn', 'classnames', 'classNames', 'cx', 'twMerge'],
|
|
@@ -46,7 +45,7 @@ describe('CompletionService', () => {
|
|
|
46
45
|
let validator;
|
|
47
46
|
let completionService;
|
|
48
47
|
beforeEach(() => {
|
|
49
|
-
validator = new TailwindValidator_1.TailwindValidator('/fake/path.css'
|
|
48
|
+
validator = new TailwindValidator_1.TailwindValidator('/fake/path.css');
|
|
50
49
|
// Mock the validator methods
|
|
51
50
|
jest
|
|
52
51
|
.spyOn(validator, 'getAllClasses')
|
|
@@ -79,7 +78,7 @@ describe('CompletionService', () => {
|
|
|
79
78
|
return null;
|
|
80
79
|
});
|
|
81
80
|
});
|
|
82
|
-
completionService = new CompletionService_1.CompletionService(validator,
|
|
81
|
+
completionService = new CompletionService_1.CompletionService(validator, defaultConfig);
|
|
83
82
|
});
|
|
84
83
|
describe('getCompletionsAtPosition', () => {
|
|
85
84
|
it('should return original completions when not in className context', () => {
|
|
@@ -342,7 +341,7 @@ describe('CompletionService', () => {
|
|
|
342
341
|
tailwindVariantsEnabled: false,
|
|
343
342
|
classVarianceAuthorityEnabled: false
|
|
344
343
|
};
|
|
345
|
-
const customService = new CompletionService_1.CompletionService(validator,
|
|
344
|
+
const customService = new CompletionService_1.CompletionService(validator, customConfig);
|
|
346
345
|
const sourceCode = 'const x = myCustomClass("fl");';
|
|
347
346
|
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
348
347
|
// Position after "fl"
|
|
@@ -370,7 +369,7 @@ describe('CompletionService', () => {
|
|
|
370
369
|
tailwindVariantsEnabled: false,
|
|
371
370
|
classVarianceAuthorityEnabled: false
|
|
372
371
|
};
|
|
373
|
-
const customService = new CompletionService_1.CompletionService(validator,
|
|
372
|
+
const customService = new CompletionService_1.CompletionService(validator, customConfig);
|
|
374
373
|
const sourceCode = 'const button = tv({ base: "fl" });';
|
|
375
374
|
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
376
375
|
// Position after "fl" inside the string
|
|
@@ -395,7 +394,7 @@ describe('CompletionService', () => {
|
|
|
395
394
|
tailwindVariantsEnabled: false,
|
|
396
395
|
classVarianceAuthorityEnabled: false
|
|
397
396
|
};
|
|
398
|
-
const customService = new CompletionService_1.CompletionService(validator,
|
|
397
|
+
const customService = new CompletionService_1.CompletionService(validator, customConfig);
|
|
399
398
|
const sourceCode = 'const button = cva("fl");';
|
|
400
399
|
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
401
400
|
// Position after "fl"
|
|
@@ -410,7 +409,7 @@ describe('CompletionService', () => {
|
|
|
410
409
|
tailwindVariantsEnabled: false,
|
|
411
410
|
classVarianceAuthorityEnabled: false
|
|
412
411
|
};
|
|
413
|
-
const customService = new CompletionService_1.CompletionService(validator,
|
|
412
|
+
const customService = new CompletionService_1.CompletionService(validator, customConfig);
|
|
414
413
|
const sourceCode = 'const x = customStyles("fl");';
|
|
415
414
|
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
416
415
|
const position = 26;
|
|
@@ -425,7 +424,7 @@ describe('CompletionService', () => {
|
|
|
425
424
|
tailwindVariantsEnabled: false,
|
|
426
425
|
classVarianceAuthorityEnabled: false
|
|
427
426
|
};
|
|
428
|
-
const customService = new CompletionService_1.CompletionService(validator,
|
|
427
|
+
const customService = new CompletionService_1.CompletionService(validator, customConfig);
|
|
429
428
|
// Test simple string utility
|
|
430
429
|
const sourceCode1 = 'const x = simpleUtil("fl");';
|
|
431
430
|
const sourceFile1 = ts.createSourceFile('test.tsx', sourceCode1, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
@@ -500,7 +499,7 @@ describe('CompletionService', () => {
|
|
|
500
499
|
tailwindVariantsEnabled: true,
|
|
501
500
|
classVarianceAuthorityEnabled: true
|
|
502
501
|
};
|
|
503
|
-
const customService = new CompletionService_1.CompletionService(validator,
|
|
502
|
+
const customService = new CompletionService_1.CompletionService(validator, customConfig);
|
|
504
503
|
// Test tv()
|
|
505
504
|
const tvSource = 'const x = tv({ base: "fl" });';
|
|
506
505
|
const tvFile = ts.createSourceFile('test.tsx', tvSource, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
@@ -655,7 +654,7 @@ describe('CompletionService', () => {
|
|
|
655
654
|
tailwindVariantsEnabled: false,
|
|
656
655
|
classVarianceAuthorityEnabled: false
|
|
657
656
|
};
|
|
658
|
-
const customService = new CompletionService_1.CompletionService(validator,
|
|
657
|
+
const customService = new CompletionService_1.CompletionService(validator, customConfig);
|
|
659
658
|
const sourceCode = 'const x = utils.cn("fl");';
|
|
660
659
|
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
661
660
|
const position = 22;
|
|
@@ -950,7 +949,7 @@ describe('CompletionService', () => {
|
|
|
950
949
|
tailwindVariantsEnabled: false,
|
|
951
950
|
classVarianceAuthorityEnabled: false
|
|
952
951
|
};
|
|
953
|
-
const customService = new CompletionService_1.CompletionService(validator,
|
|
952
|
+
const customService = new CompletionService_1.CompletionService(validator, customConfig);
|
|
954
953
|
const sourceCode = 'const fn = () => { const x = "fl"; };';
|
|
955
954
|
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
956
955
|
// Position inside string in arrow function (not a utility function context)
|
|
@@ -964,7 +963,7 @@ describe('CompletionService', () => {
|
|
|
964
963
|
tailwindVariantsEnabled: false,
|
|
965
964
|
classVarianceAuthorityEnabled: false
|
|
966
965
|
};
|
|
967
|
-
const customService = new CompletionService_1.CompletionService(validator,
|
|
966
|
+
const customService = new CompletionService_1.CompletionService(validator, customConfig);
|
|
968
967
|
const sourceCode = 'function fn() { const x = "fl"; }';
|
|
969
968
|
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
970
969
|
// Position inside string in function (not a utility function context)
|
|
@@ -1035,5 +1034,149 @@ describe('CompletionService', () => {
|
|
|
1035
1034
|
});
|
|
1036
1035
|
});
|
|
1037
1036
|
});
|
|
1037
|
+
describe('getQuickInfoAtPosition (hover)', () => {
|
|
1038
|
+
it('should return hover info for valid Tailwind class', () => {
|
|
1039
|
+
const sourceCode = '<div className="flex">Hello</div>';
|
|
1040
|
+
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
1041
|
+
// Position on "flex"
|
|
1042
|
+
const position = 18;
|
|
1043
|
+
const result = completionService.getQuickInfoAtPosition(ts, sourceFile, position);
|
|
1044
|
+
expect(result).toBeDefined();
|
|
1045
|
+
expect(result.displayParts).toBeDefined();
|
|
1046
|
+
expect(result.displayParts.length).toBeGreaterThan(0);
|
|
1047
|
+
expect(result.displayParts[0].text).toContain('display: flex');
|
|
1048
|
+
});
|
|
1049
|
+
it('should return correct textSpan for hovered class', () => {
|
|
1050
|
+
const sourceCode = '<div className="flex">Hello</div>';
|
|
1051
|
+
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
1052
|
+
const position = 18;
|
|
1053
|
+
const result = completionService.getQuickInfoAtPosition(ts, sourceFile, position);
|
|
1054
|
+
expect(result).toBeDefined();
|
|
1055
|
+
expect(result.textSpan).toEqual({
|
|
1056
|
+
start: 16, // Start of "flex"
|
|
1057
|
+
length: 4 // Length of "flex"
|
|
1058
|
+
});
|
|
1059
|
+
});
|
|
1060
|
+
it('should return documentation with CSS code block', () => {
|
|
1061
|
+
const sourceCode = '<div className="flex">Hello</div>';
|
|
1062
|
+
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
1063
|
+
const position = 18;
|
|
1064
|
+
const result = completionService.getQuickInfoAtPosition(ts, sourceFile, position);
|
|
1065
|
+
expect(result).toBeDefined();
|
|
1066
|
+
expect(result.documentation).toBeDefined();
|
|
1067
|
+
expect(result.documentation.length).toBeGreaterThan(0);
|
|
1068
|
+
const docText = result.documentation[0].text;
|
|
1069
|
+
expect(docText).toContain('```css');
|
|
1070
|
+
expect(docText).toContain('.flex');
|
|
1071
|
+
expect(docText).toContain('display: flex');
|
|
1072
|
+
});
|
|
1073
|
+
it('should return undefined for non-Tailwind class', () => {
|
|
1074
|
+
const sourceCode = '<div className="my-custom-class">Hello</div>';
|
|
1075
|
+
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
1076
|
+
const position = 20;
|
|
1077
|
+
const result = completionService.getQuickInfoAtPosition(ts, sourceFile, position);
|
|
1078
|
+
expect(result).toBeUndefined();
|
|
1079
|
+
});
|
|
1080
|
+
it('should return undefined when not in className context', () => {
|
|
1081
|
+
const sourceCode = 'const x = "flex";';
|
|
1082
|
+
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
1083
|
+
const position = 13;
|
|
1084
|
+
const result = completionService.getQuickInfoAtPosition(ts, sourceFile, position);
|
|
1085
|
+
expect(result).toBeUndefined();
|
|
1086
|
+
});
|
|
1087
|
+
it('should set color kindModifier for color classes', () => {
|
|
1088
|
+
jest
|
|
1089
|
+
.spyOn(validator, 'getCssForClasses')
|
|
1090
|
+
.mockReturnValue(['.bg-red-500 { background-color: rgb(239 68 68); }']);
|
|
1091
|
+
const sourceCode = '<div className="bg-red-500">Hello</div>';
|
|
1092
|
+
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
1093
|
+
const position = 20;
|
|
1094
|
+
const result = completionService.getQuickInfoAtPosition(ts, sourceFile, position);
|
|
1095
|
+
expect(result).toBeDefined();
|
|
1096
|
+
expect(result.kindModifiers).toBe('color');
|
|
1097
|
+
});
|
|
1098
|
+
it('should return hover info for class in utility function', () => {
|
|
1099
|
+
const sourceCode = 'const x = cn("flex items-center");';
|
|
1100
|
+
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
1101
|
+
// Position on "flex"
|
|
1102
|
+
const position = 16;
|
|
1103
|
+
const result = completionService.getQuickInfoAtPosition(ts, sourceFile, position);
|
|
1104
|
+
expect(result).toBeDefined();
|
|
1105
|
+
expect(result.displayParts[0].text).toContain('display: flex');
|
|
1106
|
+
});
|
|
1107
|
+
it('should return hover info for second class in list', () => {
|
|
1108
|
+
jest.spyOn(validator, 'getCssForClasses').mockImplementation((classNames) => {
|
|
1109
|
+
return classNames.map(name => {
|
|
1110
|
+
if (name === 'flex')
|
|
1111
|
+
return '.flex { display: flex; }';
|
|
1112
|
+
if (name === 'items-center')
|
|
1113
|
+
return '.items-center { align-items: center; }';
|
|
1114
|
+
return null;
|
|
1115
|
+
});
|
|
1116
|
+
});
|
|
1117
|
+
const sourceCode = '<div className="flex items-center">Hello</div>';
|
|
1118
|
+
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
1119
|
+
// Position on "items-center"
|
|
1120
|
+
const position = 25;
|
|
1121
|
+
const result = completionService.getQuickInfoAtPosition(ts, sourceFile, position);
|
|
1122
|
+
expect(result).toBeDefined();
|
|
1123
|
+
expect(result.displayParts[0].text).toContain('align-items: center');
|
|
1124
|
+
expect(result.textSpan).toEqual({
|
|
1125
|
+
start: 21, // Start of "items-center"
|
|
1126
|
+
length: 12 // Length of "items-center"
|
|
1127
|
+
});
|
|
1128
|
+
});
|
|
1129
|
+
it('should return undefined for position on whitespace', () => {
|
|
1130
|
+
const sourceCode = '<div className="flex items-center">Hello</div>';
|
|
1131
|
+
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
1132
|
+
// Position on the space between classes
|
|
1133
|
+
const position = 21;
|
|
1134
|
+
const result = completionService.getQuickInfoAtPosition(ts, sourceFile, position);
|
|
1135
|
+
// Should return undefined because we're on whitespace, not a class
|
|
1136
|
+
expect(result).toBeUndefined();
|
|
1137
|
+
});
|
|
1138
|
+
it('should return hover info for class at start of string', () => {
|
|
1139
|
+
const sourceCode = '<div className="flex">Hello</div>';
|
|
1140
|
+
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
1141
|
+
// Position at the very start of "flex"
|
|
1142
|
+
const position = 16;
|
|
1143
|
+
const result = completionService.getQuickInfoAtPosition(ts, sourceFile, position);
|
|
1144
|
+
expect(result).toBeDefined();
|
|
1145
|
+
expect(result.displayParts[0].text).toContain('display: flex');
|
|
1146
|
+
});
|
|
1147
|
+
it('should return hover info for class at end of word', () => {
|
|
1148
|
+
const sourceCode = '<div className="flex">Hello</div>';
|
|
1149
|
+
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
1150
|
+
// Position at the end of "flex" (just before closing quote)
|
|
1151
|
+
const position = 20;
|
|
1152
|
+
const result = completionService.getQuickInfoAtPosition(ts, sourceFile, position);
|
|
1153
|
+
expect(result).toBeDefined();
|
|
1154
|
+
expect(result.displayParts[0].text).toContain('display: flex');
|
|
1155
|
+
});
|
|
1156
|
+
it('should return undefined when position is outside string', () => {
|
|
1157
|
+
const sourceCode = '<div className="flex">Hello</div>';
|
|
1158
|
+
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
1159
|
+
// Position on "className" attribute name
|
|
1160
|
+
const position = 10;
|
|
1161
|
+
const result = completionService.getQuickInfoAtPosition(ts, sourceFile, position);
|
|
1162
|
+
expect(result).toBeUndefined();
|
|
1163
|
+
});
|
|
1164
|
+
it('should return hover info in tv() variants', () => {
|
|
1165
|
+
const sourceCode = `const button = tv({
|
|
1166
|
+
base: "flex",
|
|
1167
|
+
variants: {
|
|
1168
|
+
color: {
|
|
1169
|
+
primary: "bg-blue-500"
|
|
1170
|
+
}
|
|
1171
|
+
}
|
|
1172
|
+
});`;
|
|
1173
|
+
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
1174
|
+
// Position on "flex" in base
|
|
1175
|
+
const position = sourceCode.indexOf('"flex"') + 2;
|
|
1176
|
+
const result = completionService.getQuickInfoAtPosition(ts, sourceFile, position);
|
|
1177
|
+
expect(result).toBeDefined();
|
|
1178
|
+
expect(result.displayParts[0].text).toContain('display: flex');
|
|
1179
|
+
});
|
|
1180
|
+
});
|
|
1038
1181
|
});
|
|
1039
1182
|
//# sourceMappingURL=CompletionService.spec.js.map
|