Add Language Data's Comment Tokens to Support Toggle Comment Shortcuts Co-authored-by: Jess Frazelle <jessfraz@users.noreply.github.com>
56 lines
1.4 KiB
TypeScript
56 lines
1.4 KiB
TypeScript
// Code mirror language implementation for kcl.
|
|
|
|
import {
|
|
Language,
|
|
defineLanguageFacet,
|
|
LanguageSupport,
|
|
} from '@codemirror/language'
|
|
import { LanguageServerClient } from '.'
|
|
import { kclPlugin } from './plugin'
|
|
import type * as LSP from 'vscode-languageserver-protocol'
|
|
import { parser as jsParser } from '@lezer/javascript'
|
|
import { EditorState } from '@uiw/react-codemirror'
|
|
|
|
const data = defineLanguageFacet({})
|
|
|
|
export interface LanguageOptions {
|
|
workspaceFolders: LSP.WorkspaceFolder[] | null
|
|
documentUri: string
|
|
client: LanguageServerClient
|
|
}
|
|
|
|
export default function kclLanguage(options: LanguageOptions): LanguageSupport {
|
|
// For now let's use the javascript parser.
|
|
// It works really well and has good syntax highlighting.
|
|
// We can use our lsp for the rest.
|
|
const lang = new Language(
|
|
data,
|
|
jsParser,
|
|
[
|
|
EditorState.languageData.of(() => [
|
|
{
|
|
// https://codemirror.net/docs/ref/#commands.CommentTokens
|
|
commentTokens: {
|
|
line: '//',
|
|
block: {
|
|
open: '/*',
|
|
close: '*/',
|
|
},
|
|
},
|
|
},
|
|
]),
|
|
],
|
|
'kcl'
|
|
)
|
|
|
|
// Create our supporting extension.
|
|
const kclLsp = kclPlugin({
|
|
documentUri: options.documentUri,
|
|
workspaceFolders: options.workspaceFolders,
|
|
allowHTMLContent: true,
|
|
client: options.client,
|
|
})
|
|
|
|
return new LanguageSupport(lang, [kclLsp])
|
|
}
|