Skip to content

Commit cf48ebc

Browse files
committed
Add stubs for deprecation diagnostics
1 parent 089c727 commit cf48ebc

File tree

9 files changed

+63
-1
lines changed

9 files changed

+63
-1
lines changed

packages/tailwindcss-language-server/src/config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ function getDefaultSettings(): Settings {
2222
rootFontSize: 16,
2323
lint: {
2424
cssConflict: 'warning',
25+
deprecatedClass: 'warning',
2526
invalidApply: 'error',
2627
invalidScreen: 'error',
2728
invalidVariant: 'error',

packages/tailwindcss-language-service/src/codeActions/codeActionProvider.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import {
1313
isInvalidScreenDiagnostic,
1414
isInvalidVariantDiagnostic,
1515
isRecommendedVariantOrderDiagnostic,
16+
isDeprecatedClassDiagnostic,
1617
} from '../diagnostics/types'
1718
import { flatten, dedupeBy } from '../util/array'
1819
import { provideCssConflictCodeActions } from './provideCssConflictCodeActions'
@@ -74,7 +75,8 @@ export async function doCodeActions(
7475
isInvalidTailwindDirectiveDiagnostic(diagnostic) ||
7576
isInvalidScreenDiagnostic(diagnostic) ||
7677
isInvalidVariantDiagnostic(diagnostic) ||
77-
isRecommendedVariantOrderDiagnostic(diagnostic)
78+
isRecommendedVariantOrderDiagnostic(diagnostic) ||
79+
isDeprecatedClassDiagnostic(diagnostic)
7880
) {
7981
return provideSuggestionCodeActions(state, params, diagnostic)
8082
}

packages/tailwindcss-language-service/src/codeActions/provideSuggestionCodeActions.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type { State } from '../util/state'
22
import type { CodeActionParams, CodeAction } from 'vscode-languageserver'
33
import type {
4+
DeprecatedClassDiagnostic,
45
InvalidConfigPathDiagnostic,
56
InvalidTailwindDirectiveDiagnostic,
67
InvalidScreenDiagnostic,
@@ -12,6 +13,7 @@ export function provideSuggestionCodeActions(
1213
_state: State,
1314
params: CodeActionParams,
1415
diagnostic:
16+
| DeprecatedClassDiagnostic
1517
| InvalidConfigPathDiagnostic
1618
| InvalidTailwindDirectiveDiagnostic
1719
| InvalidScreenDiagnostic

packages/tailwindcss-language-service/src/diagnostics/diagnosticsProvider.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,13 @@ import { getInvalidConfigPathDiagnostics } from './getInvalidConfigPathDiagnosti
99
import { getInvalidTailwindDirectiveDiagnostics } from './getInvalidTailwindDirectiveDiagnostics'
1010
import { getRecommendedVariantOrderDiagnostics } from './getRecommendedVariantOrderDiagnostics'
1111
import { getInvalidSourceDiagnostics } from './getInvalidSourceDiagnostics'
12+
import { getDeprecatedClassDiagnostics } from './getDeprecatedClassDiagnostics'
1213

1314
export async function doValidate(
1415
state: State,
1516
document: TextDocument,
1617
only: DiagnosticKind[] = [
18+
DiagnosticKind.Deprecation,
1719
DiagnosticKind.CssConflict,
1820
DiagnosticKind.InvalidApply,
1921
DiagnosticKind.InvalidScreen,
@@ -28,6 +30,9 @@ export async function doValidate(
2830

2931
return settings.tailwindCSS.validate
3032
? [
33+
...(only.includes(DiagnosticKind.Deprecation)
34+
? await getDeprecatedClassDiagnostics(state, document, settings)
35+
: []),
3136
...(only.includes(DiagnosticKind.CssConflict)
3237
? await getCssConflictDiagnostics(state, document, settings)
3338
: []),
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import type { State, Settings } from '../util/state'
2+
import { type DeprecatedClassDiagnostic } from './types'
3+
import type { TextDocument } from 'vscode-languageserver-textdocument'
4+
5+
export async function getDeprecatedClassDiagnostics(
6+
state: State,
7+
document: TextDocument,
8+
settings: Settings,
9+
): Promise<DeprecatedClassDiagnostic[]> {
10+
// Only v4 projects can report deprecations
11+
if (!state.v4) return []
12+
13+
// This is an earlier v4 version that does not support class deprecations
14+
if (!state.designSystem.classMetadata) return []
15+
16+
let severity = settings.tailwindCSS.lint.deprecatedClass
17+
if (severity === 'ignore') return []
18+
19+
let diagnostics: DeprecatedClassDiagnostic[] = []
20+
21+
return diagnostics
22+
}

packages/tailwindcss-language-service/src/diagnostics/types.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,25 @@ export enum DiagnosticKind {
66
InvalidApply = 'invalidApply',
77
InvalidScreen = 'invalidScreen',
88
InvalidVariant = 'invalidVariant',
9+
DeprecatedClass = 'deprecatedClass',
910
InvalidConfigPath = 'invalidConfigPath',
1011
InvalidTailwindDirective = 'invalidTailwindDirective',
1112
InvalidSourceDirective = 'invalidSourceDirective',
1213
RecommendedVariantOrder = 'recommendedVariantOrder',
1314
}
1415

16+
export type DeprecatedClassDiagnostic = Diagnostic & {
17+
code: DiagnosticKind.DeprecatedClass
18+
className: DocumentClassName
19+
suggestions: string[]
20+
}
21+
22+
export function isDeprecatedClassDiagnostic(
23+
diagnostic: AugmentedDiagnostic,
24+
): diagnostic is DeprecatedClassDiagnostic {
25+
return diagnostic.code === DiagnosticKind.DeprecatedClass
26+
}
27+
1528
export type CssConflictDiagnostic = Diagnostic & {
1629
code: DiagnosticKind.CssConflict
1730
className: DocumentClassName
@@ -101,6 +114,7 @@ export function isRecommendedVariantOrderDiagnostic(
101114
}
102115

103116
export type AugmentedDiagnostic =
117+
| DeprecatedClassDiagnostic
104118
| CssConflictDiagnostic
105119
| InvalidApplyDiagnostic
106120
| InvalidScreenDiagnostic

packages/tailwindcss-language-service/src/util/state.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ export type TailwindCssSettings = {
5454
colorDecorators: boolean
5555
lint: {
5656
cssConflict: DiagnosticSeveritySetting
57+
deprecatedClass: DiagnosticSeveritySetting
5758
invalidApply: DiagnosticSeveritySetting
5859
invalidScreen: DiagnosticSeveritySetting
5960
invalidVariant: DiagnosticSeveritySetting

packages/vscode-tailwindcss/README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,10 @@ Unknown or invalid path used with the [`theme` helper](https://tailwindcss.com/d
148148

149149
Class names on the same HTML element which apply the same CSS property or properties. **Default: `warning`**
150150

151+
#### `tailwindCSS.lint.deprecatedClass`
152+
153+
Use of a deprecated class. **Default: `warning`**
154+
151155
#### `tailwindCSS.lint.recommendedVariantOrder`
152156

153157
Class variants not in the recommended order (applies in [JIT mode](https://tailwindcss.com/docs/just-in-time-mode) only). **Default: `warning`**

packages/vscode-tailwindcss/package.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,17 @@
225225
"markdownDescription": "Class names on the same HTML element which apply the same CSS property or properties",
226226
"scope": "language-overridable"
227227
},
228+
"tailwindCSS.lint.deprecatedClass": {
229+
"type": "string",
230+
"enum": [
231+
"ignore",
232+
"warning",
233+
"error"
234+
],
235+
"default": "warning",
236+
"markdownDescription": "Use of a deprecated utility class",
237+
"scope": "language-overridable"
238+
},
228239
"tailwindCSS.lint.invalidApply": {
229240
"type": "string",
230241
"enum": [

0 commit comments

Comments
 (0)