mirror of
https://github.com/sasjs/lint.git
synced 2026-01-04 11:20:04 +00:00
fix: check tab indentation in whole line
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
export { indentationMultiple } from './indentationMultiple'
|
||||
export { maxLineLength } from './maxLineLength'
|
||||
export { noEncodedPasswords } from './noEncodedPasswords'
|
||||
export { noTabIndentation } from './noTabIndentation'
|
||||
export { noTabs } from './noTabs'
|
||||
export { noTrailingSpaces } from './noTrailingSpaces'
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
import { Severity } from '../../types/Severity'
|
||||
import { noTabIndentation } from './noTabIndentation'
|
||||
import { noTabs } from './noTabs'
|
||||
|
||||
describe('noTabs', () => {
|
||||
it('should return an empty array when the line is not indented with a tab', () => {
|
||||
const line = "%put 'hello';"
|
||||
expect(noTabIndentation.test(line, 1)).toEqual([])
|
||||
expect(noTabs.test(line, 1)).toEqual([])
|
||||
})
|
||||
|
||||
it('should return an array with a single diagnostic when the line is indented with a tab', () => {
|
||||
const line = "\t%put 'hello';"
|
||||
expect(noTabIndentation.test(line, 1)).toEqual([
|
||||
expect(noTabs.test(line, 1)).toEqual([
|
||||
{
|
||||
message: 'Line is indented with a tab',
|
||||
lineNumber: 1,
|
||||
@@ -2,29 +2,34 @@ import { LintConfig } from '../../types'
|
||||
import { LineLintRule } from '../../types/LintRule'
|
||||
import { LintRuleType } from '../../types/LintRuleType'
|
||||
import { Severity } from '../../types/Severity'
|
||||
import { getIndicesOf } from '../../utils'
|
||||
|
||||
const name = 'noTabs'
|
||||
const alias = 'noTabIndentation'
|
||||
const description = 'Disallow indenting with tabs.'
|
||||
const message = 'Line is indented with a tab'
|
||||
const message = 'Line contains tab indentation'
|
||||
|
||||
const test = (value: string, lineNumber: number, config?: LintConfig) => {
|
||||
const severity = config?.severityLevel[name] || Severity.Warning
|
||||
if (!value.startsWith('\t')) return []
|
||||
return [
|
||||
{
|
||||
message,
|
||||
lineNumber,
|
||||
startColumnNumber: 1,
|
||||
endColumnNumber: 1,
|
||||
severity
|
||||
}
|
||||
]
|
||||
const severity =
|
||||
config?.severityLevel[name] ||
|
||||
config?.severityLevel[alias] ||
|
||||
Severity.Warning
|
||||
|
||||
const indices = getIndicesOf('\t', value)
|
||||
|
||||
return indices.map((index) => ({
|
||||
message,
|
||||
lineNumber,
|
||||
startColumnNumber: index + 1,
|
||||
endColumnNumber: index + 2,
|
||||
severity
|
||||
}))
|
||||
}
|
||||
|
||||
/**
|
||||
* Lint rule that checks if a given line of text is indented with a tab.
|
||||
*/
|
||||
export const noTabIndentation: LineLintRule = {
|
||||
export const noTabs: LineLintRule = {
|
||||
type: LintRuleType.Line,
|
||||
name,
|
||||
description,
|
||||
@@ -10,7 +10,7 @@ import {
|
||||
indentationMultiple,
|
||||
maxLineLength,
|
||||
noEncodedPasswords,
|
||||
noTabIndentation,
|
||||
noTabs,
|
||||
noTrailingSpaces
|
||||
} from '../rules/line'
|
||||
import { lowerCaseFileNames, noSpacesInFileNames } from '../rules/path'
|
||||
@@ -60,8 +60,8 @@ export class LintConfig {
|
||||
this.lineLintRules.push(noEncodedPasswords)
|
||||
}
|
||||
|
||||
if (json?.noTabIndentation) {
|
||||
this.lineLintRules.push(noTabIndentation)
|
||||
if (json?.noTabs || json?.noTabIndentation) {
|
||||
this.lineLintRules.push(noTabs)
|
||||
}
|
||||
|
||||
if (json?.maxLineLength) {
|
||||
|
||||
26
src/utils/getIndicesOf.ts
Normal file
26
src/utils/getIndicesOf.ts
Normal file
@@ -0,0 +1,26 @@
|
||||
export const getIndicesOf = (
|
||||
searchStr: string,
|
||||
str: string,
|
||||
caseSensitive: boolean = true
|
||||
) => {
|
||||
const searchStrLen = searchStr.length
|
||||
if (searchStrLen === 0) {
|
||||
return []
|
||||
}
|
||||
|
||||
let startIndex = 0,
|
||||
index,
|
||||
indices = []
|
||||
|
||||
if (!caseSensitive) {
|
||||
str = str.toLowerCase()
|
||||
searchStr = searchStr.toLowerCase()
|
||||
}
|
||||
|
||||
while ((index = str.indexOf(searchStr, startIndex)) > -1) {
|
||||
indices.push(index)
|
||||
startIndex = index + searchStrLen
|
||||
}
|
||||
|
||||
return indices
|
||||
}
|
||||
@@ -4,3 +4,4 @@ export * from './getProjectRoot'
|
||||
export * from './isIgnored'
|
||||
export * from './listSasFiles'
|
||||
export * from './splitText'
|
||||
export * from './getIndicesOf'
|
||||
|
||||
Reference in New Issue
Block a user