Я выполнил хак для загрузки файлов для конкретного проекта с помощью файла .tern-конфигурации.
Он не работает со значениями, содержащими *, потому что это потребует изменения сервера.
Это простой взломать и легко сломается, но выполняет работу для меня на данный момент.
Вот как я изменил код для версии 9 сборки S20150504-1254:
в org.eclipse.orion.client.javascript_1.0.0.v20150504-1644.jar
файл:/веб /javascript/handlers/ternOccurrencesHandler.js
функция sortProposals если заявление проверяет файл является текущим открытым файлом просто проверить, если это значение, начиная с/файлом/
заменить:
if(_o === args.meta.location) {
с:
if(/^\/file\//.test(_o)) {
ищет функциональные computeProposals и добавьте следующий код перед этой функцией:
function getFile(url){
return new Promise(function(resolve,reject){
var xhr = new XMLHttpRequest();
xhr.open('GET',url);
xhr.addEventListener("load", function(e){
//@todo: have to check something I dont think this should be called on a 404 but it is
console.log('ok, done:',xhr.responseURL);
if(xhr.status!==200){
reject('file not found:',xhr.responseURL);
return;
}
resolve(xhr.responseText);
}, false);
xhr.addEventListener("error", function(e){
console.log('an error:',e);
reject(e);
}, false);
xhr.send();
});
}
var loadFilesInTern = (function(){
var loadedConfigs = [];
var currentConfig = '';
function loadJsFileIntoTernServer(fileName,ternserver){
return getFile(fileName)
.then(function resolve(val){
ternserver.addFile(fileName,val);
},function reject(err){
console.log('an error:',fileName);
return true;
});
}
return function(location,ternserver){
var p = new Promise(function(resolve){resolve(true);});
rootPath = location.split('/').slice(0,4).join('/');
console.log('got rootpath, trying to get tern-config from:',rootPath+'/.tern-config');
return p
.then(function(){
if(!loadedConfigs[rootPath]){
return getFile(rootPath+'/.tern-config');
}else {
return loadedConfigs[rootPath];
}
})
.then(function(config){
loadedConfigs[rootPath]=config;
if(config===currentConfig){
return;
};
currentConfig = config;
var settings = JSON.parse(config);
var promises = [];
settings.loadEagerly.forEach(function(fileName){
promises.push(loadJsFileIntoTernServer(rootPath + '/' + fileName,ternserver));
});
return Promise.all(promises);
})
.then(null,function reject(e){
console.log('an error:',e);
return true;
});
p.resolve('start');
};
}());
Загрузите конфиг перед вычислением предложения (в первый раз)
function computeProposals(ternserver, args, callback) {
if(ternserver) {
loadFilesInTern(args.meta.location,ternserver)
.then(function(){
console.log('ternserver is now:',ternserver);
ternserver.request({
//... rest of the computeProposals code
});//close the then
} else {//original code from computeProposals
callback({request: 'completions', proposals:[]});
}
Вы можете создать съедал аа .tern-конфигурацию в каталоге проекта и добавить loadEagerly файлы:
{
"libs": [
"browser",
"ecma5",
"jquery"
],
"loadEagerly": [
"goog/base.js",
"somefile.js",
"another file.js"
],
"plugins": {
"requirejs": {
"baseURL": "./",
"paths": {}
}
}
}
ЛИЭСА и плагины игнорируются в данный момент, но и другие файлы загружаются (обратите внимание, что это простой хак, который, вероятно, ломается при определенных обстоятельствах)
Кодовый помощник полезен только для вас, когда завершение происходит из других файлов? Это мощная функция, но я бы сказал, что доработки надстроек в файле вместе с предложениями по ключевым словам и шаблонам уже дают много реальной ценности. – CWindatt