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

Compare commits

...

5 Commits

Author SHA1 Message Date
Krishna Acondy
c2209cbe0e Merge pull request #27 from sasjs/issue-26
fix(hasMacroNameInMend): default sets to true
2021-04-16 13:24:40 +01:00
Saad Jutt
fe974050f7 chore: replaced with Severity.Warning 2021-04-16 16:20:02 +05:00
Saad Jutt
1402802f0a tests: added expectedDiagnostics array 2021-04-16 16:16:22 +05:00
Saad Jutt
36b3a7f319 chore(tests): changed numeric literals -> consts 2021-04-15 20:45:27 +05:00
Saad Jutt
c56887d6e6 fix(hasMacroNameInMend): default sets to true 2021-04-15 16:33:31 +05:00
6 changed files with 241 additions and 178 deletions

View File

@@ -7,7 +7,7 @@
"lowerCaseFileNames": true, "lowerCaseFileNames": true,
"noTabIndentation": true, "noTabIndentation": true,
"indentationMultiple": 2, "indentationMultiple": 2,
"hasMacroNameInMend": false, "hasMacroNameInMend": true,
"noNestedMacros": true, "noNestedMacros": true,
"hasMacroParentheses": true "hasMacroParentheses": true
} }

View File

@@ -2,68 +2,87 @@ import { lintFile } from './lintFile'
import { Severity } from '../types/Severity' import { Severity } from '../types/Severity'
import path from 'path' import path from 'path'
const expectedDiagnostics = [
{
message: 'Line contains trailing spaces',
lineNumber: 1,
startColumnNumber: 1,
endColumnNumber: 2,
severity: Severity.Warning
},
{
message: 'Line contains trailing spaces',
lineNumber: 2,
startColumnNumber: 1,
endColumnNumber: 2,
severity: Severity.Warning
},
{
message: 'File name contains spaces',
lineNumber: 1,
startColumnNumber: 1,
endColumnNumber: 1,
severity: Severity.Warning
},
{
message: 'File name contains uppercase characters',
lineNumber: 1,
startColumnNumber: 1,
endColumnNumber: 1,
severity: Severity.Warning
},
{
message: 'File missing Doxygen header',
lineNumber: 1,
startColumnNumber: 1,
endColumnNumber: 1,
severity: Severity.Warning
},
{
message: 'Line contains encoded password',
lineNumber: 5,
startColumnNumber: 10,
endColumnNumber: 18,
severity: Severity.Error
},
{
message: 'Line is indented with a tab',
lineNumber: 7,
startColumnNumber: 1,
endColumnNumber: 1,
severity: Severity.Warning
},
{
message: 'Line has incorrect indentation - 3 spaces',
lineNumber: 6,
startColumnNumber: 1,
endColumnNumber: 1,
severity: Severity.Warning
},
{
message: '%mend statement is missing macro name - mf_getuniquelibref',
lineNumber: 17,
startColumnNumber: 3,
endColumnNumber: 9,
severity: Severity.Warning
}
]
describe('lintFile', () => { describe('lintFile', () => {
it('should identify lint issues in a given file', async () => { it('should identify lint issues in a given file', async () => {
const results = await lintFile( const results = await lintFile(
path.join(__dirname, '..', 'Example File.sas') path.join(__dirname, '..', 'Example File.sas')
) )
expect(results.length).toEqual(8) expect(results.length).toEqual(expectedDiagnostics.length)
expect(results).toContainEqual({ expect(results).toContainEqual(expectedDiagnostics[0])
message: 'Line contains trailing spaces', expect(results).toContainEqual(expectedDiagnostics[1])
lineNumber: 1, expect(results).toContainEqual(expectedDiagnostics[2])
startColumnNumber: 1, expect(results).toContainEqual(expectedDiagnostics[3])
endColumnNumber: 2, expect(results).toContainEqual(expectedDiagnostics[4])
severity: Severity.Warning expect(results).toContainEqual(expectedDiagnostics[5])
}) expect(results).toContainEqual(expectedDiagnostics[6])
expect(results).toContainEqual({ expect(results).toContainEqual(expectedDiagnostics[7])
message: 'Line contains trailing spaces', expect(results).toContainEqual(expectedDiagnostics[8])
lineNumber: 2,
startColumnNumber: 1,
endColumnNumber: 2,
severity: Severity.Warning
})
expect(results).toContainEqual({
message: 'File name contains spaces',
lineNumber: 1,
startColumnNumber: 1,
endColumnNumber: 1,
severity: Severity.Warning
})
expect(results).toContainEqual({
message: 'File name contains uppercase characters',
lineNumber: 1,
startColumnNumber: 1,
endColumnNumber: 1,
severity: Severity.Warning
})
expect(results).toContainEqual({
message: 'File missing Doxygen header',
lineNumber: 1,
startColumnNumber: 1,
endColumnNumber: 1,
severity: Severity.Warning
})
expect(results).toContainEqual({
message: 'Line contains encoded password',
lineNumber: 5,
startColumnNumber: 10,
endColumnNumber: 18,
severity: Severity.Error
})
expect(results).toContainEqual({
message: 'Line is indented with a tab',
lineNumber: 7,
startColumnNumber: 1,
endColumnNumber: 1,
severity: Severity.Warning
})
expect(results).toContainEqual({
message: 'Line has incorrect indentation - 3 spaces',
lineNumber: 6,
startColumnNumber: 1,
endColumnNumber: 1,
severity: Severity.Warning
})
}) })
}) })

View File

@@ -2,70 +2,90 @@ import { lintFolder } from './lintFolder'
import { Severity } from '../types/Severity' import { Severity } from '../types/Severity'
import path from 'path' import path from 'path'
describe('lintFolder', () => { const expectedFilesCount = 1
it('should identify lint issues in a given folder', async () => { const expectedDiagnostics = [
const results = await lintFolder(path.join(__dirname, '..')) {
expect(results.size).toEqual(1)
const diagnostics = results.get(
path.join(__dirname, '..', 'Example File.sas')
)!
expect(diagnostics.length).toEqual(8)
expect(diagnostics).toContainEqual({
message: 'Line contains trailing spaces', message: 'Line contains trailing spaces',
lineNumber: 1, lineNumber: 1,
startColumnNumber: 1, startColumnNumber: 1,
endColumnNumber: 2, endColumnNumber: 2,
severity: Severity.Warning severity: Severity.Warning
}) },
expect(diagnostics).toContainEqual({ {
message: 'Line contains trailing spaces', message: 'Line contains trailing spaces',
lineNumber: 2, lineNumber: 2,
startColumnNumber: 1, startColumnNumber: 1,
endColumnNumber: 2, endColumnNumber: 2,
severity: Severity.Warning severity: Severity.Warning
}) },
expect(diagnostics).toContainEqual({ {
message: 'File name contains spaces', message: 'File name contains spaces',
lineNumber: 1, lineNumber: 1,
startColumnNumber: 1, startColumnNumber: 1,
endColumnNumber: 1, endColumnNumber: 1,
severity: Severity.Warning severity: Severity.Warning
}) },
expect(diagnostics).toContainEqual({ {
message: 'File name contains uppercase characters', message: 'File name contains uppercase characters',
lineNumber: 1, lineNumber: 1,
startColumnNumber: 1, startColumnNumber: 1,
endColumnNumber: 1, endColumnNumber: 1,
severity: Severity.Warning severity: Severity.Warning
}) },
expect(diagnostics).toContainEqual({ {
message: 'File missing Doxygen header', message: 'File missing Doxygen header',
lineNumber: 1, lineNumber: 1,
startColumnNumber: 1, startColumnNumber: 1,
endColumnNumber: 1, endColumnNumber: 1,
severity: Severity.Warning severity: Severity.Warning
}) },
expect(diagnostics).toContainEqual({ {
message: 'Line contains encoded password', message: 'Line contains encoded password',
lineNumber: 5, lineNumber: 5,
startColumnNumber: 10, startColumnNumber: 10,
endColumnNumber: 18, endColumnNumber: 18,
severity: Severity.Error severity: Severity.Error
}) },
expect(diagnostics).toContainEqual({ {
message: 'Line is indented with a tab', message: 'Line is indented with a tab',
lineNumber: 7, lineNumber: 7,
startColumnNumber: 1, startColumnNumber: 1,
endColumnNumber: 1, endColumnNumber: 1,
severity: Severity.Warning severity: Severity.Warning
}) },
expect(diagnostics).toContainEqual({ {
message: 'Line has incorrect indentation - 3 spaces', message: 'Line has incorrect indentation - 3 spaces',
lineNumber: 6, lineNumber: 6,
startColumnNumber: 1, startColumnNumber: 1,
endColumnNumber: 1, endColumnNumber: 1,
severity: Severity.Warning severity: Severity.Warning
}) },
{
message: '%mend statement is missing macro name - mf_getuniquelibref',
lineNumber: 17,
startColumnNumber: 3,
endColumnNumber: 9,
severity: Severity.Warning
}
]
describe('lintFolder', () => {
it('should identify lint issues in a given folder', async () => {
const results = await lintFolder(path.join(__dirname, '..'))
expect(results.size).toEqual(expectedFilesCount)
const diagnostics = results.get(
path.join(__dirname, '..', 'Example File.sas')
)!
expect(diagnostics.length).toEqual(expectedDiagnostics.length)
expect(diagnostics).toContainEqual(expectedDiagnostics[0])
expect(diagnostics).toContainEqual(expectedDiagnostics[1])
expect(diagnostics).toContainEqual(expectedDiagnostics[2])
expect(diagnostics).toContainEqual(expectedDiagnostics[3])
expect(diagnostics).toContainEqual(expectedDiagnostics[4])
expect(diagnostics).toContainEqual(expectedDiagnostics[5])
expect(diagnostics).toContainEqual(expectedDiagnostics[6])
expect(diagnostics).toContainEqual(expectedDiagnostics[7])
expect(diagnostics).toContainEqual(expectedDiagnostics[8])
}) })
}) })

View File

@@ -4,6 +4,73 @@ import * as utils from '../utils'
import path from 'path' import path from 'path'
jest.mock('../utils') jest.mock('../utils')
const expectedFilesCount = 1
const expectedDiagnostics = [
{
message: 'Line contains trailing spaces',
lineNumber: 1,
startColumnNumber: 1,
endColumnNumber: 2,
severity: Severity.Warning
},
{
message: 'Line contains trailing spaces',
lineNumber: 2,
startColumnNumber: 1,
endColumnNumber: 2,
severity: Severity.Warning
},
{
message: 'File name contains spaces',
lineNumber: 1,
startColumnNumber: 1,
endColumnNumber: 1,
severity: Severity.Warning
},
{
message: 'File name contains uppercase characters',
lineNumber: 1,
startColumnNumber: 1,
endColumnNumber: 1,
severity: Severity.Warning
},
{
message: 'File missing Doxygen header',
lineNumber: 1,
startColumnNumber: 1,
endColumnNumber: 1,
severity: Severity.Warning
},
{
message: 'Line contains encoded password',
lineNumber: 5,
startColumnNumber: 10,
endColumnNumber: 18,
severity: Severity.Error
},
{
message: 'Line is indented with a tab',
lineNumber: 7,
startColumnNumber: 1,
endColumnNumber: 1,
severity: Severity.Warning
},
{
message: 'Line has incorrect indentation - 3 spaces',
lineNumber: 6,
startColumnNumber: 1,
endColumnNumber: 1,
severity: Severity.Warning
},
{
message: '%mend statement is missing macro name - mf_getuniquelibref',
lineNumber: 17,
startColumnNumber: 3,
endColumnNumber: 9,
severity: Severity.Warning
}
]
describe('lintProject', () => { describe('lintProject', () => {
it('should identify lint issues in a given project', async () => { it('should identify lint issues in a given project', async () => {
jest jest
@@ -11,67 +78,20 @@ describe('lintProject', () => {
.mockImplementationOnce(() => Promise.resolve(path.join(__dirname, '..'))) .mockImplementationOnce(() => Promise.resolve(path.join(__dirname, '..')))
const results = await lintProject() const results = await lintProject()
expect(results.size).toEqual(1) expect(results.size).toEqual(expectedFilesCount)
const diagnostics = results.get( const diagnostics = results.get(
path.join(__dirname, '..', 'Example File.sas') path.join(__dirname, '..', 'Example File.sas')
)! )!
expect(diagnostics.length).toEqual(8) expect(diagnostics.length).toEqual(expectedDiagnostics.length)
expect(diagnostics).toContainEqual({ expect(diagnostics).toContainEqual(expectedDiagnostics[0])
message: 'Line contains trailing spaces', expect(diagnostics).toContainEqual(expectedDiagnostics[1])
lineNumber: 1, expect(diagnostics).toContainEqual(expectedDiagnostics[2])
startColumnNumber: 1, expect(diagnostics).toContainEqual(expectedDiagnostics[3])
endColumnNumber: 2, expect(diagnostics).toContainEqual(expectedDiagnostics[4])
severity: Severity.Warning expect(diagnostics).toContainEqual(expectedDiagnostics[5])
}) expect(diagnostics).toContainEqual(expectedDiagnostics[6])
expect(diagnostics).toContainEqual({ expect(diagnostics).toContainEqual(expectedDiagnostics[7])
message: 'Line contains trailing spaces', expect(diagnostics).toContainEqual(expectedDiagnostics[8])
lineNumber: 2,
startColumnNumber: 1,
endColumnNumber: 2,
severity: Severity.Warning
})
expect(diagnostics).toContainEqual({
message: 'File name contains spaces',
lineNumber: 1,
startColumnNumber: 1,
endColumnNumber: 1,
severity: Severity.Warning
})
expect(diagnostics).toContainEqual({
message: 'File name contains uppercase characters',
lineNumber: 1,
startColumnNumber: 1,
endColumnNumber: 1,
severity: Severity.Warning
})
expect(diagnostics).toContainEqual({
message: 'File missing Doxygen header',
lineNumber: 1,
startColumnNumber: 1,
endColumnNumber: 1,
severity: Severity.Warning
})
expect(diagnostics).toContainEqual({
message: 'Line contains encoded password',
lineNumber: 5,
startColumnNumber: 10,
endColumnNumber: 18,
severity: Severity.Error
})
expect(diagnostics).toContainEqual({
message: 'Line is indented with a tab',
lineNumber: 7,
startColumnNumber: 1,
endColumnNumber: 1,
severity: Severity.Warning
})
expect(diagnostics).toContainEqual({
message: 'Line has incorrect indentation - 3 spaces',
lineNumber: 6,
startColumnNumber: 1,
endColumnNumber: 1,
severity: Severity.Warning
})
}) })
it('should throw an error when a project root is not found', async () => { it('should throw an error when a project root is not found', async () => {

View File

@@ -2,6 +2,10 @@ import * as fileModule from '@sasjs/utils/file'
import { LintConfig } from '../types/LintConfig' import { LintConfig } from '../types/LintConfig'
import { getLintConfig } from './getLintConfig' import { getLintConfig } from './getLintConfig'
const expectedFileLintRulesCount = 4
const expectedLineLintRulesCount = 5
const expectedPathLintRulesCount = 2
describe('getLintConfig', () => { describe('getLintConfig', () => {
it('should get the lint config', async () => { it('should get the lint config', async () => {
const config = await getLintConfig() const config = await getLintConfig()
@@ -17,8 +21,8 @@ describe('getLintConfig', () => {
const config = await getLintConfig() const config = await getLintConfig()
expect(config).toBeInstanceOf(LintConfig) expect(config).toBeInstanceOf(LintConfig)
expect(config.fileLintRules.length).toEqual(3) expect(config.fileLintRules.length).toEqual(expectedFileLintRulesCount)
expect(config.lineLintRules.length).toEqual(5) expect(config.lineLintRules.length).toEqual(expectedLineLintRulesCount)
expect(config.pathLintRules.length).toEqual(2) expect(config.pathLintRules.length).toEqual(expectedPathLintRulesCount)
}) })
}) })

View File

@@ -15,7 +15,7 @@ export const DefaultLintConfiguration = {
maxLineLength: 80, maxLineLength: 80,
noTabIndentation: true, noTabIndentation: true,
indentationMultiple: 2, indentationMultiple: 2,
hasMacroNameInMend: false, hasMacroNameInMend: true,
noNestedMacros: true, noNestedMacros: true,
hasMacroParentheses: true hasMacroParentheses: true
} }