Skip to content

Commit

Permalink
keywords completion optimize, #335
Browse files Browse the repository at this point in the history
  • Loading branch information
qjebbs committed Oct 10, 2020
1 parent 5e302c9 commit cb4b53f
Show file tree
Hide file tree
Showing 5 changed files with 133 additions and 64 deletions.
64 changes: 0 additions & 64 deletions src/plantuml/intellisense/languageCompletion.ts

This file was deleted.

60 changes: 60 additions & 0 deletions src/plantuml/intellisense/languageCompletion/generating.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import { config, RenderType } from "../../config";
import * as child_process from 'child_process';
import * as vscode from 'vscode';
import { processWrapper } from "../../renders/processWrapper";
import { LanguageWord, REG_CLEAN_LABEL } from "./shared";

export function getLanguageWords(): Promise<LanguageWord[]> {
let java = config.java;
if (config.render !== RenderType.Local || !java) {
return Promise.resolve([]);
}
let params = [
'-Djava.awt.headless=true',
'-jar',
config.jar(null),
"-language",
];
let ps = child_process.spawn(config.java, params);
return processWrapper(ps).then(
buf => processWords(buf.toString()),
() => []
)
}

function processWords(value: string): LanguageWord[] {
let results: LanguageWord[] = [];
let words = value.split('\n').map(w => w.trim());
let curKind: vscode.CompletionItemKind = undefined;
words.forEach(
word => {
if (!word) return;
let label = word.replace(REG_CLEAN_LABEL, "");
if (!label) return;
if (word.substr(0, 1) == ';') {
switch (word) {
case ";type":
curKind = vscode.CompletionItemKind.Struct
return;
case ";keyword":
curKind = vscode.CompletionItemKind.Keyword
return;
case ";preprocessor":
curKind = vscode.CompletionItemKind.Function
return;
case ";skinparameter":
curKind = vscode.CompletionItemKind.Field
return;
case ";color":
curKind = vscode.CompletionItemKind.Color
return;
default:
return;
}
}
if (!curKind) return;
results.push(<LanguageWord>{ label: label, name: word, kind: curKind });
}
)
return results;
}
31 changes: 31 additions & 0 deletions src/plantuml/intellisense/languageCompletion/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import * as vscode from 'vscode';
import { getLanguageWords } from './generating';
import { getPredefinedLanguageWords } from './predefined';

export var dicLanguageWords = new Set<string>([]);
let cachedItems: vscode.CompletionItem[] = undefined;

// pre-cache before user needs
LanguageCompletionItems();

export async function LanguageCompletionItems(): Promise<vscode.CompletionItem[]> {
if (cachedItems !== undefined) {
return Promise.resolve(cachedItems);
}
// clear dicLanguageWords
dicLanguageWords = new Set<string>([]);
let words = await getLanguageWords();
for (let word of getPredefinedLanguageWords()) {
let dup = words.find(w => (w.name == word.name && w.kind == word.kind));
if (dup) continue;
words.push(word);
}

cachedItems = words.map(word => {
dicLanguageWords.add(word.name);
let item = new vscode.CompletionItem(word.label, word.kind);
item.insertText = new vscode.SnippetString(word.name);
return item;
});
return cachedItems;
}
Loading

0 comments on commit cb4b53f

Please sign in to comment.