Skip to content

Commit

Permalink
refactor: improve code completion logic in MdSyntaxCompletionProvider
Browse files Browse the repository at this point in the history
  • Loading branch information
purocean committed Jun 11, 2024
1 parent fb93783 commit c1d7667
Showing 1 changed file with 30 additions and 0 deletions.
30 changes: 30 additions & 0 deletions src/renderer/plugins/editor-md-syntax.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,37 @@ class MdSyntaxCompletionProvider implements Monaco.languages.CompletionItemProvi
return 0
}

private async provideSelectionCompletionItems (selection: Monaco.Selection): Promise<Monaco.languages.CompletionList | undefined> {
const items = this.ctx.editor.getSimpleCompletionItems().filter(item => item.insertText.includes('${TM_SELECTED_TEXT}'))

const result: Monaco.languages.CompletionItem[] = items.map((item, i) => {
const range = new this.monaco.Range(
selection.startLineNumber,
selection.startColumn,
selection.endLineNumber,
selection.endColumn,
)

return {
label: { label: item.label },
kind: item.kind || this.monaco.languages.CompletionItemKind.Keyword,
insertText: item.insertText,
insertTextRules: this.monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
range,
sortText: i.toString().padStart(7),
detail: item.detail,
}
})

return { suggestions: result }
}

public async provideCompletionItems (model: Monaco.editor.IModel, position: Monaco.Position): Promise<Monaco.languages.CompletionList | undefined> {
const selection = this.ctx.editor.getEditor().getSelection()!
if (!selection.isEmpty()) {
return this.provideSelectionCompletionItems(selection)
}

const line = model.getLineContent(position.lineNumber)
const cursor = position.column - 1
const linePrefixText = line.slice(0, cursor)
Expand Down

0 comments on commit c1d7667

Please sign in to comment.