mirror of
https://github.com/windmill-labs/windmill.git
synced 2026-08-20 16:02:19 +00:00
feat(frontend): preprocessor snippet completion in code editor (#6502)
* feat(frontend): preprocessor snippet completion in code editor * fix: only for main script editor
This commit is contained in:
@@ -155,6 +155,7 @@
|
||||
import { aiChatManager } from './copilot/chat/AIChatManager.svelte'
|
||||
import type { Selection } from 'monaco-editor'
|
||||
import { getDbSchemas } from './apps/components/display/dbtable/utils'
|
||||
import { PYTHON_PREPROCESSOR_MODULE_CODE, TS_PREPROCESSOR_MODULE_CODE } from '$lib/script_helpers'
|
||||
// import EditorTheme from './EditorTheme.svelte'
|
||||
|
||||
let divEl: HTMLDivElement | null = $state(null)
|
||||
@@ -185,6 +186,7 @@
|
||||
key?: string | undefined
|
||||
class?: string | undefined
|
||||
moduleId?: string
|
||||
enablePreprocessorSnippet?: boolean
|
||||
}
|
||||
|
||||
let {
|
||||
@@ -211,7 +213,8 @@
|
||||
loadAsync = false,
|
||||
key = undefined,
|
||||
class: clazz = undefined,
|
||||
moduleId = undefined
|
||||
moduleId = undefined,
|
||||
enablePreprocessorSnippet = false
|
||||
}: Props = $props()
|
||||
|
||||
$effect.pre(() => {
|
||||
@@ -665,6 +668,55 @@
|
||||
}
|
||||
}
|
||||
|
||||
let preprocessorCompletor: IDisposable | undefined = undefined
|
||||
function addPreprocessorCompletions(lang: 'typescript' | 'python') {
|
||||
if (preprocessorCompletor) {
|
||||
preprocessorCompletor.dispose()
|
||||
}
|
||||
const preprocessorCode =
|
||||
lang === 'typescript' ? TS_PREPROCESSOR_MODULE_CODE : PYTHON_PREPROCESSOR_MODULE_CODE
|
||||
preprocessorCompletor = languages.registerCompletionItemProvider(lang, {
|
||||
provideCompletionItems: function (model, position) {
|
||||
const word = model.getWordUntilPosition(position)
|
||||
|
||||
if (word.word.length >= 3 && 'preprocessor'.startsWith(word.word)) {
|
||||
const range = {
|
||||
startLineNumber: position.lineNumber,
|
||||
endLineNumber: position.lineNumber,
|
||||
startColumn: word.startColumn,
|
||||
endColumn: word.endColumn
|
||||
}
|
||||
return {
|
||||
suggestions: [
|
||||
{
|
||||
label: 'preprocessor (windmill)',
|
||||
kind: languages.CompletionItemKind.Function,
|
||||
insertTextRules: languages.CompletionItemInsertTextRule.InsertAsSnippet,
|
||||
insertText: preprocessorCode,
|
||||
range,
|
||||
additionalTextEdits: [
|
||||
{
|
||||
range: {
|
||||
startLineNumber: position.lineNumber,
|
||||
endLineNumber: position.lineNumber,
|
||||
startColumn: 0,
|
||||
endColumn: word.startColumn
|
||||
},
|
||||
text: ''
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
suggestions: []
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
let reviewingChanges = $state(writable(false))
|
||||
let aiChatEditorHandler: AIChatEditorHandler | undefined = $state(undefined)
|
||||
|
||||
@@ -1568,6 +1620,7 @@
|
||||
sqlSchemaCompletor && sqlSchemaCompletor.dispose()
|
||||
autocompletor && autocompletor.dispose()
|
||||
sqlTypeCompletor && sqlTypeCompletor.dispose()
|
||||
preprocessorCompletor && preprocessorCompletor.dispose()
|
||||
timeoutModel && clearTimeout(timeoutModel)
|
||||
loadTimeout && clearTimeout(loadTimeout)
|
||||
aiChatEditorHandler?.clear()
|
||||
@@ -1620,6 +1673,12 @@
|
||||
: sqlTypeCompletor?.dispose()
|
||||
})
|
||||
|
||||
$effect(() => {
|
||||
initialized && (lang === 'typescript' || lang === 'python') && enablePreprocessorSnippet
|
||||
? untrack(() => addPreprocessorCompletions(lang as 'typescript' | 'python'))
|
||||
: preprocessorCompletor?.dispose()
|
||||
})
|
||||
|
||||
let lastArg = undefined
|
||||
$effect(() => {
|
||||
let newArg = lang === 'graphql' ? args?.api : args?.database
|
||||
|
||||
@@ -1791,6 +1791,7 @@
|
||||
bind:hasPreprocessor
|
||||
bind:captureTable
|
||||
bind:assets={script.assets}
|
||||
enablePreprocessorSnippet
|
||||
/>
|
||||
</div>
|
||||
{:else}
|
||||
|
||||
@@ -81,6 +81,7 @@
|
||||
disableAi?: boolean
|
||||
assets?: AssetWithAltAccessType[]
|
||||
editor_bar_right?: import('svelte').Snippet
|
||||
enablePreprocessorSnippet?: boolean
|
||||
}
|
||||
|
||||
let {
|
||||
@@ -111,7 +112,8 @@
|
||||
lastDeployedCode = undefined,
|
||||
disableAi = false,
|
||||
assets = $bindable(),
|
||||
editor_bar_right
|
||||
editor_bar_right,
|
||||
enablePreprocessorSnippet = false
|
||||
}: Props = $props()
|
||||
|
||||
$effect.pre(() => {
|
||||
@@ -625,6 +627,7 @@
|
||||
automaticLayout={true}
|
||||
{fixedOverflowWidgets}
|
||||
{args}
|
||||
{enablePreprocessorSnippet}
|
||||
/>
|
||||
<DiffEditor
|
||||
className="h-full"
|
||||
|
||||
Reference in New Issue
Block a user