1
0
mirror of https://github.com/sasjs/lint.git synced 2025-12-10 17:34:36 +00:00

Compare commits

...

6 Commits

Author SHA1 Message Date
Allan Bowe
04cfa454f8 Merge pull request #210 from sasjs/issue-209
feat: support a user-level ~/.sasjslint
2023-04-13 11:08:32 +01:00
2cb73da0eb feat: support a user-level ~/.sasjslint 2023-04-12 23:06:08 +05:00
Allan Bowe
22cc42446c chore(docs): gremlins loc 2023-02-22 14:29:01 +00:00
Allan Bowe
0fe79273e0 chore(docs): update about pre-commit hooks 2023-02-22 14:13:46 +00:00
Allan Bowe
3d7f88aacb chore(docs): more info in noSpacesInFileNames rule 2023-02-22 12:03:31 +00:00
Allan Bowe
1677eca957 chore: typo in readme 2023-02-22 11:25:58 +00:00
5 changed files with 25 additions and 9 deletions

View File

@@ -23,7 +23,7 @@ Configuration is via a `.sasjslint` file with the following structure (these are
"hasDoxygenHeader": true,
"hasMacroNameInMend": true,
"hasMacroParentheses": true,
"ignoreList": ["sajsbuild/", "sasjsresults/"],
"ignoreList": ["sasjsbuild/", "sasjsresults/"],
"indentationMultiple": 2,
"lineEndings": "off",
"lowerCaseFileNames": true,
@@ -49,9 +49,11 @@ Each setting can have three states:
For more details, and the default state, see the description of each rule below. It is also possible to change whether a rule returns ERROR or WARN using the `severityLevels` object.
Configuring a non-zero return code (ERROR) is helpful when running `sasjs lint` as part of a git pre-commit hook. An example is available [here](https://github.com/sasjs/template_jobs/blob/main/.git-hooks/pre-commit).
### allowedGremlins
An array of hex codes that represents allowed gremlins (invisible / undesirable characters). To allow all gremlins, you can also set the `noGremlins` rule to `false`.
An array of hex codes that represents allowed gremlins (invisible / undesirable characters). To allow all gremlins, you can also set the `noGremlins` rule to `false`. The full gremlin list is [here](https://github.com/sasjs/lint/blob/main/src/utils/gremlinCharacters.ts).
Example:
@@ -228,6 +230,13 @@ In addition, when such files are used in URLs, they are often padded with a mess
- Default: true
- Severity: WARNING
As an alternative (or in addition) to using a lint rule, you can also set the following in your `.gitignore` file to prevent files with spaces from being committed:
```
# prevent files/folders with spaces
**\ **
```
### noTabs
Whilst there are some arguments for using tabs (such as the ability to set your own indentation width, and to reduce character count) there are many, many, many developers who think otherwise. We're in that camp. Sorry (not sorry).

View File

@@ -8,11 +8,12 @@ import { formatFolder } from './formatFolder'
* @returns {Promise<FormatResult>} Resolves successfully when all SAS files in the current project have been formatted.
*/
export const formatProject = async (): Promise<FormatResult> => {
const projectRoot =
(await getProjectRoot()) || process.projectDir || process.currentDir
const projectRoot = (await getProjectRoot()) || process.currentDir
if (!projectRoot) {
throw new Error('SASjs Project Root was not found.')
}
console.info(`Formatting all .sas files under ${projectRoot}`)
return await formatFolder(projectRoot)
}

View File

@@ -6,10 +6,12 @@ import { lintFolder } from './lintFolder'
* @returns {Promise<Map<string, Diagnostic[]>>} Resolves with a map with array of diagnostic objects, each containing a warning, line number and column number, and grouped by file path.
*/
export const lintProject = async () => {
const projectRoot =
(await getProjectRoot()) || process.projectDir || process.currentDir
const projectRoot = (await getProjectRoot()) || process.currentDir
if (!projectRoot) {
throw new Error('SASjs Project Root was not found.')
}
console.info(`Linting all .sas files under ${projectRoot}`)
return await lintFolder(projectRoot)
}

View File

@@ -1,4 +1,5 @@
import path from 'path'
import os from 'os'
import { LintConfig } from '../types/LintConfig'
import { readFile } from '@sasjs/utils/file'
import { getProjectRoot } from './getProjectRoot'
@@ -31,14 +32,15 @@ export const DefaultLintConfiguration = {
}
/**
* Fetches the config from the .sasjslint file and creates a LintConfig object.
* Fetches the config from the .sasjslint file (at project root or home directory) and creates a LintConfig object.
* Returns the default configuration when a .sasjslint file is unavailable.
* @returns {Promise<LintConfig>} resolves with an object representing the current lint configuration.
*/
export async function getLintConfig(): Promise<LintConfig> {
const projectRoot = await getProjectRoot()
const lintFileLocation = projectRoot || os.homedir()
const configuration = await readFile(
path.join(projectRoot, '.sasjslint')
path.join(lintFileLocation, '.sasjslint')
).catch((_) => {
return JSON.stringify(DefaultLintConfiguration)
})

View File

@@ -1,4 +1,5 @@
import path from 'path'
import os from 'os'
import { fileExists } from '@sasjs/utils/file'
/**
@@ -11,10 +12,11 @@ export async function getProjectRoot(): Promise<string> {
let rootFound = false
let i = 1
let currentLocation = process.cwd()
const homeDir = os.homedir()
const maxLevels = currentLocation.split(path.sep).length
while (i <= maxLevels && !rootFound) {
while (i <= maxLevels && !rootFound && currentLocation !== homeDir) {
const isRoot = await fileExists(path.join(currentLocation, '.sasjslint'))
if (isRoot) {