元の文法では、次のように定義されたパーサー ルールがあります。
Property: k=Cident '=' (simple=PropertyValue | map=MapLiteral);
私は2つの異なるプロパティA
とを持っていますB
。それらはマップで異なるプロパティを持っています。例えば:
typeA = {'class': 'typeA', 'upper_bound': 50};
typeB = {'class': 'typeB', 'possible_value': 'int'};
typeB
upper_bound
財産になりません。
をオーバーライドcompleteProperty_Map
すると、 にキャストmodel
してisか かProperty
を確認し、違いのオートコンプリートを提案できます。しかし、最初の提案の後、k
typeA
typeB
typeA = {'class': 'typeA',
その後、オートコンプリートが機能しません。マップ内にあることだけは認識していますが、このマップが の右側にあることは認識していませんProperty
。かどうかk
を確認できないようなものです。typeA
typeB
何か助けはありますか?
================================================== ============
更新: コード スニペットをさらに追加
PropertyValue
: c=Constant
| u=UnreservedKeyword
;
Constant:
STRING_LITERAL | INTEGER | FLOAT | BOOLEAN | UUID | HEXNUMBER
;
================================================== ============
更新: 引数から AstTree の親オブジェクトを取得し、model
すべてのマップ エントリを反復処理して、class
プロパティが表示されているかどうかと の値を確認できることがわかりましたCident
。かなりばかげていますが、機能します。