Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Modeling » TMF (Xtext) » Referencing an element increase its internal indentation(Each time an element is referenced, indentation of its definition is increased)
Referencing an element increase its internal indentation [message #1739925] Fri, 05 August 2016 17:34 Go to next message
Serge Lamikhov is currently offline Serge LamikhovFriend
Messages: 26
Registered: May 2016
Junior Member
Hi,
Working in Eclipse, I observe the following problem each time a referenced element is used, its indentation is increased. For example. For grammar:
grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.common.Terminals

generate myDsl "http://www.xtext.org/example/mydsl/MyDsl"

Model:
	definitions+=(Definition | Usage)*;
	
Definition:
	'def' name=ID '{'
	    elements+=ID (',' elements+=ID)*
	'}';

Usage:
    'list' 'of' '{' list+=[Definition] (',' list+=[Definition])* '}'
;


and indentation code like:

class MyDslFormatter extends AbstractFormatter2 {
	
	@Inject extension MyDslGrammarAccess

	def dispatch void format(Model model, extension IFormattableDocument document) {
		// TODO: format HiddenRegions around keywords, attributes, cross references, etc. 
		for (EObject definitions : model.getDefinitions()) {
			definitions.format;
		}
	}
	
	def dispatch void format(Definition df, extension IFormattableDocument document)
	{
        df.interior[indent]
        df.regionFor.keyword("def").append[oneSpace]
        df.regionFor.feature(Literals.DEFINITION__NAME).append[oneSpace]
        df.regionFor.keyword("{").prepend[oneSpace].append[newLine]

        for (element : df.elements) {
            element.format
        }

        for (comma : df.regionFor.keywords(",")) {
            comma.prepend[noSpace].append[newLine]
        }

        df.regionFor.keyword("}").prepend[newLine].append[newLines = 2]
	} 
    
    def dispatch void format(Usage usage, extension IFormattableDocument document)
    {
        usage.interior[indent]
        usage.regionFor.keyword("list").append[oneSpace]
        usage.regionFor.keyword("of").append[oneSpace]
        usage.regionFor.keyword("{").append[newLine]

        for (item : usage.list) {
            format(item, document)
        }
        
        usage.regionFor.keyword("}").prepend[newLine].append[newLines = 2]
    } 
}


I observe the following auto-format behavior. Each time a 'definition' entity participates in 'usage' list, its indentation is increased:
def d1 {
            ww, // Indent will grow each time 'd1' appears in list below
            qq
}

list of {
    d1, d1
}


Did I find an issue or its a misuse?

Thank you
Re: Referencing an element increase its internal indentation [message #1739928 is a reply to message #1739925] Fri, 05 August 2016 17:49 Go to previous messageGo to next message
Christian Dietrich is currently offline Christian DietrichFriend
Messages: 14665
Registered: July 2009
Senior Member
Hi,

what is the intention of this:


        for (item : usage.list) {
            format(item, document)
        }


if you remove it, it is fine


Twitter : @chrdietrich
Blog : https://www.dietrich-it.de
Re: Referencing an element increase its internal indentation [message #1739933 is a reply to message #1739928] Fri, 05 August 2016 18:11 Go to previous messageGo to next message
Serge Lamikhov is currently offline Serge LamikhovFriend
Messages: 26
Registered: May 2016
Junior Member
The intention was a potential ability to format items within curly brackets (remove blanks, comments, add new lines, etc). Should it be avoided?
Re: Referencing an element increase its internal indentation [message #1739934 is a reply to message #1739933] Fri, 05 August 2016 18:13 Go to previous messageGo to next message
Christian Dietrich is currently offline Christian DietrichFriend
Messages: 14665
Registered: July 2009
Senior Member
Serge Lamikhov <forums-noreply@xxxxxxxx> wrote:
> The intention was a potential ability to format items within curly
> brackets (remove blanks, comments, add new lines, etc). Should it be avoided?
>

No that calls the other format method again


Twitter : @chrdietrich
Blog : https://www.dietrich-it.de
Re: Referencing an element increase its internal indentation [message #1739937 is a reply to message #1739934] Fri, 05 August 2016 18:23 Go to previous messageGo to next message
Serge Lamikhov is currently offline Serge LamikhovFriend
Messages: 26
Registered: May 2016
Junior Member
What I don't get is why an attempt to format referencing elements affects referenced ones.
Re: Referencing an element increase its internal indentation [message #1739942 is a reply to message #1739937] Fri, 05 August 2016 18:49 Go to previous messageGo to next message
Christian Dietrich is currently offline Christian DietrichFriend
Messages: 14665
Registered: July 2009
Senior Member
in

for (item : usage.list) {
format(item, document)
}

items are already the defintions. maybe you mean

usage.regionFor.crossRefs(usageAccess.listDefinitionCrossReference_3_0, usageAccess.listDefinitionCrossReference_4_1_0).forEach[prepend[space = " "]]


Twitter : @chrdietrich
Blog : https://www.dietrich-it.de
Re: Referencing an element increase its internal indentation [message #1739966 is a reply to message #1739942] Sat, 06 August 2016 06:34 Go to previous message
Serge Lamikhov is currently offline Serge LamikhovFriend
Messages: 26
Registered: May 2016
Junior Member
Thank you very much! That is exactly what I meant.
Previous Topic:Propagation of errors to Problems view
Next Topic:Limiting Proposed Java types to implementers of Interface does not work with Package
Goto Forum:
  


Current Time: Tue Apr 23 14:41:06 GMT 2024

Powered by FUDForum. Page generated in 0.02796 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top