Skip to content

Commit e6e3781

Browse files
author
Сосна Евгений
committed
Исправил парсинг комментариев перед процедурой
1 parent a9b631c commit e6e3781

File tree

3 files changed

+34
-9
lines changed

3 files changed

+34
-9
lines changed

lib/parser.js

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ SyntaxAnalysis.prototype.Create1CMethodDescription = function(parentModule) {
4545
//// - Удалить из регулярок определения метода Далее - не имеет смысла для 8.х
4646
//// - Описать индексы и назначения группировок, подобно тому, как сделано для RE_VAR.
4747
SyntaxAnalysis.prototype.RE_COMMENT = new RegExp('^\\s*((?:(?:(?:"[^"]")*)|(?:[^/]*)|(?:[^/]+/))*)(//.*)?\\s*$', "");
48+
SyntaxAnalysis.prototype.RE_ISCOMMENT = new RegExp('^\\s*//.*$', '');
4849
/* Группировки: 1: Объявление метода (процедура/функция), 2: Имя метода, 3: Список параметров метода строкой, 4: "Далее" - имеет смысл только для 7.7. */
4950
//SyntaxAnalysis.RE_PROC = new RegExp('^\\s*((?:procedure)|(?:function)|(?:процедура)|(?:функция))\\s+([\\wА-яёЁ\\d]+)\\s*\\(([\\wА-яёЁ\\d\\s,.="\']*)\\)\\s*((?:forward)|(?:далее))?(.*)$', "i");
5051
SyntaxAnalysis.prototype.RE_PROC = new RegExp('^\\s*((?:procedure)|(?:function)|(?:процедура)|(?:функция))\\s+([\\wА-яёЁ\\d]+)\\s*\\(', 'i');
@@ -129,14 +130,15 @@ SyntaxAnalysis.prototype.AnalyseModule = function (sourceCode, initValueTable, t
129130
var Matches = this.RE_CONTEXT.exec(str);
130131
if (Matches!=null) {
131132
Context = this.CONTEXT[(""+Matches[1]).toLowerCase()];
133+
} else {
134+
Matches = this.RE_ISCOMMENT.exec(Lines[i]);
135+
if (Matches!=null){
136+
description.push(Lines[i]);
137+
} else if (str.trim().length === 0) { //Если пустая строка тогда это уже не описание процедуры, а тупой комментарий модуля.
138+
description = new Array();
139+
}
132140
}
133-
134-
Matches = this.RE_COMMENT.exec(Lines[i]);
135-
if (Matches!=null){
136-
description.push(Lines[i]);
137-
} else if (str.length == 0) { //Если пустая строка тогда это уже не описание процедуры, а тупой комментарий модуля.
138-
description = new Array();
139-
}
141+
140142
Matches = this.RE_PROC.exec(str);
141143
if( Matches != null )
142144
{
@@ -211,7 +213,7 @@ SyntaxAnalysis.prototype.AnalyseModule = function (sourceCode, initValueTable, t
211213
state = stInVarsDef;
212214
}
213215
break;
214-
}
216+
}
215217
break;
216218
case stInProc:
217219

test/fixtures/module.os

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,12 @@
2424
module.ТестЭкспортФункция(ЗнакТабуляции); //Определяем что это вызом экспортной процедуры из файла модуля.
2525

2626
Возврат Истина;
27+
КонецФункции
28+
29+
// Текст описания модуля с непонятными строками.
30+
31+
// ТестСКомментарием
32+
//
33+
Функция ТестСКомментарием()
34+
2735
КонецФункции

test/parser_spec.js

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,24 @@ describe("Parser", function () {
6060
expect(method._method.Calls.length).to.equal(2);
6161
})
6262
it("Функция должна быть иметь большое описание description", function () {
63-
expect(method.description.split("\n").length).to.equal(15);
63+
var text = "dddd"
64+
expect(method.description.split("\n").length).to.equal(12);
6465
})
6566
})
67+
68+
describe("Проверка парсинга комментариев для модуля.", function() {
69+
let method;
70+
71+
beforeEach(function () {
72+
method = methods.find(
73+
{"name":"ТестСКомментарием"}
74+
)[0];
75+
});
76+
77+
it("комментарий должен состоять из 2х строк", function(){
78+
expect(method.description).to.equal("// ТестСКомментарием\n//");
79+
})
80+
})
6681
}
6782
)
6883

0 commit comments

Comments
 (0)