2011-10-30 65 views
3

我使用的Aptana Studio的3編寫JavaScript代碼;它有內置的各類優秀的內容服務,它正確地推斷,從他們的來源變量的類型,它是在編寫代碼時生命的救星,在一個字符串文字在一個字符串的HTML文檔中的文字編寫代碼編寫代碼。也就是說,內容協助和支持ScriptDoc功能一直令人困惑,緩慢和令人生氣。當我嘗試編寫類/構造函數並記錄函數時,我可以使用ScriptDoc標記來獲得內容幫助:的Aptana Studio的3 JavaScript內容輔助困境

- 不識別函數/類的名稱;

-Recognize構造爲一個函數,並且類作爲類型,但達不到其識別傳播給一個變量。只要我想寫我的課而不用它,這很棒。

-Recognize類的類型,但無法理解的構造函數的函數。也就是說,它不會詳細說明函數的參數,描述或返回類型,但是如果我實例化它,它將幫助我解決對象的成員問題。

爲ScriptDoc特徵(從中派生集錦使用者定義的內容的輔助信息)可以在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上,它將我所有的類型列爲「動態類型」名稱,而不是合理理解它們的名稱。在2/2/2012每晚構建中,它現在將所有構造函數列爲Function<NameOfClass>,並列出NameOfClass.prototype(似乎對ScriptDoc或推理沒有幫助)。

我已經在記事本中編寫了代碼,所以這不應該像我覺得那樣大,但我仍然會非常欣賞一個非黑客的答案。謝謝!

更多更新:

的集錦源代碼的詳盡調查發現了大量的文檔和上市的特點和實際執行之間的差異。你可以在https://jira.appcelerator.org/browse/APSTUD-4454看到我的筆記。

+0

我花了一天時間試圖讓這件事的意義。任何事情都會破壞內容協助。如果在一行上的語句,在函數定義上的分號等等,那完全是絕望的。 –

回答