У меня вопрос о правильности функционирования #pragma indent
#pragma indent
...
module Main
public rulesAplayer(Source:string, Rules:string):TRulesAplayerResult
def LexedSource = SourceLexer().Parse(Source);
def ParsedRules = RulesParser().Parse(Rules);
def listRuleTokenWithNamedLinkToListString(RuleToken)
{
RuleToken.Filter(ruleSourceTokens => ruleSourceTokens.RuleTokenValue is TRuleTokenValue.NamedLink)
.Map(token => token.RuleTokenValue.getNameOrValue())
}
def isRulesSourcePartHaveDublicatesOfNamedLinks(Rules)
!Rules.ToArray().ForAll((ruleSource, _) =>
listRuleTokenWithNamedLinkToListString(ruleSource)
.Group(String.Compare)
.ToArray().ForAll(groupedEqualTokens => List(groupedEqualTokens).Count==1)
);
def isRulesDestinationPartHaveUnknowenOfNamedLinks(Rules)
!Rules.ToArray().ForAll( (ruleSource, ruleDestination) =>
{
def correctIdentificators = listRuleTokenWithNamedLinkToListString(ruleSource);
def DestinationPartOfRule=listRuleTokenWithNamedLinkToListString(ruleDestination);
DestinationPartOfRule.ForAll(correctIdentificators.Contains)
});
if(LexedSource.IsNone)
TRulesAplayerResult.Error("Cant lex source text.")
else
if(ParsedRules.IsNone)
TRulesAplayerResult.Error("Cant parse rules.")
else
...
Если вы заметите, то осталось несколько {} и убрать их не получается не потеряв в читабельности. А если просто убрать, то ошибки компиляции вылазят. В чем причины и как бороться с этим?
И самое главное: Какие правила? В каких случаях нужно ставить {}, а в каких нет? Мне эти правила не кажутся очевидными и закономерными. Я их просто не могу вывести. Как будто это сам господин рандом пожелал, что ставить скобки нужно именно здесь для успешной компиляции.
Не говоря уже о неудобстве работы с PegGrammar, тк, насколько я понял, в режиме prgama indent атрибут должен быть записан в одну строчку в той же строчке, что и class. Ок, на самом деле это не проблема, а достаточно без prgama indent вынести в отдельный файл парсер. Может это не всегда удобно, но не вызывает больших проблем. А вот в случае с не очевидными правилами расстановки {} — это превращается в проблему. Впрочем причины этого я понимаю. #pragma indent прикручена в язык сбоку.
Собственно, ещё раз вопрос: Каковы правила расстановки {} в режиме #pragma indent?