Aptana Studio 3 JavaScript Content Assist woes



我使用Aptana Studio 3编写JavaScript;它为内置类型提供了出色的内容帮助,它可以正确地从源中推断变量的类型,并且在HTML文档中编写以字符串文本形式编写代码的代码时,它可以节省很多时间。也就是说,内容辅助和支持ScriptDoc的功能一直令人困惑、缓慢和恼火。当我尝试编写一个类/构造函数并记录该函数时,我可以使用ScriptDoc标记来获取以下内容:

-不识别函数/类的名称;

-将构造函数识别为函数,将类识别为类型,但不能将这种识别传播到变量。这是伟大的,只要我想写我的类,从不使用它;

-将类识别为类型,但不能将构造函数理解为函数。也就是说,它不会详细说明函数的形参、描述或返回类型,但如果我实例化它,它将帮助我确定对象的成员。

ScriptDoc特性的文档(Aptana从中派生用户定义的内容辅助信息)可以在http://wiki.appcelerator.org/display/tis/ScriptDoc+%28SDOC%29+2.0+Specification找到;但是,Aptana不能识别列出的许多关键字,并且可以识别一些不存在的关键字。例如,"@classDescription"在文档中列出但未被识别,而"@class"被识别但未在文档中列出。还要注意的是,完全按照上面的描述去做事情是行不通的。

有没有人可以帮助我一个JavaScript"类"的例子,这样Aptana Studio 3代码辅助将正确地描述类和构造函数的参数,正确地推断指定变量的类型,并正确地推断其方法之一返回的变量的类型,就像它与本机类型一样?使用下面的代码,根据需要添加注释块和标记。我已经删除了我的大部分,因为我一直在摆弄它们,因为它们不起作用。

/**
 * Constructor for Vector class
 */
function Vector(nX, nY) {
    this.x = nX || 0;
    this.y = nY || 0;
}
Vector.prototype = {
    x: 0,
    y: 0,
    /**
     * make a new Vector out of me
     */
    copy: function () {
        return new Vector(this.x, this.y);
    },
    /**
     * compare to some other vector.  Are they equal?
     * @param {Vector} vOther   some other Vector
     */
    equals: function (vOther) {
        //vOther should have content assistance, too.
        return (vOther.x === this.x) && (vOther.y === this.y);
    }
};
var v = new Vector(1,2);  //Should describe Vector class/constructor, types & purposes of nX & nY (Numbers)
var c = v.copy();         //Should recognize v as a Vector and describe v.copy()
c.copy();                 //If c.copy() is described properly, return type is correctly deduced & you win!
//bonus points if you can get it to inherit from something and describe c.inheritedMethod(someParameter)

谢谢!

更新:在没有关于Aptana的Jira, Tenderapp或StackOverflow的结论性回应的情况下,我开发了一个没有人应该使用的可怕的黑客。无论如何,我在这里包含它有两个原因:它可以为开发人员提供确定问题根本原因的信息,并且可以激励他们修复问题以防止人们使用黑客。它是这样的:

// Only recognizes global names
/**
 * This constructor will still be listed as returning 'none', but successfully infers
 * the type of a 'new' expression.  Adding a return tag will break this effect.
 * @constructor (can't tell if this tag does anything)
 */
MyClass = function () {
    // properties added here still won't work
}
/**
 * Describes an obvious property.
 * @type {String}
 */
MyClass.prototype.obviousProperty = "obvious";
// only works for properties declared like that
/**
 * Logs a comment on the parameter's property and returns this object (for chaining)
 * @param {MyClass} oProperty This is what you see for help on calling this method,
 *                            but it doesn't affect CA inside the method
 * @return {MyClass}          This makes the CA for calling the method correctly list
 *                            the return type, but doesn't cause inference of the
 *                            returned value's type.
 */
MyClass.prototype.commentOn = function (oProperty) {
    // hack below makes CA work when you type oProperty.
    log("obvious property is " + oProperty.obviousProperty);
    // the type of 'this' is not understood; I don't even know if the ScriptDoc
    // standard has a mechanism for it
    return this;
    // BEGIN HACK (note that this code is unreachable)
    // force working inference from assignment directly to symbol
    oProperty = new MyClass;
    // force working inference of return type
    return new MyClass;
    // END HACK
}
var foo = new MyClass; // see class description from above
var bar = new MyClass; // see it again, so it's not a crazy fluke
var baz = foo.commentOn(bar); // CA suggests & documents commentOn
baz. // CA suggests & documents obviousProperty & commentOn

它之所以有效是因为代码成功地导致了推理,ScriptDoc成功地将文档附加到代码中,但是ScriptDoc本身无法导致推理(或者以一种似乎没有人能弄清楚的非常糟糕的方式进行推理)。我仍然认为ScriptDoc会对类型名进行修改,这在索引视图中很明显。在Aptana Studio 3.08中,它将所有类型列为"动态类型"名称,而不是人们合理理解的名称。在2012年2月2日的夜间构建中,它现在将我的所有构造函数列出为Function<NameOfClass>,并单独列出NameOfClass.prototype(似乎对ScriptDoc或推理没有帮助)。

我用记事本写过代码,所以这应该不是什么大问题,但我仍然希望得到一个非hack的答案。谢谢!

更多更新:

对Aptana源代码的详尽调查揭示了文档和列出的特性与实际实现之间的许多差异。你可以在https://jira.appcelerator.org/browse/APSTUD-4454上看到我的笔记。

这是真的失败了,但这是我想到的:http://karoshiethos.com/2012/05/11/hacking-code-assist-in-aptana-3-javascript/

相关内容

  • 没有找到相关文章

最新更新