mirror of
https://github.com/sasjs/lint.git
synced 2026-01-06 12:10:05 +00:00
feat: mult-line macro declarations
This commit is contained in:
@@ -3,7 +3,7 @@ import { parseMacros } from './parseMacros'
|
||||
|
||||
describe('parseMacros', () => {
|
||||
it('should return an array with a single macro', () => {
|
||||
const text = `%macro test;
|
||||
const text = ` %macro test;
|
||||
%put 'hello';
|
||||
%mend`
|
||||
|
||||
@@ -12,11 +12,11 @@ describe('parseMacros', () => {
|
||||
expect(macros.length).toEqual(1)
|
||||
expect(macros).toContainEqual({
|
||||
name: 'test',
|
||||
declarationLine: '%macro test;',
|
||||
declarationLines: [' %macro test;'],
|
||||
terminationLine: '%mend',
|
||||
declaration: '%macro test',
|
||||
termination: '%mend',
|
||||
startLineNumber: 1,
|
||||
startLineNumbers: [1],
|
||||
endLineNumber: 3,
|
||||
parentMacro: '',
|
||||
hasMacroNameInMend: false,
|
||||
@@ -34,11 +34,11 @@ describe('parseMacros', () => {
|
||||
expect(macros.length).toEqual(1)
|
||||
expect(macros).toContainEqual({
|
||||
name: 'test',
|
||||
declarationLine: '%macro test(var,sum);',
|
||||
declarationLines: ['%macro test(var,sum);'],
|
||||
terminationLine: '%mend',
|
||||
declaration: '%macro test(var,sum)',
|
||||
termination: '%mend',
|
||||
startLineNumber: 1,
|
||||
startLineNumbers: [1],
|
||||
endLineNumber: 3,
|
||||
parentMacro: '',
|
||||
hasMacroNameInMend: false,
|
||||
@@ -56,11 +56,11 @@ describe('parseMacros', () => {
|
||||
expect(macros.length).toEqual(1)
|
||||
expect(macros).toContainEqual({
|
||||
name: 'test',
|
||||
declarationLine: '%macro test/parmbuff;',
|
||||
declarationLines: ['%macro test/parmbuff;'],
|
||||
terminationLine: '%mend',
|
||||
declaration: '%macro test/parmbuff',
|
||||
termination: '%mend',
|
||||
startLineNumber: 1,
|
||||
startLineNumbers: [1],
|
||||
endLineNumber: 3,
|
||||
parentMacro: '',
|
||||
hasMacroNameInMend: false,
|
||||
@@ -79,11 +79,15 @@ describe('parseMacros', () => {
|
||||
expect(macros.length).toEqual(1)
|
||||
expect(macros).toContainEqual({
|
||||
name: 'foobar',
|
||||
declarationLine: '/* commentary */ %macro foobar(arg) /store source',
|
||||
declarationLines: [
|
||||
'/* commentary */ %macro foobar(arg) /store source',
|
||||
' des="This macro does not do much";'
|
||||
],
|
||||
terminationLine: '%mend',
|
||||
declaration: '%macro foobar(arg) /store source',
|
||||
declaration:
|
||||
'%macro foobar(arg) /store source des="This macro does not do much"',
|
||||
termination: '%mend',
|
||||
startLineNumber: 1,
|
||||
startLineNumbers: [1, 2],
|
||||
endLineNumber: 4,
|
||||
parentMacro: '',
|
||||
hasMacroNameInMend: false,
|
||||
@@ -104,11 +108,11 @@ describe('parseMacros', () => {
|
||||
expect(macros.length).toEqual(2)
|
||||
expect(macros).toContainEqual({
|
||||
name: 'foo',
|
||||
declarationLine: '%macro foo;',
|
||||
declarationLines: ['%macro foo;'],
|
||||
terminationLine: '%mend;',
|
||||
declaration: '%macro foo',
|
||||
termination: '%mend',
|
||||
startLineNumber: 1,
|
||||
startLineNumbers: [1],
|
||||
endLineNumber: 3,
|
||||
parentMacro: '',
|
||||
hasMacroNameInMend: false,
|
||||
@@ -116,11 +120,11 @@ describe('parseMacros', () => {
|
||||
})
|
||||
expect(macros).toContainEqual({
|
||||
name: 'bar',
|
||||
declarationLine: '%macro bar();',
|
||||
declarationLines: ['%macro bar();'],
|
||||
terminationLine: '%mend bar;',
|
||||
declaration: '%macro bar()',
|
||||
termination: '%mend bar',
|
||||
startLineNumber: 4,
|
||||
startLineNumbers: [4],
|
||||
endLineNumber: 6,
|
||||
parentMacro: '',
|
||||
hasMacroNameInMend: true,
|
||||
@@ -129,9 +133,9 @@ describe('parseMacros', () => {
|
||||
})
|
||||
|
||||
it('should detect nested macro definitions', () => {
|
||||
const text = `%macro test()
|
||||
const text = `%macro test();
|
||||
%put 'hello';
|
||||
%macro test2
|
||||
%macro test2;
|
||||
%put 'world;
|
||||
%mend
|
||||
%mend test`
|
||||
@@ -141,11 +145,11 @@ describe('parseMacros', () => {
|
||||
expect(macros.length).toEqual(2)
|
||||
expect(macros).toContainEqual({
|
||||
name: 'test',
|
||||
declarationLine: '%macro test()',
|
||||
declarationLines: ['%macro test();'],
|
||||
terminationLine: '%mend test',
|
||||
declaration: '%macro test()',
|
||||
termination: '%mend test',
|
||||
startLineNumber: 1,
|
||||
startLineNumbers: [1],
|
||||
endLineNumber: 6,
|
||||
parentMacro: '',
|
||||
hasMacroNameInMend: true,
|
||||
@@ -153,15 +157,125 @@ describe('parseMacros', () => {
|
||||
})
|
||||
expect(macros).toContainEqual({
|
||||
name: 'test2',
|
||||
declarationLine: ' %macro test2',
|
||||
declarationLines: [' %macro test2;'],
|
||||
terminationLine: ' %mend',
|
||||
declaration: '%macro test2',
|
||||
termination: '%mend',
|
||||
startLineNumber: 3,
|
||||
startLineNumbers: [3],
|
||||
endLineNumber: 5,
|
||||
parentMacro: 'test',
|
||||
hasMacroNameInMend: false,
|
||||
mismatchedMendMacroName: ''
|
||||
})
|
||||
})
|
||||
|
||||
describe(`multi-line macro declarations`, () => {
|
||||
it('should return an array with a single macro', () => {
|
||||
const text = `%macro
|
||||
test;
|
||||
%put 'hello';
|
||||
%mend`
|
||||
|
||||
const macros = parseMacros(text, new LintConfig())
|
||||
|
||||
expect(macros.length).toEqual(1)
|
||||
expect(macros).toContainEqual({
|
||||
name: 'test',
|
||||
declarationLines: ['%macro ', ' test;'],
|
||||
terminationLine: '%mend',
|
||||
declaration: '%macro test',
|
||||
termination: '%mend',
|
||||
startLineNumbers: [1, 2],
|
||||
endLineNumber: 4,
|
||||
parentMacro: '',
|
||||
hasMacroNameInMend: false,
|
||||
mismatchedMendMacroName: ''
|
||||
})
|
||||
})
|
||||
|
||||
it('should return an array with a single macro having parameters', () => {
|
||||
const text = `%macro
|
||||
test(
|
||||
var,
|
||||
sum);%put 'hello';
|
||||
%mend`
|
||||
|
||||
const macros = parseMacros(text, new LintConfig())
|
||||
|
||||
expect(macros.length).toEqual(1)
|
||||
expect(macros).toContainEqual({
|
||||
name: 'test',
|
||||
declarationLines: [
|
||||
'%macro ',
|
||||
` test(`,
|
||||
` var,`,
|
||||
` sum);%put 'hello';`
|
||||
],
|
||||
terminationLine: '%mend',
|
||||
declaration: '%macro test( var, sum)',
|
||||
termination: '%mend',
|
||||
startLineNumbers: [1, 2, 3, 4],
|
||||
endLineNumber: 5,
|
||||
parentMacro: '',
|
||||
hasMacroNameInMend: false,
|
||||
mismatchedMendMacroName: ''
|
||||
})
|
||||
})
|
||||
|
||||
it('should return an array with a single macro having PARMBUFF option', () => {
|
||||
const text = `%macro test
|
||||
/parmbuff;
|
||||
%put 'hello';
|
||||
%mend`
|
||||
|
||||
const macros = parseMacros(text, new LintConfig())
|
||||
|
||||
expect(macros.length).toEqual(1)
|
||||
expect(macros).toContainEqual({
|
||||
name: 'test',
|
||||
declarationLines: ['%macro test', ' /parmbuff;'],
|
||||
terminationLine: '%mend',
|
||||
declaration: '%macro test /parmbuff',
|
||||
termination: '%mend',
|
||||
startLineNumbers: [1, 2],
|
||||
endLineNumber: 4,
|
||||
parentMacro: '',
|
||||
hasMacroNameInMend: false,
|
||||
mismatchedMendMacroName: ''
|
||||
})
|
||||
})
|
||||
|
||||
it('should return an array with a single macro having paramerter & SOURCE option', () => {
|
||||
const text = `/* commentary */ %macro foobar/* commentary */(arg)
|
||||
/* commentary */
|
||||
/store
|
||||
/* commentary */source
|
||||
des="This macro does not do much";
|
||||
%put 'hello';
|
||||
%mend`
|
||||
|
||||
const macros = parseMacros(text, new LintConfig())
|
||||
|
||||
expect(macros.length).toEqual(1)
|
||||
expect(macros).toContainEqual({
|
||||
name: 'foobar',
|
||||
declarationLines: [
|
||||
'/* commentary */ %macro foobar/* commentary */(arg) ',
|
||||
' /* commentary */',
|
||||
' /store',
|
||||
' /* commentary */source',
|
||||
' des="This macro does not do much";'
|
||||
],
|
||||
terminationLine: '%mend',
|
||||
declaration:
|
||||
'%macro foobar(arg) /store source des="This macro does not do much"',
|
||||
termination: '%mend',
|
||||
startLineNumbers: [1, 2, 3, 4, 5],
|
||||
endLineNumber: 7,
|
||||
parentMacro: '',
|
||||
hasMacroNameInMend: false,
|
||||
mismatchedMendMacroName: ''
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user