2012-09-16 9 views
5

¿Conoces algún IDE que pueda autocompletar este tipo de código?Oo código de JavaScript completado en cualquier IDE

que tienen un generador de clase de JavaScript aquí:

(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; 
    }; 
})(); 

necesito finalización de código (Escribe en los comentarios) para estas clases de ejemplo:

//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] 

Así que debo dejar que el IDE de alguna manera sabe, que estas funciones existen en el Function.prototype, y estas funciones crean instancias Function y escriben en el prototipo de esas instancias. Esto es posible solo con la indexación manual de mi código, como jsdoc, pero eso no es suficiente para describir, por ejemplo, la herencia. Así que necesito un IDE que pueda manejar al menos la herencia de js, y para el cual puedo escribir un complemento que crea esta indexación automáticamente. (Tal vez el complemento también podría manejar la herencia, no sé cómo funciona exactamente esa indexación ...)

¿Qué IDE es capaz de eso (y cómo)?

+0

¿qué quieres el IDE para autocompletar ? muestre un ejemplo. – Baz1nga

+0

Los valores de retorno de Function.create, ParentClass.extend, y las instancias ... Ofc algo como javadoc es aceptable para mí. Lo mejor sería si pudiera anular el complemento de finalización de código para interpretar estas funciones especiales ... – inf3rno

+1

IntelliJ de JetBrains es el mejor IDE del mercado, sin dudas. No estoy seguro de entender su requisito, pero hace un trabajo hermoso con JavaScript. – duffymo

Respuesta

2

solución 1:

me encontré con que en Eclipse el indexador Javascript es una parte de la plataforma de herramientas web/Herramientas de desarrollo de Javascript. The source code is here. Los desarrolladores escribieron que InferEngine es fácil de ampliar, por lo que puede escribir un plugin de eclipse. En ese caso, this blog es realmente muy útil. Tiene excelentes artículos sobre cómo extender JSDT, y los desarrolladores de JSDT también pueden ayudar. Lamentablemente, no tengo mucho tiempo para crear tal cosa si hay otra solución.

solución 2:

miraba a su alrededor y se encontró que el verdadero problema es que jsdoc 3 no es compatible por completo ni en Netbeans, ni en Eclipse JSDT y Aptana. El único IDE que encontré con el soporte de JSDOC 3 es Jetbrains WebStorm, así que lo usaré. (No probar la ReSharper para Visual Studio, pero es JetBrains producto, ya sea, por lo que, posiblemente, también funciona.)

El ejemplo original con jsdoc 3 en WebStorm:

/** @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 
1

Puede utilizar algo como WebStorm o VisualStudio con Resharper 6 instalado y crea una lista de todos los prototipos de todos los objetos y puede usar eso ... no es particularmente útil ni lo recomendaría ... Pero algo mejor que nada ..

+0

Sí, pero no escribo manualmente en los prototipos como: MyClass.prototype.doSomething = function() {console.log ("something"); } Escribo un código como este: MyClass = Function.create ({ doSomething: function() {console.log ("algo");} }); Ese es mi problema ... El IDE debe entender de alguna manera que este código se escribe en el prototipo, y esa es la parte difícil ... – inf3rno

+0

Estaba cerca, pero no lo suficientemente cerca ... (Por cierto, le di su voto). – inf3rno

Cuestiones relacionadas