1
0
mirror of https://github.com/sasjs/lint.git synced 2026-01-18 09:40:05 +00:00

fix: Updated Code + messages has macro name

This commit is contained in:
Saad Jutt
2021-04-07 16:38:43 +05:00
parent b87fb4dca6
commit 99aec59dd1
6 changed files with 149 additions and 120 deletions

View File

@@ -28,7 +28,7 @@ describe('hasMacroNameInMend', () => {
expect(hasMacroNameInMend.test(content)).toEqual([ expect(hasMacroNameInMend.test(content)).toEqual([
{ {
message: '%mend statement is missing macro name', message: '%mend statement is missing macro name - somemacro',
lineNumber: 4, lineNumber: 4,
startColumnNumber: 3, startColumnNumber: 3,
endColumnNumber: 9, endColumnNumber: 9,
@@ -83,7 +83,7 @@ describe('hasMacroNameInMend', () => {
expect(hasMacroNameInMend.test(content)).toEqual([ expect(hasMacroNameInMend.test(content)).toEqual([
{ {
message: '%mend statement has mismatched macro name', message: `%mend statement has mismatched macro name, it should be 'somemacro'`,
lineNumber: 4, lineNumber: 4,
startColumnNumber: 9, startColumnNumber: 9,
endColumnNumber: 24, endColumnNumber: 24,
@@ -126,7 +126,7 @@ describe('hasMacroNameInMend', () => {
expect(hasMacroNameInMend.test(content)).toEqual([ expect(hasMacroNameInMend.test(content)).toEqual([
{ {
message: '%mend statement is missing macro name', message: '%mend statement is missing macro name - inner',
lineNumber: 6, lineNumber: 6,
startColumnNumber: 5, startColumnNumber: 5,
endColumnNumber: 11, endColumnNumber: 11,
@@ -148,7 +148,7 @@ describe('hasMacroNameInMend', () => {
expect(hasMacroNameInMend.test(content)).toEqual([ expect(hasMacroNameInMend.test(content)).toEqual([
{ {
message: '%mend statement is missing macro name', message: '%mend statement is missing macro name - outer',
lineNumber: 9, lineNumber: 9,
startColumnNumber: 3, startColumnNumber: 3,
endColumnNumber: 9, endColumnNumber: 9,
@@ -170,14 +170,14 @@ describe('hasMacroNameInMend', () => {
expect(hasMacroNameInMend.test(content)).toEqual([ expect(hasMacroNameInMend.test(content)).toEqual([
{ {
message: '%mend statement is missing macro name', message: '%mend statement is missing macro name - inner',
lineNumber: 6, lineNumber: 6,
startColumnNumber: 5, startColumnNumber: 5,
endColumnNumber: 11, endColumnNumber: 11,
severity: Severity.Warning severity: Severity.Warning
}, },
{ {
message: '%mend statement is missing macro name', message: '%mend statement is missing macro name - outer',
lineNumber: 9, lineNumber: 9,
startColumnNumber: 3, startColumnNumber: 3,
endColumnNumber: 9, endColumnNumber: 9,
@@ -235,7 +235,7 @@ describe('hasMacroNameInMend', () => {
expect(hasMacroNameInMend.test(content)).toEqual([ expect(hasMacroNameInMend.test(content)).toEqual([
{ {
message: '%mend statement is missing macro name', message: '%mend statement is missing macro name - examplemacro',
lineNumber: 29, lineNumber: 29,
startColumnNumber: 5, startColumnNumber: 5,
endColumnNumber: 11, endColumnNumber: 11,
@@ -254,7 +254,7 @@ describe('hasMacroNameInMend', () => {
expect(hasMacroNameInMend.test(content)).toEqual([ expect(hasMacroNameInMend.test(content)).toEqual([
{ {
message: '%mend statement has mismatched macro name', message: `%mend statement has mismatched macro name, it should be 'somemacro'`,
lineNumber: 6, lineNumber: 6,
startColumnNumber: 14, startColumnNumber: 14,
endColumnNumber: 29, endColumnNumber: 29,
@@ -271,7 +271,7 @@ describe('hasMacroNameInMend', () => {
expect(hasMacroNameInMend.test(content)).toEqual([ expect(hasMacroNameInMend.test(content)).toEqual([
{ {
message: '%mend statement is missing macro name', message: '%mend statement is missing macro name - somemacro',
lineNumber: 4, lineNumber: 4,
startColumnNumber: 5, startColumnNumber: 5,
endColumnNumber: 11, endColumnNumber: 11,

View File

@@ -13,11 +13,19 @@ const message = '%mend statement has missing or incorrect macro name'
const test = (value: string) => { const test = (value: string) => {
const diagnostics: Diagnostic[] = [] const diagnostics: Diagnostic[] = []
const statements: string[] = value ? value.split(';') : [] const lines: string[] = value ? value.split('\n') : []
const declaredMacros: { name: string; lineNumber: number }[] = [] const declaredMacros: { name: string; lineNumber: number }[] = []
let isCommentStarted = false let isCommentStarted = false
statements.forEach((statement, index) => { lines.forEach((line, index) => {
const { statement: trimmedLine, commentStarted } = trimComments(
line,
isCommentStarted
)
isCommentStarted = commentStarted
const statements: string[] = trimmedLine ? trimmedLine.split(';') : []
statements.forEach((statement) => {
const { statement: trimmedStatement, commentStarted } = trimComments( const { statement: trimmedStatement, commentStarted } = trimComments(
statement, statement,
isCommentStarted isCommentStarted
@@ -31,7 +39,7 @@ const test = (value: string) => {
.split('(')[0] .split('(')[0]
declaredMacros.push({ declaredMacros.push({
name: macroName, name: macroName,
lineNumber: getLineNumber(statements, index + 1) lineNumber: getLineNumber(lines, index + 1)
}) })
} else if (trimmedStatement.startsWith('%mend')) { } else if (trimmedStatement.startsWith('%mend')) {
const declaredMacro = declaredMacros.pop() const declaredMacro = declaredMacros.pop()
@@ -41,24 +49,29 @@ const test = (value: string) => {
if (!macroName) { if (!macroName) {
diagnostics.push({ diagnostics.push({
message: '%mend statement is missing macro name', message: `%mend statement is missing macro name - ${
lineNumber: getLineNumber(statements, index + 1), declaredMacro!.name
startColumnNumber: getColumnNumber(statement, '%mend'), }`,
endColumnNumber: getColumnNumber(statement, '%mend') + 6, lineNumber: getLineNumber(lines, index + 1),
startColumnNumber: getColumnNumber(line, '%mend'),
endColumnNumber: getColumnNumber(line, '%mend') + 6,
severity: Severity.Warning severity: Severity.Warning
}) })
} else if (macroName !== declaredMacro!.name) { } else if (macroName !== declaredMacro!.name) {
diagnostics.push({ diagnostics.push({
message: '%mend statement has mismatched macro name', message: `%mend statement has mismatched macro name, it should be '${
lineNumber: getLineNumber(statements, index + 1), declaredMacro!.name
startColumnNumber: getColumnNumber(statement, macroName), }'`,
lineNumber: getLineNumber(lines, index + 1),
startColumnNumber: getColumnNumber(line, macroName),
endColumnNumber: endColumnNumber:
getColumnNumber(statement, macroName) + macroName.length - 1, getColumnNumber(line, macroName) + macroName.length - 1,
severity: Severity.Warning severity: Severity.Warning
}) })
} }
} }
}) })
})
declaredMacros.forEach((declaredMacro) => { declaredMacros.forEach((declaredMacro) => {
diagnostics.push({ diagnostics.push({

View File

@@ -36,7 +36,7 @@ describe('hasMacroParentheses', () => {
expect(hasMacroParentheses.test(content)).toEqual([ expect(hasMacroParentheses.test(content)).toEqual([
{ {
message: 'Macro definition missing name', message: 'Macro definition contains space(s)',
lineNumber: 2, lineNumber: 2,
startColumnNumber: 3, startColumnNumber: 3,
endColumnNumber: 12, endColumnNumber: 12,
@@ -53,10 +53,10 @@ describe('hasMacroParentheses', () => {
expect(hasMacroParentheses.test(content)).toEqual([ expect(hasMacroParentheses.test(content)).toEqual([
{ {
message: 'Macro definition missing name', message: 'Macro definition contains space(s)',
lineNumber: 2, lineNumber: 2,
startColumnNumber: 3, startColumnNumber: 3,
endColumnNumber: 10, endColumnNumber: 9,
severity: Severity.Warning severity: Severity.Warning
} }
]) ])

View File

@@ -12,10 +12,17 @@ const message = 'Macro definition missing parentheses'
const test = (value: string) => { const test = (value: string) => {
const diagnostics: Diagnostic[] = [] const diagnostics: Diagnostic[] = []
const statements: string[] = value ? value.split(';') : [] const lines: string[] = value ? value.split('\n') : []
let isCommentStarted = false let isCommentStarted = false
statements.forEach((statement, index) => { lines.forEach((line, index) => {
const { statement: trimmedLine, commentStarted } = trimComments(
line,
isCommentStarted
)
isCommentStarted = commentStarted
const statements: string[] = trimmedLine ? trimmedLine.split(';') : []
statements.forEach((statement) => {
const { statement: trimmedStatement, commentStarted } = trimComments( const { statement: trimmedStatement, commentStarted } = trimComments(
statement, statement,
isCommentStarted isCommentStarted
@@ -32,19 +39,20 @@ const test = (value: string) => {
if (!macroName) if (!macroName)
diagnostics.push({ diagnostics.push({
message: 'Macro definition missing name', message: 'Macro definition contains space(s)',
lineNumber: getLineNumber(statements, index + 1), lineNumber: getLineNumber(lines, index + 1),
startColumnNumber: getColumnNumber(statement, '%macro'), startColumnNumber: getColumnNumber(line, '%macro'),
endColumnNumber: statement.length, endColumnNumber:
getColumnNumber(line, '%macro') + trimmedStatement.length,
severity: Severity.Warning severity: Severity.Warning
}) })
else if (macroNameDefinitionParts.length === 1) else if (macroNameDefinitionParts.length === 1)
diagnostics.push({ diagnostics.push({
message, message,
lineNumber: getLineNumber(statements, index + 1), lineNumber: getLineNumber(lines, index + 1),
startColumnNumber: getColumnNumber(statement, macroNameDefinition), startColumnNumber: getColumnNumber(line, macroNameDefinition),
endColumnNumber: endColumnNumber:
getColumnNumber(statement, macroNameDefinition) + getColumnNumber(line, macroNameDefinition) +
macroNameDefinition.length - macroNameDefinition.length -
1, 1,
severity: Severity.Warning severity: Severity.Warning
@@ -52,16 +60,17 @@ const test = (value: string) => {
else if (macroName !== macroName.trim()) else if (macroName !== macroName.trim())
diagnostics.push({ diagnostics.push({
message: 'Macro definition contains space(s)', message: 'Macro definition contains space(s)',
lineNumber: getLineNumber(statements, index + 1), lineNumber: getLineNumber(lines, index + 1),
startColumnNumber: getColumnNumber(statement, macroNameDefinition), startColumnNumber: getColumnNumber(line, macroNameDefinition),
endColumnNumber: endColumnNumber:
getColumnNumber(statement, macroNameDefinition) + getColumnNumber(line, macroNameDefinition) +
macroNameDefinition.length - macroNameDefinition.length -
1, 1,
severity: Severity.Warning severity: Severity.Warning
}) })
} }
}) })
})
return diagnostics return diagnostics
} }

View File

@@ -11,12 +11,19 @@ const description = 'Enfoces the absence of nested macro definitions.'
const message = `Macro definition for '{macro}' present in macro '{parent}'` const message = `Macro definition for '{macro}' present in macro '{parent}'`
const test = (value: string) => { const test = (value: string) => {
const diagnostics: Diagnostic[] = [] const diagnostics: Diagnostic[] = []
const statements: string[] = value ? value.split(';') : []
const declaredMacros: string[] = [] const declaredMacros: string[] = []
const lines: string[] = value ? value.split('\n') : []
let isCommentStarted = false let isCommentStarted = false
statements.forEach((statement, index) => { lines.forEach((line, index) => {
const { statement: trimmedLine, commentStarted } = trimComments(
line,
isCommentStarted
)
isCommentStarted = commentStarted
const statements: string[] = trimmedLine ? trimmedLine.split(';') : []
statements.forEach((statement) => {
const { statement: trimmedStatement, commentStarted } = trimComments( const { statement: trimmedStatement, commentStarted } = trimComments(
statement, statement,
isCommentStarted isCommentStarted
@@ -34,10 +41,10 @@ const test = (value: string) => {
message: message message: message
.replace('{macro}', macroName) .replace('{macro}', macroName)
.replace('{parent}', parentMacro!), .replace('{parent}', parentMacro!),
lineNumber: getLineNumber(statements, index + 1), lineNumber: getLineNumber(lines, index + 1),
startColumnNumber: getColumnNumber(statement, '%macro'), startColumnNumber: getColumnNumber(line, '%macro'),
endColumnNumber: endColumnNumber:
getColumnNumber(statement, '%macro') + trimmedStatement.length - 1, getColumnNumber(line, '%macro') + trimmedStatement.length - 1,
severity: Severity.Warning severity: Severity.Warning
}) })
} }
@@ -46,6 +53,7 @@ const test = (value: string) => {
declaredMacros.pop() declaredMacros.pop()
} }
}) })
})
return diagnostics return diagnostics
} }

View File

@@ -1,5 +1,4 @@
export const getLineNumber = (statements: string[], index: number): number => { export const getLineNumber = (lines: string[], index: number): number => {
const combinedCode = statements.slice(0, index).join(';') const combinedCode = lines.slice(0, index).join('\n')
const lines = (combinedCode.match(/\n/g) || []).length + 1 return (combinedCode.match(/\n/g) || []).length + 1
return lines
} }