add quick fixes for invalid screens/variants/helper keys/@tailwind
parent
1de8af5de1
commit
329a50d8f5
|
@ -0,0 +1,45 @@
|
||||||
|
import {
|
||||||
|
CodeAction,
|
||||||
|
CodeActionParams,
|
||||||
|
CodeActionKind,
|
||||||
|
} from 'vscode-languageserver'
|
||||||
|
import { State } from '../util/state'
|
||||||
|
import { findLast } from '../util/find'
|
||||||
|
|
||||||
|
export function provideCodeActions(
|
||||||
|
_state: State,
|
||||||
|
params: CodeActionParams
|
||||||
|
): CodeAction[] {
|
||||||
|
if (params.context.diagnostics.length === 0) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
return params.context.diagnostics
|
||||||
|
.map((diagnostic) => {
|
||||||
|
let match = findLast(
|
||||||
|
/ Did you mean (?:something like )?'(?<replacement>[^']+)'\?$/g,
|
||||||
|
diagnostic.message
|
||||||
|
)
|
||||||
|
|
||||||
|
if (!match) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
title: `Replace with '${match.groups.replacement}'`,
|
||||||
|
kind: CodeActionKind.QuickFix,
|
||||||
|
diagnostics: [diagnostic],
|
||||||
|
edit: {
|
||||||
|
changes: {
|
||||||
|
[params.textDocument.uri]: [
|
||||||
|
{
|
||||||
|
range: diagnostic.range,
|
||||||
|
newText: match.groups.replacement,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.filter(Boolean)
|
||||||
|
}
|
|
@ -16,6 +16,8 @@ import {
|
||||||
Hover,
|
Hover,
|
||||||
TextDocumentPositionParams,
|
TextDocumentPositionParams,
|
||||||
DidChangeConfigurationNotification,
|
DidChangeConfigurationNotification,
|
||||||
|
CodeActionParams,
|
||||||
|
CodeAction,
|
||||||
} from 'vscode-languageserver'
|
} from 'vscode-languageserver'
|
||||||
import getTailwindState from '../class-names/index'
|
import getTailwindState from '../class-names/index'
|
||||||
import { State, Settings, EditorState } from './util/state'
|
import { State, Settings, EditorState } from './util/state'
|
||||||
|
@ -32,6 +34,7 @@ import {
|
||||||
clearAllDiagnostics,
|
clearAllDiagnostics,
|
||||||
} from './providers/diagnosticsProvider'
|
} from './providers/diagnosticsProvider'
|
||||||
import { createEmitter } from '../lib/emitter'
|
import { createEmitter } from '../lib/emitter'
|
||||||
|
import { provideCodeActions } from './providers/codeActionProvider'
|
||||||
|
|
||||||
let connection = createConnection(ProposedFeatures.all)
|
let connection = createConnection(ProposedFeatures.all)
|
||||||
let state: State = { enabled: false, emitter: createEmitter(connection) }
|
let state: State = { enabled: false, emitter: createEmitter(connection) }
|
||||||
|
@ -171,6 +174,7 @@ connection.onInitialize(
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
hoverProvider: true,
|
hoverProvider: true,
|
||||||
|
codeActionProvider: true,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -226,4 +230,9 @@ connection.onHover(
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
connection.onCodeAction((params: CodeActionParams): CodeAction[] => {
|
||||||
|
if (!state.enabled) return null
|
||||||
|
return provideCodeActions(state, params)
|
||||||
|
})
|
||||||
|
|
||||||
connection.listen()
|
connection.listen()
|
||||||
|
|
Loading…
Reference in New Issue