首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Eclipse orion代码完成

Eclipse orion代码完成
EN

Stack Overflow用户
提问于 2015-04-30 06:57:35
回答 2查看 187关注 0票数 0

我在某个地方看到orion使用tern来完成JavaScript的代码,但是在运行服务器之后,创建一个js文件,然后创建另一个文件,而另一个文件不知道第一个文件中的任何代码。

看来,完成只适用于当前打开的文件中定义的符号。

是否有一种方法来配置orion中的tern,这样它将产生一些有用的完成,而不是一个没有任何实际价值的工作演示?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-04 15:04:27

几周前(2015年4月中旬),猎户座才搬到特恩进行内容辅助提案。

bug.cgi?id=432940

我们正在努力实现多文件支持。

bug.cgi?id=464821

票数 1
EN

Stack Overflow用户

发布于 2015-05-04 23:51:25

我使用..tern config文件实现了对特定项目加载文件的黑客攻击。

它不适用于包含*的值,因为这需要更改服务器。

这只是一次简单的黑客攻击,很容易就会崩溃,但我现在的任务是。

下面是我如何更改版本9 build S 20150504-1254的代码:

在org.eclipse.orion.client.javascript_1.0.0.v20150504-1644.jar中

文件: /web/javascript/handlers/ternOccurrencesHandler.js

函数sortProposals如果语句检查文件是否为当前打开的文件,只需检查它是否为以/ file /开头的值

取代:

代码语言:javascript
复制
            if(_o === args.meta.location) {

通过以下方式:

代码语言:javascript
复制
            if(/^\/file\//.test(_o)) {

查找函数computeProposals并在该函数之前添加以下代码:

代码语言:javascript
复制
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');
    };
}());

在计算建议之前加载配置(第一次)

代码语言:javascript
复制
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 config并添加loadEagerly文件:

代码语言:javascript
复制
{
  "libs": [
    "browser",
    "ecma5",
    "jquery"
  ],
  "loadEagerly": [
    "goog/base.js",
    "somefile.js",
    "another file.js"
  ],
  "plugins": {
    "requirejs": {
      "baseURL": "./",
      "paths": {}
    }
  }
}

libs和插件目前被忽略,但其他文件被加载(请注意,这是一种简单的黑客攻击,在某些情况下可能会破坏)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29961024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档