C# Класс Loyc.Ecs.Parser.EcsTriviaInjector

Trivia injector customized for Enhanced C#.
How newline trivia works in EC# (mostly this is the same as StandardTriviaInjector):
  • Implicitly, there is a newline before every node within a braced block, and CodeSymbols.TriviaAppendStatement is required to suppress it. The Loyc tree does not specify whether or not there is a newline before the closing brace; it is assumed that there should be a newline unless ALL children of the braced block use #trivia_appendStatement.
  • Implicitly, there is a newline before every top-level statement except the first, and #trivia_appendStatement can be used to suppress it.
  • By default, the printer doesn't print a newline before an opening brace. #trivia_newline can be added to the braced block node to represent one.
  • This injector explicitly encodes newlines in all other locations. However, the EC# printer is designed to print all syntax trees reasonably whether they have passed through the trivia injector or not. Therefore, on non-braced-block child statements of certain nodes (if statements, while loops, for loops, and other statements used without braces), the printer will print a newline before a child statement if it (1) does not have #trivia_newline or #trivia_appendStatement attributes and (2) does not have an ancestor with the NodeStyle.OneLiner style.
  • In an if-else statement, `else` has no representation in the syntax tree and may appear to the injector the same as a blank line. In this situation the first newline is attached to the child of //#if at index 1, and is deleted so that there is only one newline before the second child.
  • Constructors that call another constructor (`: base(...)`) get a newline before the colon by default, which can be suppressed with #trivia_appendStatement. Note: These constructors have an unusual syntax tree which the standard trivia injector can't handle properly; see comment in DoneAttaching() for details.
Наследование: StandardTriviaInjector
Показать файл Открыть проект Примеры использования класса

Открытые методы

Метод Описание
EcsTriviaInjector ( IListSource sortedTrivia, ISourceFile sourceFile, int newlineTypeInt, string mlCommentPrefix, string mlCommentSuffix, string slCommentPrefix ) : System

Защищенные методы

Метод Описание
AttachTriviaTo ( LNode &node, IListSource trivia, TriviaLocation loc, LNode parent, int indexInParent ) : VList
DoneAttaching ( LNode node, LNode parent, int indexInParent ) : LNode

Приватные методы

Метод Описание
RemoveLeadingNewline ( LNode &node ) : LNode

Описание методов

AttachTriviaTo() защищенный Метод

protected AttachTriviaTo ( LNode &node, IListSource trivia, TriviaLocation loc, LNode parent, int indexInParent ) : VList
node LNode
trivia IListSource
loc TriviaLocation
parent LNode
indexInParent int
Результат VList

DoneAttaching() защищенный Метод

protected DoneAttaching ( LNode node, LNode parent, int indexInParent ) : LNode
node LNode
parent LNode
indexInParent int
Результат LNode

EcsTriviaInjector() публичный Метод

public EcsTriviaInjector ( IListSource sortedTrivia, ISourceFile sourceFile, int newlineTypeInt, string mlCommentPrefix, string mlCommentSuffix, string slCommentPrefix ) : System
sortedTrivia IListSource
sourceFile ISourceFile
newlineTypeInt int
mlCommentPrefix string
mlCommentSuffix string
slCommentPrefix string
Результат System