fix diagnostic styles

Signed-off-by: Jess Frazelle <github@jessfraz.com>
This commit is contained in:
Jess Frazelle
2024-07-29 20:47:40 -07:00
parent 1c44b01d16
commit 625099d9c8
5 changed files with 33 additions and 4 deletions

View File

@ -10,6 +10,7 @@ import {
workspaceFolders,
LanguageServerOptions,
} from './plugin/lsp'
import lspLintExt from './plugin/lint'
export type { LanguageServerClientOptions } from './client'
export { LanguageServerClient } from './client'
@ -53,5 +54,9 @@ export function lspPlugin(options: LanguageServerOptions): Extension {
}),
]
if (options.diagnosticsFn) {
ext.push(lspLintExt(options.diagnosticsFn))
}
return ext
}

View File

@ -0,0 +1,10 @@
import { Extension } from '@codemirror/state'
import { linter, Diagnostic } from '@codemirror/lint'
export default function lspLintExt(
diagnosticsFn: () => Diagnostic[]
): Extension {
return linter(() => {
return diagnosticsFn()
})
}

View File

@ -17,7 +17,6 @@ import type {
PluginSpec,
ViewPlugin,
} from '@codemirror/view'
import { setDiagnosticsEffect } from '@codemirror/lint'
import { EditorView, Tooltip } from '@codemirror/view'
import type { PublishDiagnosticsParams } from 'vscode-languageserver-protocol'
@ -37,6 +36,7 @@ import lspHoverExt from './hover'
import lspFormatExt from './format'
import lspIndentExt from './indent'
import lspSemanticTokensExt from './semantic-tokens'
import { Diagnostic } from '@codemirror/lint'
const useLast = (values: readonly any[]) => values.reduce((_, v) => v, '')
export const docPathFacet = Facet.define<string, string>({
@ -65,6 +65,9 @@ export interface LanguageServerOptions {
documentUri: string
allowHTMLContent: boolean
client: LanguageServerClient
diagnosticsFn?: () => Diagnostic[]
processLspNotification?: (
plugin: LanguageServerPlugin,
notification: LSP.NotificationMessage

View File

@ -17,6 +17,7 @@ import { kclPlugin } from '.'
import type * as LSP from 'vscode-languageserver-protocol'
// @ts-ignore: No types available
import { parser } from './kcl.grammar'
import { kclManager } from 'lib/singletons'
export interface LanguageOptions {
workspaceFolders: LSP.WorkspaceFolder[]
@ -62,6 +63,9 @@ export function kcl(options: LanguageOptions) {
allowHTMLContent: true,
client: options.client,
processLspNotification: options.processLspNotification,
diagnosticsFn: () => {
return kclManager.getDiagnostics()
},
})
)
}

View File

@ -91,12 +91,19 @@ export class KclManager {
set kclErrors(kclErrors) {
if (kclErrors === this._kclErrors && this.lints.length === 0) return
this._kclErrors = kclErrors
let diagnostics = kclErrorsToDiagnostics(kclErrors)
let diagnostics = this.getDiagnostics()
editorManager.setDiagnostics(diagnostics)
this._kclErrorsCallBack(kclErrors)
}
getDiagnostics(): Diagnostic[] {
if (this.kclErrors.length === 0 && this.lints.length === 0) return []
let diagnostics = kclErrorsToDiagnostics(this.kclErrors)
if (this.lints.length > 0) {
diagnostics = diagnostics.concat(this.lints)
}
editorManager.setDiagnostics(diagnostics)
this._kclErrorsCallBack(kclErrors)
return diagnostics
}
addKclErrors(kclErrors: KCLError[]) {