Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Formatting 引用元素的XText格式规则_Formatting_Xtext - Fatal编程技术网

Formatting 引用元素的XText格式规则

Formatting 引用元素的XText格式规则,formatting,xtext,Formatting,Xtext,我试图用一个简单的例子来描述这个问题。比方说,我有一个语法,看起来像这样: Model: rules+=Rule*; Rule: View | Element; Element: 'element' name=ID members+=Member members+=Member* 'end'; View: 'view' name=ID 'for' forElement=[Element] forMembers+=[Member] forMember

我试图用一个简单的例子来描述这个问题。比方说,我有一个语法,看起来像这样:

Model:
    rules+=Rule*;

Rule:
    View | Element;

Element:
    'element' name=ID members+=Member members+=Member* 'end';

View:
    'view' name=ID 'for' forElement=[Element] 
    forMembers+=[Member] forMembers+=[Member]* 'end';

Member:
    'member' name=ID;
这种语言的一个简单例子是:

// Element is where the Members are instantiated
element Foo
    member bar
    member foobar
    member barfoo
    member something
end

// Views only reference the members by simple name
view FooView for Foo
    bar 
    foobar 
    something
end
我有一个自定义作用域提供程序,用于查看规则的
forMembers
属性:

class MyDslScopeProvider extends AbstractDeclarativeScopeProvider {
    def scope_View_forMembers(View view, EReference reference) {
        Scopes.scopeFor(view.forElement.members);
    }
}
到目前为止一切都很好,我的问题来了:

我还有一个格式化程序,无法为引用的
成员添加规则:

class MyDslFormatter extends AbstractDeclarativeFormatter {

    @Inject extension MyDslGrammarAccess

    override protected void configureFormatting(FormattingConfig c) {

        // Rules for element: line breaks, indentation increment and decrement
        c.setLinewrap(1).after(elementAccess.nameAssignment_1)
        c.setLinewrap(1).after(elementRule)
        c.setIndentationIncrement.after(elementAccess.nameAssignment_1)
        c.setIndentationDecrement.before(elementAccess.endKeyword_4)

        // Rules for view: line breaks, indentation increment and decrement
        c.setLinewrap(1).after(viewAccess.forElementElementCrossReference_3_0)
        c.setLinewrap(1).after(viewRule)
        c.setIndentationIncrement.after(viewAccess.forElementElementCrossReference_3_0)
        c.setIndentationDecrement.before(viewAccess.endKeyword_6)

        //formatting for Member rule, only works, where Member rules are instantiated.
        c.setLinewrap(1).after(memberRule)
    }
}
如您所见,我已经为
元素
视图
规则以及
成员
规则设置了格式。但是,
成员
规则的格式仅适用于其实例化的(例如,
元素
声明)。当我运行此格式化程序(Ctrl+Shift+F)时,我得到以下格式:

element Foo
    member bar
    member foobar
    member barfoo
    member something
end
view FooView for Foo
    bar foobar something end

但是,我希望所有引用的成员也在一个新行中如何才能做到这一点?非常感谢您的帮助

成员在视图规则中被引用。必须在以下成员之后设置换行:

    c.setLinewrap(1).after(viewAccess.forMembersAssignment_4)
    c.setLinewrap(1).after(viewAccess.forMembersAssignment_5)