Scaffold: Autocomplete translator IDs in setTranslator() calls
This commit is contained in:
parent
42e042c6c6
commit
47610d0faa
1 changed files with 40 additions and 0 deletions
|
@ -57,6 +57,7 @@ var Scaffold = new function () {
|
||||||
var _translatorsLoadedPromise;
|
var _translatorsLoadedPromise;
|
||||||
var _translatorProvider = null;
|
var _translatorProvider = null;
|
||||||
var _lastModifiedTime = 0;
|
var _lastModifiedTime = 0;
|
||||||
|
var _needRebuildTranslatorSuggestions = true;
|
||||||
|
|
||||||
var _editors = {};
|
var _editors = {};
|
||||||
|
|
||||||
|
@ -156,6 +157,7 @@ var Scaffold = new function () {
|
||||||
|
|
||||||
onLoadComplete: () => {
|
onLoadComplete: () => {
|
||||||
document.getElementById('cmd_load').removeAttribute('disabled');
|
document.getElementById('cmd_load').removeAttribute('disabled');
|
||||||
|
_needRebuildTranslatorSuggestions = true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -267,6 +269,7 @@ var Scaffold = new function () {
|
||||||
|
|
||||||
monaco.languages.registerCodeLensProvider('javascript', this.createRunCodeLensProvider(monaco, editor));
|
monaco.languages.registerCodeLensProvider('javascript', this.createRunCodeLensProvider(monaco, editor));
|
||||||
monaco.languages.registerHoverProvider('javascript', this.createHoverProvider(monaco, editor));
|
monaco.languages.registerHoverProvider('javascript', this.createHoverProvider(monaco, editor));
|
||||||
|
monaco.languages.registerCompletionItemProvider('javascript', this.createCompletionProvider(monaco, editor));
|
||||||
|
|
||||||
let tsLib = await Zotero.File.getContentsAsync(
|
let tsLib = await Zotero.File.getContentsAsync(
|
||||||
OS.Path.join(Scaffold_Translators.getDirectory(), 'index.d.ts'));
|
OS.Path.join(Scaffold_Translators.getDirectory(), 'index.d.ts'));
|
||||||
|
@ -501,6 +504,43 @@ var Scaffold = new function () {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.createCompletionProvider = function (monaco, editor) {
|
||||||
|
let suggestions = null;
|
||||||
|
return {
|
||||||
|
provideCompletionItems(model, position) {
|
||||||
|
let prefixText = model.getValueInRange({
|
||||||
|
startLineNumber: position.lineNumber,
|
||||||
|
startColumn: 1,
|
||||||
|
endLineNumber: position.lineNumber,
|
||||||
|
endColumn: position.column
|
||||||
|
});
|
||||||
|
if (/setTranslator\([^)]*$/.test(prefixText)) {
|
||||||
|
let word = model.getWordUntilPosition(position);
|
||||||
|
let range = {
|
||||||
|
startLineNumber: position.lineNumber,
|
||||||
|
endLineNumber: position.lineNumber,
|
||||||
|
startColumn: word.startColumn,
|
||||||
|
endColumn: word.endColumn
|
||||||
|
};
|
||||||
|
if (!suggestions || _needRebuildTranslatorSuggestions) {
|
||||||
|
// Cache the suggestions minus the range field
|
||||||
|
suggestions = [...Scaffold_Translators._translators.entries()].map(([id, meta]) => {
|
||||||
|
return {
|
||||||
|
label: `${meta.translator.label}: '${id}'`,
|
||||||
|
kind: monaco.languages.CompletionItemKind.Constant,
|
||||||
|
insertText: `'${id}'`
|
||||||
|
};
|
||||||
|
});
|
||||||
|
_needRebuildTranslatorSuggestions = false;
|
||||||
|
}
|
||||||
|
// Add the range to each suggestion before returning
|
||||||
|
return { suggestions: suggestions.map(s => ({ ...s, range })) };
|
||||||
|
}
|
||||||
|
return { suggestions: [] };
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
this.updateModelMarkers = function (translatorPath) {
|
this.updateModelMarkers = function (translatorPath) {
|
||||||
runESLint(translatorPath)
|
runESLint(translatorPath)
|
||||||
.then(eslintOutputToModelMarkers)
|
.then(eslintOutputToModelMarkers)
|
||||||
|
|
Loading…
Reference in a new issue