From 5c130c7a0e5fa7b301ba823855e37843b2c72dad Mon Sep 17 00:00:00 2001 From: Saad Jutt Date: Wed, 7 Apr 2021 18:07:58 +0500 Subject: [PATCH] fix(hasMacroNameInMend): check if %mend is extra --- src/rules/hasMacroNameInMend.spec.ts | 18 ++++++++++++++++++ src/rules/hasMacroNameInMend.ts | 20 +++++++++++++++----- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/src/rules/hasMacroNameInMend.spec.ts b/src/rules/hasMacroNameInMend.spec.ts index e9a6bcb..5cb10c8 100644 --- a/src/rules/hasMacroNameInMend.spec.ts +++ b/src/rules/hasMacroNameInMend.spec.ts @@ -92,6 +92,24 @@ describe('hasMacroNameInMend', () => { ]) }) + it('should return an array with a single diagnostic when extra %mend statement is present', () => { + const content = ` + %macro somemacro; + %put &sysmacroname; + %mend somemacro; + %mend something;` + + expect(hasMacroNameInMend.test(content)).toEqual([ + { + message: '%mend statement is redundant', + lineNumber: 5, + startColumnNumber: 3, + endColumnNumber: 18, + severity: Severity.Warning + } + ]) + }) + it('should return an empty array when the file is undefined', () => { const content = undefined diff --git a/src/rules/hasMacroNameInMend.ts b/src/rules/hasMacroNameInMend.ts index e88f8f5..db8deda 100644 --- a/src/rules/hasMacroNameInMend.ts +++ b/src/rules/hasMacroNameInMend.ts @@ -36,17 +36,27 @@ const test = (value: string) => { .slice(7, trimmedStatement.length) .trim() .split('(')[0] - declaredMacros.push({ - name: macroName, - lineNumber: lineIndex + 1 - }) + if (macroName) + declaredMacros.push({ + name: macroName, + lineNumber: lineIndex + 1 + }) } else if (trimmedStatement.startsWith('%mend')) { const declaredMacro = declaredMacros.pop() const macroName = trimmedStatement .split(' ') .filter((s: string) => !!s)[1] - if (!macroName) { + if (!declaredMacro) { + diagnostics.push({ + message: `%mend statement is redundant`, + lineNumber: lineIndex + 1, + startColumnNumber: getColumnNumber(line, '%mend'), + endColumnNumber: + getColumnNumber(line, '%mend') + trimmedStatement.length, + severity: Severity.Warning + }) + } else if (!macroName) { diagnostics.push({ message: `%mend statement is missing macro name - ${ declaredMacro!.name