2014-08-04 3 views
1

Введение: Я написал простую грамматику в Xtext, которая работает отдельно от автозаполнения. Это не похоже на то, что он совсем не работает, но он не работает, как я хочу, поэтому я начал искать возможность настроить автозаполнение. Я узнал, что есть много возможностей, но я не мог найти никаких конкретных объяснений.
И вот что я прошу здесь. Я надеюсь, что вы можете мне помочь.Как настроить автозаполнение, созданное с помощью Xtext?

Мой Грамматика:

 
grammar sqf.Sqf with org.eclipse.xtext.common.Terminals 

generate sqf "http://www.Sqf.sqf" 

Model: 
    elements += Element* 
; 

    Element: 
     Declaration ";" | Command ";" 
    ; 

     Declaration: 
      Variable | Array 
     ; 


      Variable: 
       name=ID "=" content=VARCONTENT (("+"|"-"|"*"|"/") content2+=VARCONTENT)* 
      ; 


      Array: 
       name=ID "=" contet=ArrayLiteral | name=ID "=" "+" content2+=[Array] 
      ; 

       ArrayLiteral: 
        "[" (content += ArrayContent)* "]" (("+"|"-")content1+=Extension)* 
       ; 

        ArrayContent: 
         content01=Acontent ("," content02+=Acontent)* 
        ; 

         Acontent: 
          STRING | INT | Variable | ref=[Declaration] | ArrayLiteral 
         ; 

        Extension: 
         STRING | INT | ref=[Declaration] 
        ; 




    Command: 
     Interaction 
    ; 

     Interaction: 
      hint 
     ; 

      hint: 
       Normal | Format | Special 
      ; 

       Normal: 
        name=HintTypes content=STRING 
       ; 

       Format: 
        name=HintTypes "format" "[" content=STRING "," variable=[Declaration] "]" 
       ; 

        HintTypes: 
         "hint" | "hintC" | "hintCadet" | "hintSilent" 
        ; 

       Special: 
        hintCArray 
       ; 

        hintCArray: 
         title=STRING "hintC" (content1=ArrayLiteral | content=STRING) 
        ; 

    VARCONTENT: 
    STRING | INT | ref=[Declaration] | "true" | "false" | "nil" 
; 

Моя проблема: Проблема заключается в том, что, когда я ударяя Ctrl + пробел в затмении-редактор (с моей плагин загружен), я только получить предложение «title» -STRING (из правила hintCArray) и имя-идентификатор (из правила декларации).
То, что я ожидаю, это то, что он также предлагает мне возможность выбирать между моими подсказками. Я также попытался нажать ctrl + space после того, как начал набирать команду (hin), и в результате автокомпозиция поставила рядом с ней «=», поэтому это будет объявление Variable или Array.

То, что я узнал, что я должен изменить некоторые из proposalProvider.java -Files (я думаю, что это AbstractProposalProvider) в .ui -сече-.
У меня теперь есть проблема, что я не знаю, что мне там писать.

В этом AbstractProposalProvider.java есть такие вещи, как это:
public void completeModel_Elements(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor); }

Приветствия Raven

ответ

1

есть несколько проблем с грамматикой, но когда только концентрируясь на ваш фактический вопрос:

Материала, который внутри DataTypeRule никогда не будет отображаться в предложениях из коробки. (HintTypes) Для того, чтобы это произошло без кодирования то, что вы могли бы inine возможных типов в качестве ключевых слов, как это:

Normal: имени = ("намек" | "hintC" | "hintCadet" | "hintSilent") содержание = STRING;

Формат: name = ("hint" | "hintC" | "hintCadet" | "hintSilent") "format" "[" content = STRING "," variable = [Declaration] "]";

Приветствия, Holger

+0

Большое спасибо! Это прекрасно работает. Я был бы рад, если бы вы могли сказать мне эти проблемы с моей грамматикой (я только начал с Xtext и благодарен за каждую помощь, которую я могу получить) – Raven

+0

Не могли бы вы рассказать мне о проблемах с моей грамматикой? В противном случае я буду продолжать делать эти ошибки, и тогда их будет сложнее исправить. – Raven