2015-04-30 4 views
0

Я читал где-то, что orion использует tern для завершения кода для JavaScript, но после запуска сервера, создания js-файла, а затем создания другого файла другой файл не знает о каком-либо коде в первом файле.Завершение создания кода Eclipse

Похоже, что выполнение выполняется только для символов, определенных в открытом файле.

Есть ли способ настроить tern in orion, чтобы он мог создать полезное завершение вместо рабочей демонстрации без какой-либо реальной стоимости?

+0

Кодовый помощник полезен только для вас, когда завершение происходит из других файлов? Это мощная функция, но я бы сказал, что доработки надстроек в файле вместе с предложениями по ключевым словам и шаблонам уже дают много реальной ценности. – CWindatt

ответ

1

Орион только переехал в Терн для предложений по предоставлению контента пару недель назад (середина апреля 2015 года).

https://bugs.eclipse.org/bugs/show_bug.cgi?id=432940

Мы работаем на включение поддержки нескольких файлов.

https://bugs.eclipse.org/bugs/show_bug.cgi?id=464821

+0

Я добавил ответ, объясняющий, как его добавить файлы на сервер tern на основе каждого проекта. Это своего рода грязный хак, но работает для меня на данный момент. Следите за хорошей работой, я рад видеть этот проект и надеюсь, что он вырастет до отличной среды IDE. Как я буду участвовать в этом проекте? Может быть, с чем я могу помочь? Что касается полезной помощи кода; извините, но да, если он работает только с текущим файлом, который я редактирую, это не очень полезно для меня. Но для IDE для добавления всех файлов в мой проект было бы слишком много, потому что это заставило большинство IDE быть медленными , – HMR

+0

@HMR https://wiki.eclipse.org/Orion/Contributing_Code – Mirodinho

0

Я выполнил хак для загрузки файлов для конкретного проекта с помощью файла .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": {} 
    } 
    } 
} 

ЛИЭСА и плагины игнорируются в данный момент, но и другие файлы загружаются (обратите внимание, что это простой хак, который, вероятно, ломается при определенных обстоятельствах)

Смежные вопросы