0
此建立交叉引用的是我想要什麼,我試圖解析XTEXT一個泛型類型
type Number(); // define a type called "Number" with no member variables
type Point(Number x, Number y); // define a type called Point with member variables
// and something with generic types
type Pair[T, V](T first, V second);
// and even something cyclic:
type LinkedList[T](T payload, LinkedList[T] rest);
這是我的XTEXT語法,允許其:
TypeDecl returns SSType:
'type' name=TypeName
('[' typeParams += TypeName (',' typeParams += TypeName)* ']')?
'(' (args += Arg (',' args += Arg)*)? ')' ';'
;
TypeName returns SSTypeName:
name=ID
;
Type:
tn = [SSTypeName] ('[' typeParams += Type (',' typeParams += Type)* ']')?
;
Arg:
type = Type argName = ID
;
其中一期工程,但在接受的方面過於自由。如果有東西被聲明爲一個通用的(例如上面例子中的LinkedList),它應該只能用作通用的(例如LinkedList[Number]
而不是LinkedList
),理想情況下類型參數的arity將被強制執行。
當然,如果某些東西被聲明爲不是泛型類型(例如Number),那麼給它的類型參數應該是無效的。東西
例如,它會錯誤地接受:
type Wrong1(Number[Blah] a); // number doesn't have type arguments
type Wrong2(Pair a); // Pair has type arguments
type Wrong3(Pair[Number, Number, Number] a); // wrong arity
任何建議,意見,就如何做到這一點正確的代碼或提示將不勝感激。
從代碼完成的角度來看呢?當某人鍵入一個泛型類型時,我希望編輯器知道他們必須輸入類型參數。就像它不應該建議「Pair」一樣,它應該建議「Pair [T,V]」 – Heptic
您必須爲此目的自定義內容幫助(例如,在應用提議之後,爲T,V包括佔位符提供有意義的值) 。 –