-
Notifications
You must be signed in to change notification settings - Fork 0
Konventionen
Felix Auringer edited this page Aug 7, 2020
·
11 revisions
Für alle Tests, die die Formatierung von OmegaPrint testen (Ausnahme ist z.B. TestUI
), ist folgendes zu beachten:
- die Testklassen liegen im Paket
OmegaPrint-Tests
- Testklassen werden nach dem Knoten benannt, den sie testen (z.B.
TestFinalStatement
oderTestExecutableCode
), Ausnahmen für gewisse Funktionalität (z.B.TestComment
für Kommentare) sollten eigentlich vermieden werden und die Tests in die Klassen ihrer Knoten gepackt werden - Testklassen erben von
OPTestEvaluator
-
startSymbol
gibt den Knoten zurück bei dem das Parsing in den Tests starten soll (Klassenname) - Methodenkategorien richten sich nach den Unterregeln der Knoten:
-
startSymbol
ist in der Kategorieconstants
- die Standard-Methodenkategorie ist
base
- für Spezialfälle (z.B. gefixte Bugs) kann man auch die Kategorie
special cases
nutzen - falls der Knoten case labels hat, richten sich die Kategorien danach (z.B. in der Klasse
Expression
, dort die Kategorienbase
,operandCascade
, ...)
-
- der Methodenname ergibt sich durch die Namen der Kinderknoten des aktuell betrachteten Knoten:
- alle Namen fangen mit
test
an - da die Knotennamen aber sehr lang sind, reduzieren wir sie auf den wichtigen Part (z.B.
bindableIdentifier
zuidentifier
) - alle Kindknoten werden durch
with
oderwithout
geprefixt, je nachdem, ob sie in dem Eingabestring des Tests enthalten sind oder nicht - bei Kindknoten die mehrfach vorkommen können (
+
,*
) benutzt man als PrefixwithMultiple
(und schreibt die Knotenart im Plural) oderwithSingle
- alle Namen fangen mit
- der zu formatierende String (und vor allem der daraus resultierende CST) sollte möglichst simpel sein:
- Leerzeichen nutzen wir nur, wenn sie wirklich erforderlich sind (z.B.
'statement1.^statement2'
) - die genutzten Identifier sollten die entsprechenden Knoten widerspiegeln (z.B.
'identifier:pragmaLiteral'
) - so wenig Abhängigkeiten von anderen Knoten wie möglich: wenn man z.B. ein Statement Knoten braucht, setzt man einen Punkt, um nicht in FinalStatement geparst zu werden
- Leerzeichen nutzen wir nur, wenn sie wirklich erforderlich sind (z.B.
- im erwarteten Ergebnis immer Helfer-Methoden wie
self lf
oderself lfTab
nutzen, um Code zu sparen und konsistent zu sein
- Aufbau:
<Knoten>: aNode with: <Node> and: <Node>
-
<Node>
wird dabei durch den Typ des entsprechenden Knoten ersetzt - Singular: mit
a
/an
prefixen, z.B.aMethodHeader
- Plural: den Prefix weglassen und kleinschreiben, z.B.
pragmas
- bei mehreren gleichartigen Knoten wird noch
other
(Plural) oderanother
(Singular) vorangestellt, z.B.otherPragmas
oderanotherStatement
- bei Zeichen wie
#
,(
, ... nehmen wir als KnotenbezeichnungTerminal
und demnach als ParameternameaTerminal
oderterminals
- zwischen allen Token (Zeichen, Identifiern, ...) genau ein Leerzeichen
- Tabs zur Einrückung verwenden
- Leerzeile nach dem Methodenheader
- der Name von allen Messages beginnt mit einem Kleinbuchstaben
- Leerzeilen haben keine Whitespaces
- kein Whitespace am Zeilen- oder Methodenende
- alle Zeilen des Methodenbodies sind mindestens einen Tab eingerückt
- Formatierung von OmegaPrint verwenden