简体   繁体   English

在任何IDE中完成oo javascript代码

[英]Oo javascript code completion in any IDE

Do you know any IDE which can autocomplete this kind of code? 你知道任何可以自动完成这种代码的IDE吗?

I have a javascript class generator here: 我这里有一个javascript类生成器:

(function() {
    var core = {
        bind : function(method, scope) {
            if (!( method instanceof Function))
                throw new TypeError("Function needed as method.");
            if ( typeof (scope) != "object")
                throw new TypeError("Object needed as scope.");
            return function() {
                return method.apply(scope, arguments);
            };
        },
        require : function(source) {
            if ( typeof (source) != "object" || !source)
                throw new TypeError("Object needed as source.");
            for (var property in source)
                if (source.hasOwnProperty(property) && !this.prototype.hasOwnProperty(property))
                    this.prototype[property] = source[property];
        },
        override : function(source) {
            if ( typeof (source) != "object" || !source)
                throw new TypeError("Object needed as source.");
            for (var property in source)
                if (source.hasOwnProperty(property))
                    this.prototype[property] = source[property];
        },
        extend : function(source) {
            var superClass = this;
            var newClass = source.hasOwnProperty("constructor") ? source.constructor : function() {
                superClass.apply(this, arguments);
            };
            newClass.superClass = superClass;

            var superClone = function() {
            };
            superClone.prototype = superClass.prototype;
            newClass.prototype = new superClone();
            newClass.prototype.constructor = newClass;

            if (source)
                newClass.override(source);
            return newClass;
        }
    };

    core.require.call(Function, core);

    Function.create = function (source){
        var newClass = source.hasOwnProperty("constructor") ? source.constructor : function() {};
        newClass.override(source);
        return newClass;
    };
})(); 

I need code completion (wrote in the comments) for these example classes: 我需要这些示例类的代码完成(在注释中写):

//Function.prototype: bind, require, override, extend
//Function.create

var A = Function.create({ //offer Function.[create]
    test: function (){
        console.log("a");
    }
});

//A is a Function instance
//A.prototype: test

var B = A.extend({ //offer A.[extend]
    test: function (){
        console.log("b");
    },
    test2: function (){
        console.log("b2");
    }
});

//B is a Function instance
//B.prototype inherits from A.prototype
//B.prototype.test overrides A.prototype.test

var F = Function.create({ //offer Function.[create]
    getA: function (){
        return new A();
    },
    getB: function (){
        return new B();
    }
});
//F is a Function instance
//F.prototype getA, getB returns A and B instances

var f = new F(); //offer [F]
//f inherits from F.prototype
var a = f.getA(); //offer f.[getA]
//a inherits from A.prototype
var b = f.getB(); //offer f.[getB]
//b inhertis from B.prototype

a.test(); //offer a.[test]
b.test(); //offer b.[test]
b.test2(); //offer b.[test2]

So I must let the IDE somehow know, that these functions are existing in the Function.prototype, and these functions are creating Function instances and they are writing into the prototype of those instances. 所以我必须让IDE以某种方式知道,这些函数存在于Function.prototype中,并且这些函数正在创建Function实例,并且它们正在写入这些实例的原型。 This is possible only with manual indexing of my code, like jsdoc, but that's not enough to describe for example inheritance. 这只能通过我的代码的手动索引来实现,比如jsdoc,但这还不足以描述继承。 So I need an IDE which can handle at least js inheritance, and for which I can write a plugin that creates this indexing automatically. 所以我需要一个可以处理至少js继承的IDE,我可以编写一个自动创建索引的插件。 (Maybe the plugin could handle the inheritance too, I don't know how that indexing works exactly...) (也许插件也可以处理继承,我不知道索引是如何工作的......)

Which IDE is capable of that (and how)? 哪个IDE能够(以及如何)?

solution 1: 解决方案1:

I found that in Eclipse the javascript indexer is a part of Web Tools Platform / Javascript Development Tools. 我发现在Eclipse中,javascript索引器是Web Tools Platform / Javascript开发工具的一部分。 The source code is here. 源代码在这里。 The developers wrote that the InferEngine is easy extendable, so you can write an eclipse plugin. 开发人员写道,InferEngine易于扩展,因此您可以编写一个eclipse插件。 In that case this blog is really-really-really useful. 在这种情况下, 这个博客真的非常有用。 It has great articles how to extend JSDT, and the JSDT developers can help too. 它有很多文章如何扩展JSDT,JSDT开发人员也可以提供帮助。 Unfortunately I don't have much time to create such a thing if there is another solution. 不幸的是,如果有另一个解决方案,我没有太多时间来创建这样的东西。

solution 2: 解决方案2:

Was looking around and found that the real problem is, that JSDOC 3 is not supported completely neither in Netbeans, nor in Eclipse JSDT and Aptana. 环顾四周,发现真正的问题是,在Netbeans,Eclipse JSDT和Aptana中都没有完全支持JSDOC 3。 The only IDE I found with JSDOC 3 support is Jetbrains WebStorm, so I'll use that. 我在JSDOC 3支持下找到的唯一一个IDE是Jetbrains WebStorm,所以我会用它。 (Did not test the Resharper for Visual Studio, but it's JetBrains product either, so it possibly works too.) (没有测试Resharper for Visual Studio,但它也是JetBrains产品,所以它也可能有效。)

The original example with jsdoc 3 in webstorm: webstorm中jsdoc 3的原始示例:

/** @class*/
var A = Function.create(//offer Function.[create] -> OK!
/** @lends A.prototype*/
{ 
    test: function (){
        console.log("a");
    },
    testA: function (){
        console.log("a2");
    }
});

/** @class*/
/** @extends A*/
var B = A.extend(//offer A.[extend] -> OK!
/** @lends B.prototype*/
{ 
    test: function (){
        console.log("b");
    },
    testB: function (){
        console.log("b2");
    }
});

/** @class*/
var F = Function.create(//offer Function.[create]  -> OK!
/** @lends F.prototype*/
{ 
    /** @returns A*/
    getA: function (){
        return new A();
    },
    /** @returns B*/
    getB: function (){
        return new B();
    }
});

var f = new F();
f.getA().test(); //offer f.[getA], offer f.getA().[test] -> OK
f.getA().testA(); //offer f.[getA], offer f.getA().[testA] -> OK
f.getB().test(); //offer f.[getB], offer f.getB().[test] -> OK
f.getB().testA(); //offer f.[getB], offer f.getB().[testA] -> OK
f.getB().testB(); //offer f.[getB], offer f.getB().[testB] -> OK

您可以使用安装了Resharper 6的WebStorm或VisualStudio之类的东西,它会构建所有对象的所有原型的列表,您可以使用它...它不是特别有用,我也不推荐它。但是事情总比没有好......

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM