{ "$schema": "http://json-schema.org/draft-07/schema#", "$id": "https://github.com/sasjs/lint/blob/main/sasjslint-schema.json", "type": "object", "title": "SASjs Lint Config File", "description": "The SASjs Lint Config file provides the settings for customising SAS code style in your project.", "default": { "noEncodedPasswords": true, "hasDoxygenHeader": true, "defaultHeader": "/**{lineEnding} @file{lineEnding} @brief {lineEnding}

SAS Macros

{lineEnding}**/", "hasMacroNameInMend": false, "hasMacroParentheses": true, "indentationMultiple": 2, "lowerCaseFileNames": true, "maxLineLength": 80, "maxHeaderLineLength": 80, "noGremlins": true, "noNestedMacros": true, "noSpacesInFileNames": true, "noTabs": true, "noTrailingSpaces": true, "lineEndings": "lf", "strictMacroDefinition": true, "ignoreList": ["sajsbuild", "sasjsresults"] }, "examples": [ { "noTrailingSpaces": true, "noEncodedPasswords": true, "hasDoxygenHeader": true, "noSpacesInFileNames": true, "lowerCaseFileNames": true, "maxLineLength": 80, "maxHeaderLineLength": 80, "noGremlins": true, "allowedGremlins": ["0x0080", "0x3000"], "noTabs": true, "indentationMultiple": 4, "hasMacroNameInMend": true, "noNestedMacros": true, "hasMacroParentheses": true, "lineEndings": "crlf", "strictMacroDefinition": true, "ignoreList": ["sajsbuild", "sasjsresults"] } ], "properties": { "noEncodedPasswords": { "$id": "#/properties/noEncodedPasswords", "type": "boolean", "title": "noEncodedPasswords", "description": "Enforces no encoded passwords such as {SAS001} or {SASENC} in lines of SAS code. Shows an error when they are present.", "default": true, "examples": [true, false] }, "hasDoxygenHeader": { "$id": "#/properties/hasDoxygenHeader", "type": "boolean", "title": "hasDoxygenHeader", "description": "Enforces the presence of a Doxygen header in the form of a comment block at the start of each SAS file. Shows a warning when one is absent.", "default": true, "examples": [true, false] }, "defaultHeader": { "$id": "#/properties/defaultHeader", "type": "string", "title": "defaultHeader", "description": "This sets the default program header - applies when a SAS program does NOT begin with `/**`.", "default": "/**{lineEnding} @file{lineEnding} @brief {lineEnding}

SAS Macros

{lineEnding}**/", "examples": [] }, "noGremlins": { "$id": "#/properties/noGremlins", "type": "boolean", "title": "noGremlins", "description": "Captures problematic characters such as zero-width whitespace and others that look valid but usually are not (such as the en dash)", "default": [true], "examples": [true, false] }, "allowedGremlins": { "$id": "#/properties/allowedGremlins", "type": "array", "items": { "type": "string", "pattern": "^0x[0-9A-Fa-f]{4}$" }, "title": "allowedGremlins", "description": "An array of hex codes that represents allowed gremlins.", "default": [], "examples": ["0x0080", "0x3000"] }, "hasMacroNameInMend": { "$id": "#/properties/hasMacroNameInMend", "type": "boolean", "title": "hasMacroNameInMend", "description": "Enforces the presence of macro names in %mend statements. Shows a warning for %mend statements with missing or mismatched macro names.", "default": false, "examples": [true, false] }, "hasMacroParentheses": { "$id": "#/properties/hasMacroParentheses", "type": "boolean", "title": "hasMacroParentheses", "description": "Enforces the presence of parentheses in macro definitions. Shows a warning for each macro defined without parentheses, or with spaces between the macro name and the opening parenthesis.", "default": true, "examples": [true, false] }, "indentationMultiple": { "$id": "#/properties/indentationMultiple", "type": "number", "title": "indentationMultiple", "description": "Enforces a configurable multiple for the number of spaces for indentation. Shows a warning for lines that are not indented by a multiple of this number.", "default": 2, "examples": [2, 3, 4] }, "lowerCaseFileNames": { "$id": "#/properties/lowerCaseFileNames", "type": "boolean", "title": "lowerCaseFileNames", "description": "Enforces no uppercase characters in file names. Shows a warning when they are present.", "default": true, "examples": [true, false] }, "maxLineLength": { "$id": "#/properties/maxLineLength", "type": "number", "title": "maxLineLength", "description": "Enforces a configurable maximum line length. Shows a warning for lines exceeding this length.", "default": 80, "examples": [60, 80, 120] }, "maxHeaderLineLength": { "$id": "#/properties/maxHeaderLineLength", "type": "number", "title": "maxLineLength", "description": "Enforces a configurable maximum line length for header section. Shows a warning for lines exceeding this length.", "default": 80, "examples": [60, 80, 120] }, "noNestedMacros": { "$id": "#/properties/noNestedMacros", "type": "boolean", "title": "noNestedMacros", "description": "Enforces the absence of nested macro definitions. Shows a warning for each nested macro definition.", "default": true, "examples": [true, false] }, "noSpacesInFileNames": { "$id": "#/properties/noSpacesInFileNames", "type": "boolean", "title": "noSpacesInFileNames", "description": "Enforces no spaces in file names. Shows a warning when they are present.", "default": true, "examples": [true, false] }, "noTabs": { "$id": "#/properties/noTabs", "type": "boolean", "title": "noTabs", "description": "Enforces no indentation using tabs. Shows a warning when a line contains a tab.", "default": true, "examples": [true, false] }, "noTrailingSpaces": { "$id": "#/properties/noTrailingSpaces", "type": "boolean", "title": "noTrailingSpaces", "description": "Enforces no trailing spaces in lines of SAS code. Shows a warning when they are present.", "default": true, "examples": [true, false] }, "lineEndings": { "$id": "#/properties/lineEndings", "type": "string", "title": "lineEndings", "description": "Enforces the configured terminating character for each line. Shows a warning when incorrect line endings are present.", "default": "lf", "examples": ["lf", "crlf"] }, "strictMacroDefinition": { "$id": "#/properties/strictMacroDefinition", "type": "boolean", "title": "strictMacroDefinition", "description": "Enforces Macro Definition syntax. Shows a warning when incorrect syntax is used.", "default": true, "examples": [true, false] }, "ignoreList": { "$id": "#/properties/ignoreList", "type": "array", "title": "ignoreList", "description": "An array of paths or path patterns to ignore when linting. Any files or matching patterns in the .gitignore file will also be ignored.", "default": ["sasjsbuild/", "sasjsresults/"], "examples": ["sasjs/tests", "tmp/scratch.sas"] }, "severityLevel": { "$id": "#/properties/severityLevel", "type": "object", "title": "severityLevel", "description": "An object which specifies the severity level of each rule.", "default": {}, "examples": [ { "hasDoxygenHeader": "warn", "maxLineLength": "warn", "noTrailingSpaces": "error" }, { "hasDoxygenHeader": "warn", "maxLineLength": "error", "noTrailingSpaces": "error" } ], "properties": { "noEncodedPasswords": { "$id": "#/properties/severityLevel/noEncodedPasswords", "title": "noEncodedPasswords", "type": "string", "enum": ["error", "warn"], "default": "error" }, "hasDoxygenHeader": { "$id": "#/properties/severityLevel/hasDoxygenHeader", "title": "hasDoxygenHeader", "type": "string", "enum": ["error", "warn"], "default": "warn" }, "noGremlins": { "$id": "#/properties/severityLevel/noGremlins", "title": "noGremlins", "type": "string", "enum": ["error", "warn"], "default": "warn" }, "hasMacroNameInMend": { "$id": "#/properties/severityLevel/hasMacroNameInMend", "title": "hasMacroNameInMend", "type": "string", "enum": ["error", "warn"], "default": "warn" }, "hasMacroParentheses": { "$id": "#/properties/severityLevel/hasMacroParentheses", "title": "hasMacroParentheses", "type": "string", "enum": ["error", "warn"], "default": "warn" }, "indentationMultiple": { "$id": "#/properties/severityLevel/indentationMultiple", "title": "indentationMultiple", "type": "string", "enum": ["error", "warn"], "default": "warn" }, "lowerCaseFileNames": { "$id": "#/properties/severityLevel/lowerCaseFileNames", "title": "lowerCaseFileNames", "type": "string", "enum": ["error", "warn"], "default": "warn" }, "maxLineLength": { "$id": "#/properties/severityLevel/maxLineLength", "title": "maxLineLength", "type": "string", "enum": ["error", "warn"], "default": "warn" }, "noNestedMacros": { "$id": "#/properties/severityLevel/noNestedMacros", "title": "noNestedMacros", "type": "string", "enum": ["error", "warn"], "default": "warn" }, "noSpacesInFileNames": { "$id": "#/properties/severityLevel/noSpacesInFileNames", "title": "noSpacesInFileNames", "type": "string", "enum": ["error", "warn"], "default": "warn" }, "noTabs": { "$id": "#/properties/severityLevel/noTabs", "title": "noTabs", "type": "string", "enum": ["error", "warn"], "default": "warn" }, "noTrailingSpaces": { "$id": "#/properties/severityLevel/noTrailingSpaces", "title": "noTrailingSpaces", "type": "string", "enum": ["error", "warn"], "default": "warn" }, "lineEndings": { "$id": "#/properties/severityLevel/lineEndings", "title": "lineEndings", "type": "string", "enum": ["error", "warn"], "default": "warn" }, "strictMacroDefinition": { "$id": "#/properties/severityLevel/strictMacroDefinition", "title": "strictMacroDefinition", "type": "string", "enum": ["error", "warn"], "default": "warn" } } } } }