Skip to content

Commit f05f035

Browse files
authored
Merge pull request #20 from SWAT-engineering/monitor-instead-of-println
Use `util::Monitor` instead of `println` to report conversion progress
2 parents 5eda17f + 2f77b24 commit f05f035

File tree

13 files changed

+38
-27
lines changed

13 files changed

+38
-27
lines changed

rascal-textmate-core/src/main/rascal/lang/textmate/Conversion.rsc

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55
module lang::textmate::Conversion
66

77
import Grammar;
8-
import IO;
98
import ParseTree;
109
import String;
1110
import util::Maybe;
11+
import util::Monitor;
1212

1313
import lang::oniguruma::Conversion;
1414
import lang::oniguruma::RegExp;
@@ -45,8 +45,8 @@ alias RscGrammar = Grammar;
4545
may contain additional meta-data needed during the transformation stage.
4646
}
4747

48-
TmGrammar toTmGrammar(RscGrammar rsc, ScopeName scopeName, NameGeneration nameGeneration = long())
49-
= transform(analyze(preprocess(rsc)), nameGeneration = nameGeneration) [scopeName = scopeName];
48+
TmGrammar toTmGrammar(RscGrammar rsc, str name, NameGeneration nameGeneration = long())
49+
= transform(analyze(preprocess(rsc), name), name, nameGeneration = nameGeneration);
5050

5151
@synopsis{
5252
Preprocess Rascal grammar `rsc` to make it suitable for analysis and
@@ -103,7 +103,9 @@ RscGrammar preprocess(RscGrammar rsc) {
103103
In stage 3, the set of all keywords that occur in `rsc` is created.
104104
}
105105

106-
list[ConversionUnit] analyze(RscGrammar rsc) {
106+
list[ConversionUnit] analyze(RscGrammar rsc, str name) {
107+
str jobLabel = "Analyzing<name == "" ? "" : " (<name>)">";
108+
jobStart(jobLabel, work = 4);
107109

108110
// Define auxiliary predicates
109111
bool isCyclic(Production p, set[Production] ancestors, _)
@@ -114,26 +116,28 @@ list[ConversionUnit] analyze(RscGrammar rsc) {
114116
= /\tag("category"(_)) := attributes;
115117
116118
// Analyze dependencies among productions
117-
println("[LOG] Analyzing dependencies among productions");
119+
jobStep(jobLabel, "Analyzing productions");
118120
Graph[Production] graph = toGraph(rsc);
119121
list[Production] prods = deps(graph).retainProds(isNonEmpty).retainProds(hasCategory).getProds();
120122
list[Production] prodsNonRecursive = prods & deps(graph).removeProds(isCyclic, true).getProds();
121123
list[Production] prodsRecursive = prods - prodsNonRecursive;
122124
123125
// Analyze delimiters
124-
println("[LOG] Analyzing delimiters");
126+
jobStep(jobLabel, "Analyzing delimiters");
125127
set[Symbol] delimiters
126128
= removeStrictPrefixes({s | /Symbol s := rsc, isDelimiter(delabel(s))})
127129
- {s | p <- prods, /just(s) := getOuterDelimiterPair(rsc, p)}
128130
- {s | p <- prods, /just(s) := getInnerDelimiterPair(rsc, p, getOnlyFirst = true)};
129131
list[Production] prodsDelimiters = [prod(lex(DELIMITERS_PRODUCTION_NAME), [\alt(delimiters)], {})];
130132
131133
// Analyze keywords
132-
println("[LOG] Analyzing keywords");
134+
jobStep(jobLabel, "Analyzing keywords");
133135
set[Symbol] keywords = {s | /Symbol s := rsc, isKeyword(delabel(s))};
134136
list[Production] prodsKeywords = [prod(lex(KEYWORDS_PRODUCTION_NAME), [\alt(keywords)], {\tag("category"("keyword.control"))})];
135137
136-
// Return
138+
// Prepare units
139+
jobStep(jobLabel, "Preparing units");
140+
137141
bool isRecursive(Production p)
138142
= p in prodsRecursive;
139143
bool isEmptyProd(prod(_, [\alt(alternatives)], _))
@@ -142,7 +146,11 @@ list[ConversionUnit] analyze(RscGrammar rsc) {
142146
set[ConversionUnit] units = {};
143147
units += {unit(rsc, p, isRecursive(p), hasNewline(rsc, p), getOuterDelimiterPair(rsc, p), getInnerDelimiterPair(rsc, p, getOnlyFirst = true)) | p <- prods};
144148
units += {unit(rsc, p, false, false, <nothing(), nothing()>, <nothing(), nothing()>) | p <- prodsDelimiters + prodsKeywords, !isEmptyProd(p)};
145-
return sort([*removeStrictPrefixes(units)]);
149+
list[ConversionUnit] ret = sort([*removeStrictPrefixes(units)]);
150+
151+
// Return
152+
jobEnd(jobLabel);
153+
return ret;
146154
}
147155
148156
@synopsis{
@@ -156,24 +164,27 @@ list[ConversionUnit] analyze(RscGrammar rsc) {
156164
2. composition of TextMate rules into a TextMate grammar.
157165
}
158166
159-
TmGrammar transform(list[ConversionUnit] units, NameGeneration nameGeneration = long()) {
167+
TmGrammar transform(list[ConversionUnit] units, str name, NameGeneration nameGeneration = long()) {
168+
str jobLabel = "Transforming<name == "" ? "" : " (<name>)">";
169+
jobStart(jobLabel, work = 2);
160170
161171
// Transform productions to rules
162-
println("[LOG] Transforming productions to rules");
172+
jobStep(jobLabel, "Transforming productions to rules");
163173
units = addNames(units, nameGeneration);
164174
units = addInnerRules(units);
165175
units = addOuterRules(units);
166176
167177
// Transform rules to grammar
168-
println("[LOG] Transforming rules to grammar");
178+
jobStep(jobLabel, "Transforming rules to grammar");
169179
set[TmRule] innerRules = {*u.innerRules | u <- units};
170180
set[TmRule] outerRules = {*u.outerRules | u <- units};
171181
Repository repository = ("<r.name>": r | TmRule r <- innerRules + outerRules);
172182
list[TmRule] patterns = dupLast([include("#<r.name>") | u <- units, r <- getTopLevelRules(u)]);
173183
TmGrammar tm = lang::textmate::Grammar::grammar(repository, "", patterns);
174184
175185
// Return
176-
return tm;
186+
jobEnd(jobLabel);
187+
return tm[scopeName = name];
177188
}
178189
179190
private list[ConversionUnit] addNames(list[ConversionUnit] units, NameGeneration nameGeneration) {

rascal-textmate-core/src/main/rascal/lang/textmate/ConversionTests.rsc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ import lang::textmate::ConversionConstants;
1818
import lang::textmate::ConversionUnit;
1919
import lang::textmate::Grammar;
2020

21-
bool doAnalyzeTest(RscGrammar rsc, list[ConversionUnit] expect, bool printActual = false) {
22-
list[ConversionUnit] actual = analyze(rsc);
21+
bool doAnalyzeTest(RscGrammar rsc, list[ConversionUnit] expect, str name = "", bool printActual = false) {
22+
list[ConversionUnit] actual = analyze(rsc, name);
2323

2424
if (printActual) {
2525
str syntheticProductionNameVars(str s)
@@ -61,7 +61,7 @@ bool doAnalyzeTest(RscGrammar rsc, list[ConversionUnit] expect, bool printActual
6161
}
6262

6363
bool doTransformTest(list[ConversionUnit] units, RepositoryStats expect, str name = "") {
64-
TmGrammar tm = transform(units)[scopeName = "<name>"];
64+
TmGrammar tm = transform(units, name);
6565

6666
loc lProject = |project://rascal-textmate-core|;
6767
loc lGrammar = lProject + "/target/generated-test-grammars/<name>.tmLanguage.json";

rascal-textmate-core/src/main/rascal/lang/textmate/conversiontests/Emoji.rsc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,5 @@ list[ConversionUnit] units = [
2424
unit(rsc, prod(lex("Unit"),[lit("🌊")],{\tag("category"("constant.language"))}), false, false, <nothing(),nothing()>, <just(lit("🌊")),just(lit("🌊"))>)
2525
];
2626

27-
test bool analyzeTest() = doAnalyzeTest(rsc, units);
27+
test bool analyzeTest() = doAnalyzeTest(rsc, units, name = "Emoji");
2828
test bool transformTest() = doTransformTest(units, <3, 0, 0>, name = "Emoji");

rascal-textmate-core/src/main/rascal/lang/textmate/conversiontests/Pico.rsc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,5 @@ list[ConversionUnit] units = [
1919
unit(rsc, prod(lex(KEYWORDS_PRODUCTION_NAME),[alt({lit("do"),lit("declare"),lit("fi"),lit("else"),lit("end"),lit("od"),lit("nil-type"),lit("begin"),lit("natural"),lit("then"),lit("if"),lit("while"),lit("string")})],{\tag("category"("keyword.control"))}), false, false, <nothing(),nothing()>, <nothing(),nothing()>)
2020
];
2121

22-
test bool analyzeTest() = doAnalyzeTest(rsc, units);
22+
test bool analyzeTest() = doAnalyzeTest(rsc, units, name = "Pico");
2323
test bool transformTest() = doTransformTest(units, <4, 1, 0>, name = "Pico");

rascal-textmate-core/src/main/rascal/lang/textmate/conversiontests/PicoWithCategories.rsc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,5 +86,5 @@ list[ConversionUnit] units = [
8686
unit(rsc, prod(lex(KEYWORDS_PRODUCTION_NAME),[alt({lit("do"),lit("declare"),lit("fi"),lit("else"),lit("end"),lit("od"),lit("nil-type"),lit("begin"),lit("natural"),lit("then"),lit("if"),lit("while"),lit("string")})],{\tag("category"("keyword.control"))}), false, false, <nothing(),nothing()>, <nothing(),nothing()>)
8787
];
8888

89-
test bool analyzeTest() = doAnalyzeTest(rsc, units);
89+
test bool analyzeTest() = doAnalyzeTest(rsc, units, name = "PicoWithCategories");
9090
test bool transformTest() = doTransformTest(units, <10, 3, 0>, name = "PicoWithCategories");

rascal-textmate-core/src/main/rascal/lang/textmate/conversiontests/Rascal.rsc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,5 +38,5 @@ list[ConversionUnit] units = [
3838
unit(rsc, prod(lex(KEYWORDS_PRODUCTION_NAME),[alt({lit("lexical"),lit("loc"),lit("test"),lit("lrel"),lit("throws"),lit("clear"),lit("top-down-break"),lit("module"),lit("any"),lit("int"),lit("quit"),lit("bottom-up-break"),lit("o"),lit("anno"),lit("true"),lit("public"),lit("keyword"),lit("for"),lit("tuple"),lit("bracket"),lit("bag"),lit("it"),lit("visit"),lit("do"),lit("data"),lit("layout"),lit("bool"),lit("edit"),lit("join"),lit("is"),lit("import"),lit("view"),lit("in"),lit("rat"),lit("modules"),lit("continue"),lit("left"),lit("num"),lit("assert"),lit("throw"),lit("one"),lit("help"),lit("default"),lit("all"),lit("global"),lit("syntax"),lit("false"),lit("finally"),lit("private"),lit("mod"),lit("java"),lit("node"),lit("start"),lit("set"),lit("if"),lit("bottom-up"),lit("right"),lit("variable"),lit("map"),lit("10"),lit("on"),lit("break"),lit("dynamic"),lit("solve"),lit("fail"),lit("unimport"),lit("outermost"),lit("real"),lit("list"),lit("insert"),lit("innermost"),lit("declarations"),lit("else"),lit("rel"),lit("function"),lit("notin"),lit("filter"),lit("datetime"),lit("catch"),lit("try"),lit("renaming"),lit("tag"),lit("has"),lit("top-down"),lit("Z"),lit("when"),lit("type"),lit("append"),lit("extend"),lit("non-assoc"),lit("assoc"),lit("switch"),lit("void"),lit("history"),lit("T"),lit("while"),lit("str"),lit("value"),lit("undeclare"),lit("case"),lit("alias"),lit("return"),lit("0")})],{\tag("category"("keyword.control"))}), false, false, <nothing(),nothing()>, <nothing(),nothing()>)
3939
];
4040

41-
test bool analyzeTest() = doAnalyzeTest(rsc, units);
41+
test bool analyzeTest() = doAnalyzeTest(rsc, units, name = "Rascal");
4242
test bool transformTest() = doTransformTest(units, <20, 4, 0>, name = "Rascal");

rascal-textmate-core/src/main/rascal/lang/textmate/conversiontests/RascalClass.rsc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,5 +47,5 @@ list[ConversionUnit] units = [
4747
unit(rsc, prod(lex(KEYWORDS_PRODUCTION_NAME),[alt({lit("10"),lit("0")})],{\tag("category"("keyword.control"))}), false, false, <nothing(),nothing()>, <nothing(),nothing()>)
4848
];
4949

50-
test bool analyzeTest() = doAnalyzeTest(rsc, units);
50+
test bool analyzeTest() = doAnalyzeTest(rsc, units, name = "RascalClass");
5151
test bool transformTest() = doTransformTest(units, <5, 1, 0>, name = "RascalClass");

rascal-textmate-core/src/main/rascal/lang/textmate/conversiontests/RascalComment.rsc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,5 @@ list[ConversionUnit] units = [
2222
unit(rsc, prod(lex("Comment"),[lit("/*"),\iter-star(alt({\char-class([range(1,41),range(43,1114111)]),conditional(lit("*"),{\not-follow(lit("/"))})})),lit("*/")],{\tag("category"("Comment"))}), false, true, <nothing(),nothing()>, <just(lit("/*")),just(lit("*/"))>)
2323
];
2424

25-
test bool analyzeTest() = doAnalyzeTest(rsc, units);
25+
test bool analyzeTest() = doAnalyzeTest(rsc, units, name = "RascalComment");
2626
test bool transformTest() = doTransformTest(units, <2, 1, 0>, name = "RascalComment");

rascal-textmate-core/src/main/rascal/lang/textmate/conversiontests/RascalConcrete.rsc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,5 +39,5 @@ list[ConversionUnit] units = [
3939
unit(rsc, prod(label("text",lex("ConcretePart")),[conditional(iter(\char-class([range(1,9),range(11,59),range(61,61),range(63,91),range(93,95),range(97,1114111)])),{\not-follow(\char-class([range(1,9),range(11,59),range(61,61),range(63,91),range(93,95),range(97,1114111)]))})],{\tag("category"("MetaSkipped"))}), false, false, <just(lit("`")),just(lit("`"))>, <nothing(),nothing()>)
4040
];
4141

42-
test bool analyzeTest() = doAnalyzeTest(rsc, units);
42+
test bool analyzeTest() = doAnalyzeTest(rsc, units, name = "RascalConcrete");
4343
test bool transformTest() = doTransformTest(units, <7, 1, 0>, name = "RascalConcrete");

rascal-textmate-core/src/main/rascal/lang/textmate/conversiontests/RascalStringConstant.rsc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,5 @@ list[ConversionUnit] units = [
3535
unit(rsc, prod(lex(KEYWORDS_PRODUCTION_NAME),[alt({lit("10"),lit("0")})],{\tag("category"("keyword.control"))}), false, false, <nothing(),nothing()>, <nothing(),nothing()>)
3636
];
3737

38-
test bool analyzeTest() = doAnalyzeTest(rsc, units);
38+
test bool analyzeTest() = doAnalyzeTest(rsc, units, name = "RascalStringConstant");
3939
test bool transformTest() = doTransformTest(units, <3, 1, 0>, name = "RascalStringConstant");

0 commit comments

Comments
 (0)