2020-04-11 21:20:45 +00:00
|
|
|
/* --------------------------------------------------------------------------------------------
|
|
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
|
|
* ------------------------------------------------------------------------------------------ */
|
|
|
|
|
|
|
|
import {
|
|
|
|
createConnection,
|
|
|
|
TextDocuments,
|
|
|
|
ProposedFeatures,
|
|
|
|
TextDocumentSyncKind,
|
|
|
|
CompletionItem,
|
|
|
|
InitializeParams,
|
|
|
|
InitializeResult,
|
|
|
|
CompletionParams,
|
|
|
|
CompletionList,
|
2020-04-12 14:48:38 +00:00
|
|
|
Hover,
|
|
|
|
TextDocumentPositionParams,
|
2020-04-11 21:20:45 +00:00
|
|
|
} from 'vscode-languageserver'
|
|
|
|
import getTailwindState from 'tailwindcss-class-names'
|
|
|
|
import { State } from './util/state'
|
|
|
|
import {
|
|
|
|
provideCompletions,
|
|
|
|
resolveCompletionItem,
|
|
|
|
} from './providers/completionProvider'
|
2020-04-12 14:48:38 +00:00
|
|
|
import { provideHover } from './providers/hoverProvider'
|
2020-04-11 21:20:45 +00:00
|
|
|
import { URI } from 'vscode-uri'
|
|
|
|
|
|
|
|
let state: State = null
|
|
|
|
let connection = createConnection(ProposedFeatures.all)
|
|
|
|
let documents = new TextDocuments()
|
|
|
|
let workspaceFolder: string | null
|
|
|
|
|
|
|
|
documents.onDidOpen((event) => {
|
|
|
|
connection.console.log(
|
|
|
|
`[Server(${process.pid}) ${workspaceFolder}] Document opened: ${event.document.uri}`
|
|
|
|
)
|
|
|
|
})
|
|
|
|
documents.listen(connection)
|
|
|
|
|
|
|
|
connection.onInitialize(
|
|
|
|
async (params: InitializeParams): Promise<InitializeResult> => {
|
|
|
|
state = await getTailwindState(
|
|
|
|
params.rootPath || URI.parse(params.rootUri).path,
|
|
|
|
{
|
|
|
|
onChange: (newState: State): void => {
|
|
|
|
state = { ...newState, editor: state.editor }
|
|
|
|
connection.sendNotification('tailwindcss/configUpdated', [
|
|
|
|
state.dependencies[0],
|
|
|
|
state.config,
|
|
|
|
state.plugins,
|
|
|
|
])
|
|
|
|
},
|
|
|
|
}
|
|
|
|
)
|
|
|
|
state.editor = { connection, documents }
|
|
|
|
|
|
|
|
return {
|
|
|
|
capabilities: {
|
|
|
|
// textDocumentSync: {
|
|
|
|
// openClose: true,
|
|
|
|
// change: TextDocumentSyncKind.None
|
|
|
|
// },
|
|
|
|
textDocumentSync: documents.syncKind,
|
|
|
|
completionProvider: {
|
|
|
|
resolveProvider: true,
|
|
|
|
triggerCharacters: ['"', "'", '`', ' ', '.', '[', state.separator],
|
|
|
|
},
|
2020-04-12 14:48:38 +00:00
|
|
|
hoverProvider: true,
|
2020-04-11 21:20:45 +00:00
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
connection.onInitialized &&
|
|
|
|
connection.onInitialized(async () => {
|
|
|
|
connection.sendNotification('tailwindcss/configUpdated', [
|
|
|
|
state.dependencies[0],
|
|
|
|
state.config,
|
|
|
|
state.plugins,
|
|
|
|
])
|
|
|
|
})
|
|
|
|
|
|
|
|
connection.onCompletion(
|
|
|
|
(params: CompletionParams): CompletionList => {
|
|
|
|
return provideCompletions(state, params)
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
connection.onCompletionResolve(
|
|
|
|
(item: CompletionItem): CompletionItem => {
|
|
|
|
return resolveCompletionItem(state, item)
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
2020-04-12 14:48:38 +00:00
|
|
|
connection.onHover(
|
|
|
|
(params: TextDocumentPositionParams): Hover => {
|
|
|
|
return provideHover(state, params)
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
2020-04-11 21:20:45 +00:00
|
|
|
connection.listen()
|