import { CompletionItem, TextDocument, Position } from 'vscode' import { Completion } from './Completion' import * as vscode from 'vscode' import { utils } from '../utils' import { SubviewNameCompletion } from './SubviewNameCompletion' export class SlotCompletion extends Completion { public completionArr: CompletionItem[] = [] private svNameComplet: SubviewNameCompletion private triggerType: 'default' | 'afterColon' | 'outAccept' = 'default' private prevTriggerType: string = '' private prevAccept: { [key: string]: boolean } = {} constructor(svNameComplet: SubviewNameCompletion) { super() this.svNameComplet = svNameComplet } public validateContext(document: TextDocument, position: Position): boolean { const linePrefix = utils.getLinePrefix(document, position) const matchRes = linePrefix.match(/ { const splits = acceptItem.split(':') if (splits[1]) { this.prevAccept[splits[1]] = true } }) if (lastAccept.includes(':')) { this.triggerType = 'afterColon' } else { this.triggerType = 'default' } return true } return false } public getCompletionArr() { if (this.prevTriggerType !== this.triggerType) { this.prevTriggerType = this.triggerType this.completionArr = this.svNameComplet.completionArr.map((el) => this.getCompletionItem(el.label as string)) } return this.completionArr.filter(({ label }) => !this.prevAccept[label as string]) } protected getCompletionItem(label: string): CompletionItem { const compleItem = new vscode.CompletionItem(label) compleItem.kind = vscode.CompletionItemKind.Function compleItem.documentation = `winged子视图${label}` if (this.triggerType === 'afterColon') { compleItem.insertText = new vscode.SnippetString(label) } else if (this.triggerType === 'default') { compleItem.insertText = new vscode.SnippetString(`${utils.pascalToCamel(label)}:${label}`) } return compleItem } }