tailwind-typescript-plugin 1.4.0-beta.1 → 1.4.0-beta.2

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.
@@ -0,0 +1,472 @@
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 Logger_1 = require("../utils/Logger");
38
+ const ClassNameExtractionService_1 = require("./ClassNameExtractionService");
39
+ const DiagnosticService_1 = require("./DiagnosticService");
40
+ const ValidationService_1 = require("./ValidationService");
41
+ // Mock validator that considers all classes valid (for testing conflicts only)
42
+ class MockValidator {
43
+ isInitialized() {
44
+ return true;
45
+ }
46
+ isValidClass() {
47
+ return true;
48
+ }
49
+ getInvalidClasses() {
50
+ return [];
51
+ }
52
+ setAllowedClasses() {
53
+ // No-op for testing
54
+ }
55
+ }
56
+ describe('Conflicting Class Detection', () => {
57
+ let validationService;
58
+ let diagnosticService;
59
+ let extractionService;
60
+ let mockValidator;
61
+ let logger;
62
+ beforeEach(() => {
63
+ diagnosticService = new DiagnosticService_1.DiagnosticService();
64
+ extractionService = new ClassNameExtractionService_1.ClassNameExtractionService();
65
+ mockValidator = new MockValidator();
66
+ logger = new Logger_1.NoOpLogger();
67
+ validationService = new ValidationService_1.ValidationService(extractionService, diagnosticService, mockValidator, logger);
68
+ });
69
+ describe('text-align conflicts', () => {
70
+ it('should detect conflicting text alignment classes on ALL classes', () => {
71
+ const sourceCode = '<div className="text-left text-center">Hello</div>';
72
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
73
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
74
+ const conflicts = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE);
75
+ // Both text-left and text-center should be flagged
76
+ expect(conflicts.length).toBe(2);
77
+ expect(conflicts.every(c => c.category === ts.DiagnosticCategory.Warning)).toBe(true);
78
+ expect(conflicts.some(c => c.messageText.includes('text-left'))).toBe(true);
79
+ expect(conflicts.some(c => c.messageText.includes('text-center'))).toBe(true);
80
+ expect(conflicts.every(c => c.messageText.includes('text-align'))).toBe(true);
81
+ });
82
+ it('should detect multiple text alignment conflicts on ALL classes', () => {
83
+ const sourceCode = '<div className="text-left text-center text-right">Hello</div>';
84
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
85
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
86
+ const conflicts = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE);
87
+ // All three classes should be flagged
88
+ expect(conflicts.length).toBe(3);
89
+ });
90
+ });
91
+ describe('display conflicts', () => {
92
+ it('should detect conflicting display classes on both', () => {
93
+ const sourceCode = '<div className="flex block">Hello</div>';
94
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
95
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
96
+ const conflicts = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE);
97
+ expect(conflicts.length).toBe(2);
98
+ expect(conflicts.some(c => c.messageText.includes('block'))).toBe(true);
99
+ expect(conflicts.some(c => c.messageText.includes('flex'))).toBe(true);
100
+ expect(conflicts.every(c => c.messageText.includes('display'))).toBe(true);
101
+ });
102
+ it('should detect grid vs flex conflict on both', () => {
103
+ const sourceCode = '<div className="grid flex">Hello</div>';
104
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
105
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
106
+ const conflicts = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE);
107
+ expect(conflicts.length).toBe(2);
108
+ });
109
+ it('should detect hidden vs flex display conflict on both', () => {
110
+ const sourceCode = '<div className="flex hidden">Hello</div>';
111
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
112
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
113
+ const conflicts = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE);
114
+ expect(conflicts.length).toBe(2);
115
+ });
116
+ });
117
+ describe('position conflicts', () => {
118
+ it('should detect conflicting position classes on both', () => {
119
+ const sourceCode = '<div className="absolute relative">Hello</div>';
120
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
121
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
122
+ const conflicts = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE);
123
+ expect(conflicts.length).toBe(2);
124
+ expect(conflicts.every(c => c.messageText.includes('position'))).toBe(true);
125
+ });
126
+ it('should detect sticky vs fixed conflict on both', () => {
127
+ const sourceCode = '<div className="sticky fixed">Hello</div>';
128
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
129
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
130
+ const conflicts = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE);
131
+ expect(conflicts.length).toBe(2);
132
+ });
133
+ });
134
+ describe('flex-direction conflicts', () => {
135
+ it('should detect conflicting flex direction classes on both', () => {
136
+ const sourceCode = '<div className="flex-row flex-col">Hello</div>';
137
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
138
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
139
+ const conflicts = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE);
140
+ expect(conflicts.length).toBe(2);
141
+ expect(conflicts.every(c => c.messageText.includes('flex-direction'))).toBe(true);
142
+ });
143
+ });
144
+ describe('justify-content conflicts', () => {
145
+ it('should detect conflicting justify classes on both', () => {
146
+ const sourceCode = '<div className="justify-start justify-center">Hello</div>';
147
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
148
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
149
+ const conflicts = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE);
150
+ expect(conflicts.length).toBe(2);
151
+ expect(conflicts.every(c => c.messageText.includes('justify-content'))).toBe(true);
152
+ });
153
+ });
154
+ describe('align-items conflicts', () => {
155
+ it('should detect conflicting align-items classes on both', () => {
156
+ const sourceCode = '<div className="items-start items-center">Hello</div>';
157
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
158
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
159
+ const conflicts = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE);
160
+ expect(conflicts.length).toBe(2);
161
+ expect(conflicts.every(c => c.messageText.includes('align-items'))).toBe(true);
162
+ });
163
+ });
164
+ describe('no false positives', () => {
165
+ it('should not flag different utility types', () => {
166
+ const sourceCode = '<div className="flex items-center justify-between p-4">Hello</div>';
167
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
168
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
169
+ const conflicts = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE);
170
+ expect(conflicts.length).toBe(0);
171
+ });
172
+ it('should not flag same class in different elements', () => {
173
+ const sourceCode = `
174
+ <div className="text-left">
175
+ <span className="text-center">Hello</span>
176
+ </div>
177
+ `;
178
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
179
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
180
+ const conflicts = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE);
181
+ expect(conflicts.length).toBe(0);
182
+ });
183
+ it('should not flag duplicate classes as conflicts', () => {
184
+ // Same class repeated is a duplicate, not a conflict
185
+ const sourceCode = '<div className="text-left text-left">Hello</div>';
186
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
187
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
188
+ const conflicts = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE);
189
+ expect(conflicts.length).toBe(0); // Should be duplicate, not conflict
190
+ });
191
+ it('should not flag similar but non-conflicting classes', () => {
192
+ // p-4 and pt-4 don't conflict - they're different properties
193
+ const sourceCode = '<div className="p-4 pt-8">Hello</div>';
194
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
195
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
196
+ const conflicts = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE);
197
+ expect(conflicts.length).toBe(0);
198
+ });
199
+ });
200
+ describe('ternary conditional expressions', () => {
201
+ it('should NOT flag conflicts in different ternary branches', () => {
202
+ // text-left in true branch, text-center in false branch = no conflict (mutually exclusive)
203
+ const sourceCode = "<div className={isActive ? 'text-left' : 'text-center'}>Hello</div>";
204
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
205
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
206
+ const conflicts = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE);
207
+ expect(conflicts.length).toBe(0);
208
+ });
209
+ it('should flag conflict when root class conflicts with branch class (both flagged)', () => {
210
+ // Root 'text-left' + branch 'text-center' = conflict on both
211
+ const sourceCode = "<div className={clsx('text-left', isActive && 'text-center')}>Hello</div>";
212
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
213
+ const diagnostics = validationService.validateFile(ts, sourceFile, ['clsx']);
214
+ const conflicts = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE);
215
+ expect(conflicts.length).toBe(2);
216
+ });
217
+ it('should flag conflicts within same branch (both flagged)', () => {
218
+ // Both text-left and text-center in the true branch = conflict
219
+ const sourceCode = "<div className={isActive ? 'text-left text-center' : 'text-right'}>Hello</div>";
220
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
221
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
222
+ const conflicts = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE);
223
+ expect(conflicts.length).toBe(2);
224
+ });
225
+ });
226
+ describe('utility function calls', () => {
227
+ it('should detect conflicts in clsx arguments (both flagged)', () => {
228
+ const sourceCode = "<div className={clsx('flex', 'block', 'items-center')}>Hello</div>";
229
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
230
+ const diagnostics = validationService.validateFile(ts, sourceFile, ['clsx']);
231
+ const conflicts = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE);
232
+ expect(conflicts.length).toBe(2);
233
+ });
234
+ it('should detect conflicts in cn function (both flagged)', () => {
235
+ const sourceCode = "<div className={cn('text-left text-right')}>Hello</div>";
236
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
237
+ const diagnostics = validationService.validateFile(ts, sourceFile, ['cn']);
238
+ const conflicts = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE);
239
+ expect(conflicts.length).toBe(2);
240
+ });
241
+ });
242
+ describe('responsive variants', () => {
243
+ it('should detect conflicts with responsive variants (both flagged)', () => {
244
+ const sourceCode = '<div className="md:text-left md:text-center">Hello</div>';
245
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
246
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
247
+ const conflicts = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE);
248
+ expect(conflicts.length).toBe(2);
249
+ });
250
+ it('should NOT flag same utility with different breakpoints as conflict', () => {
251
+ // sm:text-left and md:text-center apply at different breakpoints
252
+ const sourceCode = '<div className="sm:text-left md:text-center">Hello</div>';
253
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
254
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
255
+ const conflicts = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE);
256
+ // Different prefixes mean different media queries, so no conflict
257
+ expect(conflicts.length).toBe(0);
258
+ });
259
+ });
260
+ describe('overflow conflicts', () => {
261
+ it('should detect conflicting overflow classes on both', () => {
262
+ const sourceCode = '<div className="overflow-hidden overflow-scroll">Hello</div>';
263
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
264
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
265
+ const conflicts = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE);
266
+ expect(conflicts.length).toBe(2);
267
+ expect(conflicts.every(c => c.messageText.includes('overflow'))).toBe(true);
268
+ });
269
+ });
270
+ describe('visibility conflicts', () => {
271
+ it('should detect conflicting visibility classes on both', () => {
272
+ const sourceCode = '<div className="visible invisible">Hello</div>';
273
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
274
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
275
+ const conflicts = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE);
276
+ expect(conflicts.length).toBe(2);
277
+ expect(conflicts.every(c => c.messageText.includes('visibility'))).toBe(true);
278
+ });
279
+ });
280
+ describe('font style conflicts', () => {
281
+ it('should detect conflicting font style classes on both', () => {
282
+ const sourceCode = '<div className="italic not-italic">Hello</div>';
283
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
284
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
285
+ const conflicts = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE);
286
+ expect(conflicts.length).toBe(2);
287
+ expect(conflicts.every(c => c.messageText.includes('font-style'))).toBe(true);
288
+ });
289
+ });
290
+ describe('text transform conflicts', () => {
291
+ it('should detect conflicting text transform classes on both', () => {
292
+ const sourceCode = '<div className="uppercase lowercase">Hello</div>';
293
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
294
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
295
+ const conflicts = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE);
296
+ expect(conflicts.length).toBe(2);
297
+ expect(conflicts.every(c => c.messageText.includes('text-transform'))).toBe(true);
298
+ });
299
+ });
300
+ describe('diagnostic message format', () => {
301
+ it('should have correct warning message format on both classes', () => {
302
+ const sourceCode = '<div className="flex grid">Hello</div>';
303
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
304
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
305
+ const conflicts = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE);
306
+ expect(conflicts.length).toBe(2);
307
+ // One should say flex conflicts with grid, other says grid conflicts with flex
308
+ expect(conflicts.some(c => c.messageText.includes('"flex" conflicts with "grid"'))).toBe(true);
309
+ expect(conflicts.some(c => c.messageText.includes('"grid" conflicts with "flex"'))).toBe(true);
310
+ expect(conflicts.every(c => c.messageText.includes('display property'))).toBe(true);
311
+ });
312
+ it('should have source set to tw-plugin', () => {
313
+ const sourceCode = '<div className="text-left text-right">Hello</div>';
314
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
315
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
316
+ const conflicts = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE);
317
+ expect(conflicts.every(c => c.source === 'tw-plugin')).toBe(true);
318
+ });
319
+ });
320
+ describe('tailwind-variants tv() conflict detection', () => {
321
+ it('should detect conflicts in tv() base property (both flagged)', () => {
322
+ const sourceCode = `
323
+ import { tv } from 'tailwind-variants';
324
+ const button = tv({
325
+ base: 'flex block items-center'
326
+ });
327
+ `;
328
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
329
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
330
+ const conflicts = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE);
331
+ expect(conflicts.length).toBe(2);
332
+ expect(conflicts.every(c => c.messageText.includes('display'))).toBe(true);
333
+ });
334
+ it('should NOT detect conflicts between tv() base and variants (variants are designed to override)', () => {
335
+ const sourceCode = `
336
+ import { tv } from 'tailwind-variants';
337
+ const button = tv({
338
+ base: 'text-left items-center',
339
+ variants: {
340
+ align: {
341
+ center: 'text-center'
342
+ }
343
+ }
344
+ });
345
+ `;
346
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
347
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
348
+ // Base vs variant classes should NOT conflict - variants are designed to override base styles
349
+ const conflicts = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE);
350
+ expect(conflicts.length).toBe(0);
351
+ });
352
+ it('should NOT flag conflicts between different tv() calls', () => {
353
+ const sourceCode = `
354
+ import { tv } from 'tailwind-variants';
355
+ const button = tv({
356
+ base: 'text-left'
357
+ });
358
+ const card = tv({
359
+ base: 'text-center'
360
+ });
361
+ `;
362
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
363
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
364
+ // Each tv() call has its own scope, so no conflicts
365
+ expect(diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE).length).toBe(0);
366
+ });
367
+ });
368
+ describe('class-variance-authority cva() conflict detection', () => {
369
+ it('should detect conflicts in cva() base array (both flagged)', () => {
370
+ const sourceCode = `
371
+ import { cva } from 'class-variance-authority';
372
+ const button = cva(['flex', 'grid', 'items-center']);
373
+ `;
374
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
375
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
376
+ const conflicts = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE);
377
+ expect(conflicts.length).toBe(2);
378
+ expect(conflicts.every(c => c.messageText.includes('display'))).toBe(true);
379
+ });
380
+ it('should NOT detect conflicts between cva() base and variants (variants are designed to override)', () => {
381
+ const sourceCode = `
382
+ import { cva } from 'class-variance-authority';
383
+ const button = cva(['justify-start'], {
384
+ variants: {
385
+ centered: {
386
+ true: ['justify-center']
387
+ }
388
+ }
389
+ });
390
+ `;
391
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
392
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
393
+ // Base vs variant classes should NOT conflict - variants are designed to override base styles
394
+ const conflicts = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE);
395
+ expect(conflicts.length).toBe(0);
396
+ });
397
+ it('should NOT flag conflicts between different cva() calls', () => {
398
+ const sourceCode = `
399
+ import { cva } from 'class-variance-authority';
400
+ const button = cva(['flex']);
401
+ const card = cva(['grid']);
402
+ `;
403
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
404
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
405
+ // Each cva() call has its own scope, so no conflicts
406
+ expect(diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE).length).toBe(0);
407
+ });
408
+ it('should detect conflicts within same variant option in cva()', () => {
409
+ const sourceCode = `
410
+ import { cva } from 'class-variance-authority';
411
+ const button = cva(['items-center'], {
412
+ variants: {
413
+ align: {
414
+ left: ['text-left', 'text-center']
415
+ }
416
+ }
417
+ });
418
+ `;
419
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
420
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
421
+ // Conflicts within the same variant option SHOULD be flagged
422
+ const conflicts = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE);
423
+ expect(conflicts.length).toBe(2);
424
+ expect(conflicts.every(c => c.messageText.includes('text-align'))).toBe(true);
425
+ });
426
+ });
427
+ describe('tv() variant conflict edge cases', () => {
428
+ it('should detect conflicts within same variant option in tv()', () => {
429
+ const sourceCode = `
430
+ import { tv } from 'tailwind-variants';
431
+ const button = tv({
432
+ base: 'items-center',
433
+ variants: {
434
+ align: {
435
+ weird: 'text-left text-center'
436
+ }
437
+ }
438
+ });
439
+ `;
440
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
441
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
442
+ // Conflicts within the same variant option SHOULD be flagged
443
+ const conflicts = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE);
444
+ expect(conflicts.length).toBe(2);
445
+ expect(conflicts.every(c => c.messageText.includes('text-align'))).toBe(true);
446
+ });
447
+ it('should flag conflicts between different variant options in tv() (known limitation)', () => {
448
+ const sourceCode = `
449
+ import { tv } from 'tailwind-variants';
450
+ const button = tv({
451
+ base: 'items-center',
452
+ variants: {
453
+ align: {
454
+ left: 'text-left',
455
+ center: 'text-center',
456
+ right: 'text-right'
457
+ }
458
+ }
459
+ });
460
+ `;
461
+ const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
462
+ const diagnostics = validationService.validateFile(ts, sourceFile, []);
463
+ // Note: Ideally different variant options are mutually exclusive (only one active at runtime),
464
+ // so they shouldn't conflict. However, this would require tracking which variant OPTION
465
+ // each class belongs to, which adds complexity. For now, we flag these as conflicts.
466
+ // This is a known false positive - users can safely ignore these warnings for variant options.
467
+ const conflicts = diagnostics.filter(d => d.code === DiagnosticService_1.TAILWIND_CONFLICT_CODE);
468
+ expect(conflicts.length).toBe(3); // All three options flagged
469
+ });
470
+ });
471
+ });
472
+ //# sourceMappingURL=ConflictClassDetection.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConflictClassDetection.spec.js","sourceRoot":"","sources":["../../src/services/ConflictClassDetection.spec.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import * as ts from 'typescript/lib/tsserverlibrary';
2
2
  import { IDiagnosticService } from '../core/interfaces';
3
3
  import { ClassNameInfo } from '../core/types';
4
+ import { ConflictInfo } from '../infrastructure/TailwindConflictDetector';
4
5
  /**
5
6
  * Diagnostic code for Tailwind plugin errors (invalid class)
6
7
  * Used to identify our diagnostics for code actions
@@ -15,6 +16,11 @@ export declare const TAILWIND_DUPLICATE_CODE = 90002;
15
16
  * Used when a class appears in all branches of a ternary but not at root level
16
17
  */
17
18
  export declare const TAILWIND_EXTRACTABLE_CLASS_CODE = 90003;
19
+ /**
20
+ * Diagnostic code for conflicting class warnings
21
+ * Used when classes that affect the same CSS property are used together
22
+ */
23
+ export declare const TAILWIND_CONFLICT_CODE = 90004;
18
24
  /**
19
25
  * Service responsible for creating TypeScript diagnostics
20
26
  */
@@ -40,5 +46,13 @@ export declare class DiagnosticService implements IDiagnosticService {
40
46
  * Create multiple extractable class hint diagnostics
41
47
  */
42
48
  createExtractableClassDiagnostics(classInfos: ClassNameInfo[], sourceFile: ts.SourceFile): ts.Diagnostic[];
49
+ /**
50
+ * Create a warning diagnostic for conflicting class
51
+ */
52
+ createConflictDiagnostic(conflictInfo: ConflictInfo, sourceFile: ts.SourceFile): ts.Diagnostic;
53
+ /**
54
+ * Create multiple conflict warning diagnostics
55
+ */
56
+ createConflictDiagnostics(conflictInfos: ConflictInfo[], sourceFile: ts.SourceFile): ts.Diagnostic[];
43
57
  }
44
58
  //# sourceMappingURL=DiagnosticService.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DiagnosticService.d.ts","sourceRoot":"","sources":["../../src/services/DiagnosticService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAErD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C;;;GAGG;AACH,eAAO,MAAM,wBAAwB,QAAQ,CAAC;AAE9C;;GAEG;AACH,eAAO,MAAM,uBAAuB,QAAQ,CAAC;AAE7C;;;GAGG;AACH,eAAO,MAAM,+BAA+B,QAAQ,CAAC;AAErD;;GAEG;AACH,qBAAa,iBAAkB,YAAW,kBAAkB;IAC3D,gBAAgB,CAAC,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU;IAmBpF;;OAEG;IACH,yBAAyB,CAAC,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU;IAmB7F;;OAEG;IACH,iBAAiB,CAAC,UAAU,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,EAAE;IAI1F;;OAEG;IACH,0BAA0B,CACzB,UAAU,EAAE,aAAa,EAAE,EAC3B,UAAU,EAAE,EAAE,CAAC,UAAU,GACvB,EAAE,CAAC,UAAU,EAAE;IAIlB;;OAEG;IACH,gCAAgC,CAC/B,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,EAAE,CAAC,UAAU,GACvB,EAAE,CAAC,UAAU;IAchB;;OAEG;IACH,iCAAiC,CAChC,UAAU,EAAE,aAAa,EAAE,EAC3B,UAAU,EAAE,EAAE,CAAC,UAAU,GACvB,EAAE,CAAC,UAAU,EAAE;CAKlB"}
1
+ {"version":3,"file":"DiagnosticService.d.ts","sourceRoot":"","sources":["../../src/services/DiagnosticService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAErD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAE1E;;;GAGG;AACH,eAAO,MAAM,wBAAwB,QAAQ,CAAC;AAE9C;;GAEG;AACH,eAAO,MAAM,uBAAuB,QAAQ,CAAC;AAE7C;;;GAGG;AACH,eAAO,MAAM,+BAA+B,QAAQ,CAAC;AAErD;;;GAGG;AACH,eAAO,MAAM,sBAAsB,QAAQ,CAAC;AAE5C;;GAEG;AACH,qBAAa,iBAAkB,YAAW,kBAAkB;IAC3D,gBAAgB,CAAC,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU;IAmBpF;;OAEG;IACH,yBAAyB,CAAC,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU;IAmB7F;;OAEG;IACH,iBAAiB,CAAC,UAAU,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,EAAE;IAI1F;;OAEG;IACH,0BAA0B,CACzB,UAAU,EAAE,aAAa,EAAE,EAC3B,UAAU,EAAE,EAAE,CAAC,UAAU,GACvB,EAAE,CAAC,UAAU,EAAE;IAIlB;;OAEG;IACH,gCAAgC,CAC/B,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,EAAE,CAAC,UAAU,GACvB,EAAE,CAAC,UAAU;IAchB;;OAEG;IACH,iCAAiC,CAChC,UAAU,EAAE,aAAa,EAAE,EAC3B,UAAU,EAAE,EAAE,CAAC,UAAU,GACvB,EAAE,CAAC,UAAU,EAAE;IAMlB;;OAEG;IACH,wBAAwB,CAAC,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU;IAoB9F;;OAEG;IACH,yBAAyB,CACxB,aAAa,EAAE,YAAY,EAAE,EAC7B,UAAU,EAAE,EAAE,CAAC,UAAU,GACvB,EAAE,CAAC,UAAU,EAAE;CAKlB"}
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.DiagnosticService = exports.TAILWIND_EXTRACTABLE_CLASS_CODE = exports.TAILWIND_DUPLICATE_CODE = exports.TAILWIND_DIAGNOSTIC_CODE = void 0;
36
+ exports.DiagnosticService = exports.TAILWIND_CONFLICT_CODE = exports.TAILWIND_EXTRACTABLE_CLASS_CODE = exports.TAILWIND_DUPLICATE_CODE = exports.TAILWIND_DIAGNOSTIC_CODE = void 0;
37
37
  const ts = __importStar(require("typescript/lib/tsserverlibrary"));
38
38
  /**
39
39
  * Diagnostic code for Tailwind plugin errors (invalid class)
@@ -49,6 +49,11 @@ exports.TAILWIND_DUPLICATE_CODE = 90002;
49
49
  * Used when a class appears in all branches of a ternary but not at root level
50
50
  */
51
51
  exports.TAILWIND_EXTRACTABLE_CLASS_CODE = 90003;
52
+ /**
53
+ * Diagnostic code for conflicting class warnings
54
+ * Used when classes that affect the same CSS property are used together
55
+ */
56
+ exports.TAILWIND_CONFLICT_CODE = 90004;
52
57
  /**
53
58
  * Service responsible for creating TypeScript diagnostics
54
59
  */
@@ -121,6 +126,32 @@ class DiagnosticService {
121
126
  createExtractableClassDiagnostics(classInfos, sourceFile) {
122
127
  return classInfos.map(classInfo => this.createExtractableClassDiagnostic(classInfo, sourceFile));
123
128
  }
129
+ /**
130
+ * Create a warning diagnostic for conflicting class
131
+ */
132
+ createConflictDiagnostic(conflictInfo, sourceFile) {
133
+ const conflictingClassList = conflictInfo.conflictsWith.join(', ');
134
+ let messageText = `Class "${conflictInfo.classInfo.className}" conflicts with "${conflictingClassList}". Both affect the ${conflictInfo.cssProperty} property.`;
135
+ // Add context for variable references
136
+ if (conflictInfo.classInfo.variableUsage) {
137
+ messageText += ` This value comes from variable "${conflictInfo.classInfo.variableUsage.variableName}" used on line ${conflictInfo.classInfo.variableUsage.usageLine}`;
138
+ }
139
+ return {
140
+ file: sourceFile,
141
+ start: conflictInfo.classInfo.absoluteStart,
142
+ length: conflictInfo.classInfo.length,
143
+ messageText,
144
+ category: ts.DiagnosticCategory.Warning,
145
+ code: exports.TAILWIND_CONFLICT_CODE,
146
+ source: 'tw-plugin'
147
+ };
148
+ }
149
+ /**
150
+ * Create multiple conflict warning diagnostics
151
+ */
152
+ createConflictDiagnostics(conflictInfos, sourceFile) {
153
+ return conflictInfos.map(conflictInfo => this.createConflictDiagnostic(conflictInfo, sourceFile));
154
+ }
124
155
  }
125
156
  exports.DiagnosticService = DiagnosticService;
126
157
  //# sourceMappingURL=DiagnosticService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DiagnosticService.js","sourceRoot":"","sources":["../../src/services/DiagnosticService.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mEAAqD;AAKrD;;;GAGG;AACU,QAAA,wBAAwB,GAAG,KAAK,CAAC;AAE9C;;GAEG;AACU,QAAA,uBAAuB,GAAG,KAAK,CAAC;AAE7C;;;GAGG;AACU,QAAA,+BAA+B,GAAG,KAAK,CAAC;AAErD;;GAEG;AACH,MAAa,iBAAiB;IAC7B,gBAAgB,CAAC,SAAwB,EAAE,UAAyB;QACnE,IAAI,WAAW,GAAG,cAAc,SAAS,CAAC,SAAS,iCAAiC,CAAC;QAErF,sCAAsC;QACtC,IAAI,SAAS,CAAC,aAAa,EAAE,CAAC;YAC7B,WAAW,IAAI,mDAAmD,SAAS,CAAC,aAAa,CAAC,YAAY,aAAa,SAAS,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;QACxJ,CAAC;QAED,OAAO;YACN,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,SAAS,CAAC,aAAa;YAC9B,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,WAAW;YACX,QAAQ,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK;YACrC,IAAI,EAAE,gCAAwB;YAC9B,MAAM,EAAE,WAAW;SACnB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,yBAAyB,CAAC,SAAwB,EAAE,UAAyB;QAC5E,IAAI,WAAW,GAAG,oBAAoB,SAAS,CAAC,SAAS,GAAG,CAAC;QAE7D,sCAAsC;QACtC,IAAI,SAAS,CAAC,aAAa,EAAE,CAAC;YAC7B,WAAW,IAAI,qCAAqC,SAAS,CAAC,aAAa,CAAC,YAAY,kBAAkB,SAAS,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;QAC/I,CAAC;QAED,OAAO;YACN,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,SAAS,CAAC,aAAa;YAC9B,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,WAAW;YACX,QAAQ,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO;YACvC,IAAI,EAAE,+BAAuB;YAC7B,MAAM,EAAE,WAAW;SACnB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,UAA2B,EAAE,UAAyB;QACvE,OAAO,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;IAClF,CAAC;IAED;;OAEG;IACH,0BAA0B,CACzB,UAA2B,EAC3B,UAAyB;QAEzB,OAAO,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;IAC3F,CAAC;IAED;;OAEG;IACH,gCAAgC,CAC/B,SAAwB,EACxB,UAAyB;QAEzB,MAAM,WAAW,GAAG,UAAU,SAAS,CAAC,SAAS,6EAA6E,CAAC;QAE/H,OAAO;YACN,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,SAAS,CAAC,aAAa;YAC9B,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,WAAW;YACX,QAAQ,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO;YACvC,IAAI,EAAE,uCAA+B;YACrC,MAAM,EAAE,WAAW;SACnB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,iCAAiC,CAChC,UAA2B,EAC3B,UAAyB;QAEzB,OAAO,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CACjC,IAAI,CAAC,gCAAgC,CAAC,SAAS,EAAE,UAAU,CAAC,CAC5D,CAAC;IACH,CAAC;CACD;AA1FD,8CA0FC"}
1
+ {"version":3,"file":"DiagnosticService.js","sourceRoot":"","sources":["../../src/services/DiagnosticService.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,7 @@ export declare class ValidationService {
12
12
  private readonly diagnosticService;
13
13
  private readonly validator;
14
14
  private readonly logger;
15
+ private readonly conflictDetector;
15
16
  constructor(extractionService: ClassNameExtractionService, diagnosticService: DiagnosticService, validator: IClassNameValidator, logger: Logger);
16
17
  /**
17
18
  * Validate a source file and return diagnostics