mirror of
https://github.com/sasjs/lint.git
synced 2026-01-16 00:30:05 +00:00
fix(hasMacroNameInMend): added support for comments having code in it
This commit is contained in:
@@ -164,6 +164,48 @@ describe('hasMacroNameInMend', () => {
|
|||||||
expect(hasMacroNameInMend.test(content)).toEqual([])
|
expect(hasMacroNameInMend.test(content)).toEqual([])
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should return an array with a single diagnostic when %mend has correct macro name having code in comments', () => {
|
||||||
|
const content = `/**
|
||||||
|
@file examplemacro.sas
|
||||||
|
@brief an example of a macro to be used in a service
|
||||||
|
@details This macro is great. Yadda yadda yadda. Usage:
|
||||||
|
|
||||||
|
* code formatting applies when indented by 4 spaces; code formatting applies when indented by 4 spaces; code formatting applies when indented by 4 spaces; code formatting applies when indented by 4 spaces; code formatting applies when indented by 4 spaces;
|
||||||
|
|
||||||
|
some code
|
||||||
|
%macro examplemacro123();
|
||||||
|
|
||||||
|
%examplemacro()
|
||||||
|
|
||||||
|
<h4> SAS Macros </h4>
|
||||||
|
@li doesnothing.sas
|
||||||
|
|
||||||
|
@author Allan Bowe
|
||||||
|
**/
|
||||||
|
|
||||||
|
%macro examplemacro();
|
||||||
|
|
||||||
|
proc sql;
|
||||||
|
create table areas
|
||||||
|
as select area
|
||||||
|
|
||||||
|
from sashelp.springs;
|
||||||
|
|
||||||
|
%doesnothing();
|
||||||
|
|
||||||
|
%mend;`
|
||||||
|
|
||||||
|
expect(hasMacroNameInMend.test(content)).toEqual([
|
||||||
|
{
|
||||||
|
message: '%mend missing macro name',
|
||||||
|
lineNumber: 29,
|
||||||
|
startColumnNumber: 5,
|
||||||
|
endColumnNumber: 11,
|
||||||
|
severity: Severity.Warning
|
||||||
|
}
|
||||||
|
])
|
||||||
|
})
|
||||||
|
|
||||||
it('should return an array with a single diagnostic when %mend has incorrect macro name', () => {
|
it('should return an array with a single diagnostic when %mend has incorrect macro name', () => {
|
||||||
const content = `
|
const content = `
|
||||||
%macro somemacro;
|
%macro somemacro;
|
||||||
|
|||||||
@@ -12,8 +12,14 @@ const test = (value: string) => {
|
|||||||
const statements: string[] = value ? value.split(';') : []
|
const statements: string[] = value ? value.split(';') : []
|
||||||
|
|
||||||
const stack: string[] = []
|
const stack: string[] = []
|
||||||
|
let trimmedStatement = '',
|
||||||
|
commentStarted = false
|
||||||
statements.forEach((statement, index) => {
|
statements.forEach((statement, index) => {
|
||||||
const trimmedStatement = trimComments(statement).trim()
|
;({ statement: trimmedStatement, commentStarted } = trimComments(
|
||||||
|
statement,
|
||||||
|
commentStarted
|
||||||
|
))
|
||||||
|
|
||||||
if (trimmedStatement.startsWith('%macro ')) {
|
if (trimmedStatement.startsWith('%macro ')) {
|
||||||
const macroName = trimmedStatement
|
const macroName = trimmedStatement
|
||||||
.split(' ')
|
.split(' ')
|
||||||
@@ -58,13 +64,24 @@ const test = (value: string) => {
|
|||||||
return diagnostics
|
return diagnostics
|
||||||
}
|
}
|
||||||
|
|
||||||
const trimComments = (statement: string): string => {
|
const trimComments = (
|
||||||
|
statement: string,
|
||||||
|
commentStarted: boolean = false
|
||||||
|
): { statement: string; commentStarted: boolean } => {
|
||||||
let trimmed = statement.trim()
|
let trimmed = statement.trim()
|
||||||
|
|
||||||
if (trimmed.startsWith('/*'))
|
if (commentStarted || trimmed.startsWith('/*')) {
|
||||||
trimmed = (trimmed.split('*/').pop() as string).trim()
|
const parts = trimmed.split('*/')
|
||||||
|
if (parts.length > 1) {
|
||||||
return trimmed
|
return {
|
||||||
|
statement: (parts.pop() as string).trim(),
|
||||||
|
commentStarted: false
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return { statement: '', commentStarted: true }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return { statement: trimmed, commentStarted: false }
|
||||||
}
|
}
|
||||||
|
|
||||||
const getLineNumber = (statements: string[], index: number): number => {
|
const getLineNumber = (statements: string[], index: number): number => {
|
||||||
|
|||||||
Reference in New Issue
Block a user