Skip to content

Commit b11a206

Browse files
author
Сосна Евгений
committed
Корректировка парсинга вызовов внешних модулей.
1 parent 25d3f11 commit b11a206

File tree

5 files changed

+43
-22
lines changed

5 files changed

+43
-22
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,6 @@ node_modules
3232

3333
# Optional REPL history
3434
.node_repl_history
35+
typings/node/node.d.ts
36+
typings/mocha/mocha.d.ts
37+

lib/parser.js

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -263,24 +263,15 @@ SyntaxAnalysis.prototype.AnalyseModule = function (sourceCode, initValueTable, t
263263
{
264264
while( (Matches = this.RE_CALL.exec(str)) != null )
265265
{
266-
if( Matches[1].indexOf('.') >= 0 ){
267-
268-
var callArray = Matches[1].split(".");
269-
var addToCalls = true;
270-
271-
//if(walkMetadata(rootObject, metadataName, cacheMetadata)){
272-
if(addToCalls){
273-
if(Meth.Calls.indexOf(Matches[1]) >= 0) continue;
274-
Meth.Calls.push(Matches[1]);
275-
Meth.CallsPosition.push({"call": Matches[1], "line": i, "character": Matches.index});
276-
277-
}
278-
279-
//Сделаем поиск по общим модулям или под документам, вдруг там у нас статический вызов.
280-
//var mdRef = metadata.current.rootObject.childObject("Справочники", "Номенклатура")
266+
if (Matches[1].charAt(0) == "."){
267+
continue;
281268
}
282-
if( Meth.Calls.indexOf(Matches[1]) >= 0) continue;
283-
Meth.CallsPosition.push({"call": Matches[1], "line": i, "character": Matches.index});
269+
Meth.CallsPosition.push({"call": Matches[1], "line": i, "character": Lines[i].indexOf(Matches[1])});
270+
if(Meth._CallsUpper.indexOf(Matches[1].toUpperCase()) >= 0) {continue};
271+
Meth.Calls.push(Matches[1]);
272+
Meth._CallsUpper.push(Matches[1].toUpperCase());
273+
274+
284275
}
285276
}
286277
}
@@ -481,6 +472,7 @@ function _1CMethodDescription(parentModule) {
481472

482473
// Список вызовов: массив методов, вызываемых из данного метода.
483474
this.Calls = new Array();
475+
this._CallsUpper = new Array();
484476
this.CallsPosition = new Array();
485477

486478
// Номер строки объявления метода.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "onec-syntaxparser",
3-
"version": "0.1.5",
3+
"version": "0.1.6",
44
"description": "Parser for 1C bsl language based on regexp",
55
"main": "lib/parser.js",
66
"scripts": {

test/fixtures/module.os

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
Функция СложнаяФункцияСКучейПараметров(Знач ЗнакТабуляции, НоваяФичаТипаСруктуры) Экспорт
2121
Перем КакаяТоПеременная;
2222

23-
ТестЭкспортФункция(ЗнакТабуляции); //Проверка как определит что это локальный вызов.
23+
Проверка(ТестЭкспортФункция1(ЗнакТабуляции)); //Проверка как определит что это локальный вызов.
2424
module.ТестЭкспортФункция(ЗнакТабуляции); //Определяем что это вызом экспортной процедуры из файла модуля.
2525

2626
Возврат Истина;
@@ -32,4 +32,14 @@
3232
//
3333
Функция ТестСКомментарием()
3434

35+
КонецФункции
36+
37+
#Область СлужебныйПрограммныйИнтерфейс
38+
39+
// Возвращает аккуратно построеное наименование через запятую по парам "Название" + "Сокращение"
40+
//
41+
Функция ПолноеНаименование(Знач н0 = "", Знач с0 = "", Знач н1 = "", Знач с1 = "", Знач н2 = "", Знач с2 = "", Знач н3 = "", Знач с3 = "", Знач н4 = "", Знач с4 = "", Знач н5 = "", Знач с5 = "", Знач н6 = "", Знач с6 = "", Знач н7 = "", Знач с7 = "", Знач н8 = "", Знач с8 = "", Знач н9 = "", Знач с9 = "")
42+
43+
// Часть 0
44+
3545
КонецФункции

test/parser_spec.js

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,28 @@ describe("Parser", function () {
5858
expect(method._method.Params.length).to.equal(2);
5959
})
6060

61-
it("Функция должна быть иметь 1 вызов _method.Calls", function () {
62-
expect(method._method.Calls.length).to.equal(2);
61+
it("Функция должна быть иметь 3 вызова внешних процедур", function () {
62+
expect(method._method.Calls.length).to.equal(3);
6363
})
6464

65+
it("Функция ТестЭкспортФункция1 должна быть иметь 2 вызова и иметь позицию строки в 22 и линии 3 с учетом tab", function () {
66+
let name = "ТестЭкспортФункция1";
67+
expect(method._method.Calls).to.contain(name)
68+
for (var key in method._method.CallsPosition) {
69+
if (method._method.CallsPosition.hasOwnProperty(key)) {
70+
var element = method._method.CallsPosition[key];
71+
if (element.call.toUpperCase() === name.toUpperCase() ){
72+
expect(element.line).to.equal(22);
73+
expect(element.character).to.equal(10);
74+
break;
75+
}
76+
}
77+
}
78+
79+
})
80+
81+
6582
it("Функция должна быть иметь большое описание description", function () {
66-
var text = "dddd"
6783
expect(method.description.split("\n").length).to.equal(12);
6884
});
6985

0 commit comments

Comments
 (0)