import * as monaco from 'monaco-editor'
|
// js 有内置提示
|
function createCompleter(getExtraHints) {
|
const createSuggestions = function (model, textUntilPosition) {
|
let text = model.getValue();
|
textUntilPosition = textUntilPosition.replace(/[\*\[\]@\$\(\)]/g, "").replace(/(\s+|\.)/g, " ");
|
let arr = textUntilPosition.split(/[\s;]/);
|
let activeStr = arr[arr.length - 1];
|
let len = activeStr.length;
|
let rexp = new RegExp("([^\\w]|^)" + activeStr + "\\w*", "gim");
|
let match = text.match(rexp);
|
let mergeHints = Array.from(new Set([...getExtraHints(model)]))
|
.sort()
|
.filter(ele => {
|
let rexp = new RegExp(ele.substr(0, len), "gim");
|
return (match && match.length === 1 && ele === activeStr) ||
|
ele.length === 1 ? false : activeStr.match(rexp);
|
});
|
return mergeHints.map(ele => ({
|
label: ele,
|
kind: monaco.languages.CompletionItemKind.Text,
|
documentation: ele,
|
insertText: ele
|
}));
|
};
|
return {
|
provideCompletionItems(model, position) {
|
let textUntilPosition = model.getValueInRange({
|
startLineNumber: position.lineNumber,
|
startColumn: 1,
|
endLineNumber: position.lineNumber,
|
endColumn: position.column
|
});
|
return { suggestions: createSuggestions(model, textUntilPosition) };
|
}
|
}
|
}
|
export default createCompleter;
|