Skip to content

Commit

Permalink
Remove language service dependency on TextDocuments (#742)
Browse files Browse the repository at this point in the history
The code actions API depends on `TextDocuments`. This is specific to the
language server. This makes it hard to use without a language server.

The use of `TextDocuments` has been removed. Instead, the resolved text
document is passed down.
  • Loading branch information
remcohaszing committed Mar 27, 2023
1 parent 33f94ba commit ae18cb2
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 9 deletions.
3 changes: 1 addition & 2 deletions packages/tailwindcss-language-server/src/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -412,7 +412,6 @@ async function createProjectService(
diagnosticRelatedInformation: true,
itemDefaults,
},
documents: documentService.documents,
getConfiguration,
getDocumentSymbols: (uri: string) => {
return connection.sendRequest('@/tailwindCSS/getDocumentSymbols', { uri })
Expand Down Expand Up @@ -1171,7 +1170,7 @@ async function createProjectService(
if (!document) return null
let settings = await state.editor.getConfiguration(document.uri)
if (!settings.tailwindCSS.codeActions) return null
return doCodeActions(state, params)
return doCodeActions(state, params, document)
}, null)
},
onDocumentLinks(params: DocumentLinkParams): DocumentLink[] {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,14 @@ import { flatten, dedupeBy } from '../util/array'
import { provideCssConflictCodeActions } from './provideCssConflictCodeActions'
import { provideInvalidApplyCodeActions } from './provideInvalidApplyCodeActions'
import { provideSuggestionCodeActions } from './provideSuggestionCodeActions'
import { TextDocument } from 'vscode-languageserver-textdocument'

async function getDiagnosticsFromCodeActionParams(
state: State,
params: CodeActionParams,
document: TextDocument,
only?: DiagnosticKind[]
): Promise<AugmentedDiagnostic[]> {
let document = state.editor.documents.get(params.textDocument.uri)
if (!document) return []
let diagnostics = await doValidate(state, document, only)

Expand All @@ -40,14 +41,15 @@ async function getDiagnosticsFromCodeActionParams(
.filter(Boolean)
}

export async function doCodeActions(state: State, params: CodeActionParams): Promise<CodeAction[]> {
export async function doCodeActions(state: State, params: CodeActionParams, document: TextDocument): Promise<CodeAction[]> {
if (!state.enabled) {
return []
}

let diagnostics = await getDiagnosticsFromCodeActionParams(
state,
params,
document,
params.context.diagnostics
.map((diagnostic) => diagnostic.code)
.filter(Boolean) as DiagnosticKind[]
Expand All @@ -56,7 +58,7 @@ export async function doCodeActions(state: State, params: CodeActionParams): Pro
return Promise.all(
diagnostics.map((diagnostic) => {
if (isInvalidApplyDiagnostic(diagnostic)) {
return provideInvalidApplyCodeActions(state, params, diagnostic)
return provideInvalidApplyCodeActions(state, document, diagnostic)
}

if (isCssConflictDiagnostic(diagnostic)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@ import { dset } from 'dset'
import selectorParser from 'postcss-selector-parser'
import { flatten } from '../util/array'
import { getTextWithoutComments } from '../util/doc'
import { TextDocument } from 'vscode-languageserver-textdocument'

export async function provideInvalidApplyCodeActions(
state: State,
params: CodeActionParams,
document: TextDocument,
diagnostic: InvalidApplyDiagnostic
): Promise<CodeAction[]> {
let document = state.editor.documents.get(params.textDocument.uri)
if (!document) return []
let documentText = getTextWithoutComments(document, 'css')
let cssRange: Range
Expand Down Expand Up @@ -144,7 +144,7 @@ export async function provideInvalidApplyCodeActions(
diagnostics: [diagnostic],
edit: {
changes: {
[params.textDocument.uri]: changes,
[document.uri]: changes,
},
},
},
Expand Down
1 change: 0 additions & 1 deletion packages/tailwindcss-language-service/src/util/state.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ export type ClassNames = {
export type EditorState = {
connection: Connection
folder: string
documents: TextDocuments<TextDocument>
userLanguages: Record<string, string>
capabilities: {
configuration: boolean
Expand Down

0 comments on commit ae18cb2

Please sign in to comment.