1
0
mirror of https://github.com/sasjs/lint.git synced 2026-01-11 06:20:06 +00:00

feat(lint): add rule for indentation multiple

This commit is contained in:
Krishna Acondy
2021-03-29 09:26:20 +01:00
parent 8fc3c39993
commit f1adcb8cb4
10 changed files with 188 additions and 53 deletions

View File

@@ -0,0 +1,68 @@
import { LintConfig, Severity } from '../types'
import { indentationMultiple } from './indentationMultiple'
describe('indentationMultiple', () => {
it('should return an empty array when the line is indented by two spaces', () => {
const line = " %put 'hello';"
const config = new LintConfig({ indentationMultiple: 2 })
expect(indentationMultiple.test(line, 1, config)).toEqual([])
})
it('should return an empty array when the line is indented by a multiple of 2 spaces', () => {
const line = " %put 'hello';"
const config = new LintConfig({ indentationMultiple: 2 })
expect(indentationMultiple.test(line, 1, config)).toEqual([])
})
it('should return an empty array when the line is not indented', () => {
const line = "%put 'hello';"
const config = new LintConfig({ indentationMultiple: 2 })
expect(indentationMultiple.test(line, 1, config)).toEqual([])
})
it('should return an array with a single diagnostic when the line is indented incorrectly', () => {
const line = " %put 'hello';"
const config = new LintConfig({ indentationMultiple: 2 })
expect(indentationMultiple.test(line, 1, config)).toEqual([
{
message: `Line has incorrect indentation - 3 spaces`,
lineNumber: 1,
startColumnNumber: 1,
endColumnNumber: 1,
severity: Severity.Warning
}
])
})
it('should return an array with a single diagnostic when the line is indented incorrectly', () => {
const line = " %put 'hello';"
const config = new LintConfig({ indentationMultiple: 3 })
expect(indentationMultiple.test(line, 1, config)).toEqual([
{
message: `Line has incorrect indentation - 2 spaces`,
lineNumber: 1,
startColumnNumber: 1,
endColumnNumber: 1,
severity: Severity.Warning
}
])
})
it('should fall back to a default of 2 spaces', () => {
const line = " %put 'hello';"
expect(indentationMultiple.test(line, 1)).toEqual([
{
message: `Line has incorrect indentation - 1 space`,
lineNumber: 1,
startColumnNumber: 1,
endColumnNumber: 1,
severity: Severity.Warning
}
])
})
it('should return an empty array for lines within the default indentation', () => {
const line = " %put 'hello';"
expect(indentationMultiple.test(line, 1)).toEqual([])
})
})

View File

@@ -0,0 +1,37 @@
import { LintConfig } from '../types'
import { LineLintRule } from '../types/LintRule'
import { LintRuleType } from '../types/LintRuleType'
import { Severity } from '../types/Severity'
const name = 'indentationMultiple'
const description = 'Ensure indentation by a multiple of the configured number.'
const message = 'Line has incorrect indentation'
const test = (value: string, lineNumber: number, config?: LintConfig) => {
if (!value.startsWith(' ')) return []
const indentationMultiple = config?.indentationMultiple || 2
const numberOfSpaces = value.search(/\S|$/)
if (numberOfSpaces % indentationMultiple === 0) return []
return [
{
message: `${message} - ${numberOfSpaces} ${
numberOfSpaces === 1 ? 'space' : 'spaces'
}`,
lineNumber,
startColumnNumber: 1,
endColumnNumber: 1,
severity: Severity.Warning
}
]
}
/**
* Lint rule that checks if a line is indented by a multiple of the configured indentation multiple.
*/
export const indentationMultiple: LineLintRule = {
type: LintRuleType.Line,
name,
description,
message,
test
}