From 5b2452664cd635706fe3dd439868e62911937082 Mon Sep 17 00:00:00 2001 From: Nicolas Vuillamy Date: Sat, 22 Oct 2022 12:10:13 +0200 Subject: [PATCH 1/3] [automation] Auto-update linters version, help and documentation (#1981) * [automation] Auto-update linters version, help and documentation * trvy * Downgrade devskim * trvy --- .automation/generated/flavors-stats.json | 60 + .automation/generated/linter-helps.json | 1455 +++-------------- .automation/generated/linter-versions.json | 24 +- .automation/generated/megalinter-users.json | 670 ++++---- .trivyignore | 3 + CHANGELOG.md | 12 + Dockerfile | 2 +- docs/all_linters.md | 24 +- docs/all_users.md | 2 +- docs/descriptors/arm_arm_ttk.md | 10 +- docs/descriptors/cloudformation_cfn_lint.md | 2 +- docs/descriptors/html_djlint.md | 2 +- docs/descriptors/javascript_eslint.md | 2 +- docs/descriptors/jsx_eslint.md | 2 +- docs/descriptors/powershell_powershell.md | 2 +- docs/descriptors/puppet_puppet_lint.md | 2 +- docs/descriptors/python_black.md | 6 +- docs/descriptors/python_pylint.md | 422 ++--- docs/descriptors/python_pyright.md | 2 +- docs/descriptors/repository_checkov.md | 4 +- docs/descriptors/repository_git_diff.md | 2 +- docs/descriptors/repository_semgrep.md | 2 +- docs/descriptors/ruby_rubocop.md | 3 +- .../salesforce_sfdx_scanner_apex.md | 312 +--- .../salesforce_sfdx_scanner_aura.md | 312 +--- .../salesforce_sfdx_scanner_lwc.md | 312 +--- docs/descriptors/snakemake_snakemake.md | 2 +- docs/descriptors/terraform_checkov.md | 4 +- docs/descriptors/terraform_terraform_fmt.md | 2 +- docs/descriptors/terraform_terrascan.md | 2 +- docs/descriptors/tsx_eslint.md | 2 +- docs/descriptors/typescript_eslint.md | 2 +- flavors/security/Dockerfile | 2 +- linters/repository_devskim/Dockerfile | 2 +- mega-linter-runner/.trivyignore | 1 + .../repository.megalinter-descriptor.yml | 3 +- 36 files changed, 958 insertions(+), 2715 deletions(-) diff --git a/.automation/generated/flavors-stats.json b/.automation/generated/flavors-stats.json index 238a995cf9b..87bb120f2de 100644 --- a/.automation/generated/flavors-stats.json +++ b/.automation/generated/flavors-stats.json @@ -1019,6 +1019,10 @@ [ "2022-10-18T06:25:58", 2626933 + ], + [ + "2022-10-22T01:19:20", + 2632995 ] ], "ci_light": [ @@ -2041,6 +2045,10 @@ [ "2022-10-18T06:25:58", 28838 + ], + [ + "2022-10-22T01:19:20", + 29332 ] ], "dart": [ @@ -3973,6 +3981,10 @@ [ "2022-10-18T06:25:58", 78557 + ], + [ + "2022-10-22T01:19:20", + 79779 ] ], "dotnet": [ @@ -4995,6 +5007,10 @@ [ "2022-10-18T06:25:58", 316688 + ], + [ + "2022-10-22T01:19:20", + 317452 ] ], "go": [ @@ -6017,6 +6033,10 @@ [ "2022-10-18T06:25:58", 14338 + ], + [ + "2022-10-22T01:19:20", + 14450 ] ], "java": [ @@ -7039,6 +7059,10 @@ [ "2022-10-18T06:25:58", 96074 + ], + [ + "2022-10-22T01:19:20", + 96590 ] ], "javascript": [ @@ -8061,6 +8085,10 @@ [ "2022-10-18T06:25:58", 157500 + ], + [ + "2022-10-22T01:19:20", + 158646 ] ], "php": [ @@ -9083,6 +9111,10 @@ [ "2022-10-18T06:25:58", 23473 + ], + [ + "2022-10-22T01:19:20", + 24403 ] ], "python": [ @@ -10105,6 +10137,10 @@ [ "2022-10-18T06:25:58", 112995 + ], + [ + "2022-10-22T01:19:20", + 114683 ] ], "ruby": [ @@ -11123,6 +11159,10 @@ [ "2022-10-18T06:25:58", 2661 + ], + [ + "2022-10-22T01:19:20", + 2666 ] ], "rust": [ @@ -12141,6 +12181,10 @@ [ "2022-10-18T06:25:58", 4035 + ], + [ + "2022-10-22T01:19:20", + 4073 ] ], "salesforce": [ @@ -13163,6 +13207,10 @@ [ "2022-10-18T06:25:58", 14494 + ], + [ + "2022-10-22T01:19:20", + 14617 ] ], "scala": [ @@ -14183,6 +14231,10 @@ [ "2022-10-18T06:25:58", 1341 + ], + [ + "2022-10-22T01:19:20", + 1343 ] ], "swift": [ @@ -15201,6 +15253,10 @@ [ "2022-10-18T06:25:58", 2596 + ], + [ + "2022-10-22T01:19:20", + 2627 ] ], "terraform": [ @@ -16223,6 +16279,10 @@ [ "2022-10-18T06:25:58", 122680 + ], + [ + "2022-10-22T01:19:20", + 124667 ] ] } \ No newline at end of file diff --git a/.automation/generated/linter-helps.json b/.automation/generated/linter-helps.json index a280535173b..154b6b9d85a 100644 --- a/.automation/generated/linter-helps.json +++ b/.automation/generated/linter-helps.json @@ -141,11 +141,11 @@ " --version" ], "arm-ttk": [ - "\u001b[91mTest-AzTemplate:", - "\u001b[96mLine |", - "\u001b[96m 2 | \u001b[0m $TAZ_V = (Test-AzTemplate \u001b[96m-help\u001b[0m);", - "\u001b[96m | \u001b[91m ~~~~~", - "\u001b[91m\u001b[96m | \u001b[91mA parameter cannot be found that matches parameter name 'help'.\u001b[0m" + "\u001b[31;1mTest-AzTemplate:", + "\u001b[36;1mLine |", + "\u001b[36;1m 2 | \u001b[0m $TAZ_V = (Test-AzTemplate \u001b[36;1m-help\u001b[0m);", + "\u001b[36;1m | \u001b[31;1m ~~~~~", + "\u001b[31;1m\u001b[36;1m | \u001b[31;1mA parameter cannot be found that matches parameter name 'help'.\u001b[0m" ], "bandit": [ "usage: bandit [-h] [-r] [-a {file,vuln}] [-n CONTEXT_LINES] [-c CONFIG_FILE]", @@ -461,9 +461,9 @@ " input).", " --python-cell-magics TEXT When processing Jupyter Notebooks, add the", " given magic to the list of known python-", - " magics (prun, python3, timeit, time,", - " capture, pypy, python). Useful for", - " formatting cells with custom python magics.", + " magics (timeit, capture, time, python3,", + " pypy, prun, python). Useful for formatting", + " cells with custom python magics.", " -x, --skip-source-first-line Skip the first line of the source code.", " -S, --skip-string-normalization", " Don't normalize string quotes or prefixes.", @@ -642,7 +642,7 @@ " [--secrets-scan-file-type SECRETS_SCAN_FILE_TYPE]", " [--enable-secret-scan-all-files]", " [--block-list-secret-scan BLOCK_LIST_SECRET_SCAN]", - " [--summary-position {bottom,top}]", + " [--summary-position {top,bottom}]", " [--skip-resources-without-violations]", "", "Infrastructure as code static analysis", @@ -893,7 +893,7 @@ " --block-list-secret-scan BLOCK_LIST_SECRET_SCAN", " List of files to filter out from the secret scanner", " [env var: CKV_SECRETS_SCAN_BLOCK_LIST]", - " --summary-position {bottom,top}", + " --summary-position {top,bottom}", " Chose whether the summary will be appended on top", " (before the checks results) or on bottom (after check", " results), default is on top.", @@ -4594,65 +4594,6 @@ " Warning level messages displayed, use \"--disable=all", " --enable=classes --disable=W\".", "", - "Spelling:", - " Check spelling in comments and docstrings.", - "", - " --spelling-dict ", - " Spelling dictionary name. Available dictionaries:", - " none. To make it work, install the 'python-enchant'", - " package. (default: )", - " --spelling-ignore-words ", - " List of comma separated words that should not be", - " checked. (default: )", - " --spelling-private-dict-file ", - " A path to a file that contains the private dictionary;", - " one word per line. (default: )", - " --spelling-store-unknown-words ", - " Tells whether to store unknown words to the private", - " dictionary (see the --spelling-private-dict-file", - " option) instead of raising a message. (default: n)", - " --max-spelling-suggestions N", - " Limits count of emitted suggestions for spelling", - " mistakes. (default: 4)", - " --spelling-ignore-comment-directives ", - " List of comma separated words that should be", - " considered directives if they appear at the beginning", - " of a comment and should not be checked. (default: fmt:", - " on,fmt: off,noqa:,noqa,nosec,isort:skip,mypy:)", - "", - "Classes:", - " Checker for class nodes.", - "", - " --defining-attr-methods ", - " List of method names used to declare (i.e. assign)", - " instance attributes. (default: ('__init__', '__new__',", - " 'setUp', '__post_init__'))", - " --valid-classmethod-first-arg ", - " List of valid names for the first argument in a class", - " method. (default: ('cls',))", - " --valid-metaclass-classmethod-first-arg ", - " List of valid names for the first argument in a", - " metaclass class method. (default: ('cls',))", - " --exclude-protected ", - " List of member names, which should be excluded from", - " the protected access warning. (default: ('_asdict',", - " '_fields', '_replace', '_source', '_make'))", - " --check-protected-access-in-special-methods ", - " Warn about protected attribute access inside special", - " methods (default: False)", - "", - "Logging:", - " Checks use of the logging module.", - "", - " --logging-modules ", - " Logging modules to check that the string format", - " arguments are in logging function parameter format.", - " (default: ('logging',))", - " --logging-format-style ", - " The type of string formatting that logging methods do.", - " `old` means using % formatting, `new` is for `{}`", - " formatting. (default: old)", - "", "Basic:", " --good-names Good variable names which should always be accepted,", " separated by a comma. (default: ('i', 'j', 'k', 'ex',", @@ -4778,119 +4719,6 @@ " Minimum line length for functions/classes that require", " docstrings, shorter ones are exempt. (default: -1)", "", - "Miscellaneous:", - " BaseChecker for encoding issues.", - "", - " --notes ", - " List of note tags to take in consideration, separated", - " by a comma. (default: ('FIXME', 'XXX', 'TODO'))", - " --notes-rgx Regular expression of note tags to take in", - " consideration. (default: )", - "", - "Format:", - " Formatting checker.", - "", - " --max-line-length ", - " Maximum number of characters on a single line.", - " (default: 100)", - " --ignore-long-lines ", - " Regexp for a line that is allowed to be longer than", - " the limit. (default: ^\\s*(# )??$)", - " --single-line-if-stmt ", - " Allow the body of an if to be on the same line as the", - " test if there is no else. (default: False)", - " --single-line-class-stmt ", - " Allow the body of a class to be on the same line as", - " the declaration if body contains single statement.", - " (default: False)", - " --max-module-lines ", - " Maximum number of lines in a module. (default: 1000)", - " --indent-string ", - " String used as indentation unit. This is usually \" \"", - " (4 spaces) or \" \" (1 tab). (default: )", - " --indent-after-paren ", - " Number of spaces of indent required inside a hanging", - " or continued line. (default: 4)", - " --expected-line-ending-format ", - " Expected format of line ending, e.g. empty (any line", - " ending), LF or CRLF. (default: )", - "", - "Method_args:", - " BaseChecker for method_args.", - "", - " --timeout-methods ", - " List of qualified names (i.e., library.method) which", - " require a timeout parameter e.g.", - " 'requests.api.get,requests.api.post' (default:", - " ('requests.api.delete', 'requests.api.get',", - " 'requests.api.head', 'requests.api.options',", - " 'requests.api.patch', 'requests.api.post',", - " 'requests.api.put', 'requests.api.request'))", - "", - "Refactoring:", - " Looks for code which can be refactored.", - "", - " --max-nested-blocks ", - " Maximum number of nested blocks for function / method", - " body (default: 5)", - " --never-returning-functions ", - " Complete name of functions that never returns. When", - " checking for inconsistent-return-statements if a never", - " returning function is called then it will be", - " considered as an explicit return statement and no", - " message will be printed. (default: ('sys.exit',", - " 'argparse.parse_error'))", - "", - "String:", - " Check string literals.", - "", - " --check-str-concat-over-line-jumps ", - " This flag controls whether the implicit-str-concat", - " should generate a warning on implicit string", - " concatenation in sequences defined over several lines.", - " (default: False)", - " --check-quote-consistency ", - " This flag controls whether inconsistent-quotes", - " generates a warning when the character used as a quote", - " delimiter is used inconsistently within a module.", - " (default: False)", - "", - "Design:", - " Checker of potential misdesigns.", - "", - " --max-args Maximum number of arguments for function / method.", - " (default: 5)", - " --max-locals Maximum number of locals for function / method body.", - " (default: 15)", - " --max-returns Maximum number of return / yield for function / method", - " body. (default: 6)", - " --max-branches Maximum number of branch for function / method body.", - " (default: 12)", - " --max-statements ", - " Maximum number of statements in function / method", - " body. (default: 50)", - " --max-parents Maximum number of parents for a class (see R0901).", - " (default: 7)", - " --ignored-parents ", - " List of qualified class names to ignore when counting", - " class parents (see R0901) (default: ())", - " --max-attributes ", - " Maximum number of attributes for a class (see R0902).", - " (default: 7)", - " --min-public-methods ", - " Minimum number of public methods for a class (see", - " R0903). (default: 2)", - " --max-public-methods ", - " Maximum number of public methods for a class (see", - " R0904). (default: 20)", - " --max-bool-expr ", - " Maximum number of boolean expressions in an if", - " statement (see R0916). (default: 5)", - " --exclude-too-few-public-methods [,...]", - " List of regular expressions of class ancestor names to", - " ignore when counting public methods (see R0903)", - " (default: [])", - "", "Typecheck:", " Try to find bugs in the code using type inference.", "", @@ -4953,45 +4781,17 @@ " List of decorators that change the signature of a", " decorated function. (default: [])", "", - "Exceptions:", - " Exception related checks.", - "", - " --overgeneral-exceptions ", - " Exceptions that will emit a warning when caught.", - " (default: ('BaseException', 'Exception'))", - "", - "Variables:", - " BaseChecker for variables.", + "Logging:", + " Checks use of the logging module.", "", - " --init-import ", - " Tells whether we should check for unused import in", - " __init__ files. (default: False)", - " --dummy-variables-rgx ", - " A regular expression matching the name of dummy", - " variables (i.e. expected to not be used). (default: _+", - " $|(_[a-zA-Z0-9_]*[a-zA-Z0-", - " 9]+?$)|dummy|^ignored_|^unused_)", - " --additional-builtins ", - " List of additional names supposed to be defined in", - " builtins. Remember that you should avoid defining new", - " builtins when possible. (default: ())", - " --callbacks ", - " List of strings which can identify a callback function", - " by name. A callback name must start or end with one of", - " those strings. (default: ('cb_', '_cb'))", - " --redefining-builtins-modules ", - " List of qualified module names which can have objects", - " that can redefine builtins. (default: ('six.moves',", - " 'past.builtins', 'future.builtins', 'builtins', 'io'))", - " --ignored-argument-names ", - " Argument names that match this expression will be", - " ignored. (default:", - " re.compile('_.*|^ignored_|^unused_'))", - " --allow-global-unused-variables ", - " Tells whether unused global variables should be", - " treated as a violation. (default: True)", - " --allowed-redefined-builtins ", - " List of names allowed to shadow builtins (default: ())", + " --logging-modules ", + " Logging modules to check that the string format", + " arguments are in logging function parameter format.", + " (default: ('logging',))", + " --logging-format-style ", + " The type of string formatting that logging methods do.", + " `old` means using % formatting, `new` is for `{}`", + " formatting. (default: old)", "", "Imports:", " BaseChecker for import statements.", @@ -5028,47 +4828,247 @@ " Allow wildcard imports from modules that define", " __all__. (default: False)", "", - "Similarities:", - " Checks for similarities and duplicated code.", + "Variables:", + " BaseChecker for variables.", "", - " --min-similarity-lines ", - " Minimum lines number of a similarity. (default: 4)", - " --ignore-comments ", - " Comments are removed from the similarity computation", - " (default: True)", - " --ignore-docstrings ", - " Docstrings are removed from the similarity computation", - " (default: True)", - " --ignore-imports ", - " Imports are removed from the similarity computation", - " (default: True)", - " --ignore-signatures ", - " Signatures are removed from the similarity computation", - " (default: True)" - ], - "pyright": [ - "Usage: pyright [options] files...", - " Options:", - " --createstub Create type stub file(s) for import", - " --dependencies Emit import dependency information", - " -h,--help Show this help message", - " --ignoreexternal Ignore external imports for --verifytypes", - " --lib Use library code to infer types when stubs are missing", - " --outputjson Output results in JSON format", - " -p,--project Use the configuration file at this location", - " --pythonplatform Analyze for a specific platform (Darwin, Linux, Windows)", - " --pythonversion Analyze for a specific version (3.3, 3.4, etc.)", - " --skipunannotated Skip analysis of functions with no type annotations", - " --stats Print detailed performance stats", - " -t,--typeshed-path Use typeshed type stubs at this location", - " -v,--venv-path Directory that contains virtual environments", - " --verbose Emit verbose diagnostics", - " --verifytypes Verify type completeness of a py.typed package", - " --version Print Pyright version", + " --init-import ", + " Tells whether we should check for unused import in", + " __init__ files. (default: False)", + " --dummy-variables-rgx ", + " A regular expression matching the name of dummy", + " variables (i.e. expected to not be used). (default: _+", + " $|(_[a-zA-Z0-9_]*[a-zA-Z0-", + " 9]+?$)|dummy|^ignored_|^unused_)", + " --additional-builtins ", + " List of additional names supposed to be defined in", + " builtins. Remember that you should avoid defining new", + " builtins when possible. (default: ())", + " --callbacks ", + " List of strings which can identify a callback function", + " by name. A callback name must start or end with one of", + " those strings. (default: ('cb_', '_cb'))", + " --redefining-builtins-modules ", + " List of qualified module names which can have objects", + " that can redefine builtins. (default: ('six.moves',", + " 'past.builtins', 'future.builtins', 'builtins', 'io'))", + " --ignored-argument-names ", + " Argument names that match this expression will be", + " ignored. (default:", + " re.compile('_.*|^ignored_|^unused_'))", + " --allow-global-unused-variables ", + " Tells whether unused global variables should be", + " treated as a violation. (default: True)", + " --allowed-redefined-builtins ", + " List of names allowed to shadow builtins (default: ())", + "", + "Design:", + " Checker of potential misdesigns.", + "", + " --max-args Maximum number of arguments for function / method.", + " (default: 5)", + " --max-locals Maximum number of locals for function / method body.", + " (default: 15)", + " --max-returns Maximum number of return / yield for function / method", + " body. (default: 6)", + " --max-branches Maximum number of branch for function / method body.", + " (default: 12)", + " --max-statements ", + " Maximum number of statements in function / method", + " body. (default: 50)", + " --max-parents Maximum number of parents for a class (see R0901).", + " (default: 7)", + " --ignored-parents ", + " List of qualified class names to ignore when counting", + " class parents (see R0901) (default: ())", + " --max-attributes ", + " Maximum number of attributes for a class (see R0902).", + " (default: 7)", + " --min-public-methods ", + " Minimum number of public methods for a class (see", + " R0903). (default: 2)", + " --max-public-methods ", + " Maximum number of public methods for a class (see", + " R0904). (default: 20)", + " --max-bool-expr ", + " Maximum number of boolean expressions in an if", + " statement (see R0916). (default: 5)", + " --exclude-too-few-public-methods [,...]", + " List of regular expressions of class ancestor names to", + " ignore when counting public methods (see R0903)", + " (default: [])", + "", + "Format:", + " Formatting checker.", + "", + " --max-line-length ", + " Maximum number of characters on a single line.", + " (default: 100)", + " --ignore-long-lines ", + " Regexp for a line that is allowed to be longer than", + " the limit. (default: ^\\s*(# )??$)", + " --single-line-if-stmt ", + " Allow the body of an if to be on the same line as the", + " test if there is no else. (default: False)", + " --single-line-class-stmt ", + " Allow the body of a class to be on the same line as", + " the declaration if body contains single statement.", + " (default: False)", + " --max-module-lines ", + " Maximum number of lines in a module. (default: 1000)", + " --indent-string ", + " String used as indentation unit. This is usually \" \"", + " (4 spaces) or \" \" (1 tab). (default: )", + " --indent-after-paren ", + " Number of spaces of indent required inside a hanging", + " or continued line. (default: 4)", + " --expected-line-ending-format ", + " Expected format of line ending, e.g. empty (any line", + " ending), LF or CRLF. (default: )", + "", + "Refactoring:", + " Looks for code which can be refactored.", + "", + " --max-nested-blocks ", + " Maximum number of nested blocks for function / method", + " body (default: 5)", + " --never-returning-functions ", + " Complete name of functions that never returns. When", + " checking for inconsistent-return-statements if a never", + " returning function is called then it will be", + " considered as an explicit return statement and no", + " message will be printed. (default: ('sys.exit',", + " 'argparse.parse_error'))", + "", + "String:", + " Check string literals.", + "", + " --check-str-concat-over-line-jumps ", + " This flag controls whether the implicit-str-concat", + " should generate a warning on implicit string", + " concatenation in sequences defined over several lines.", + " (default: False)", + " --check-quote-consistency ", + " This flag controls whether inconsistent-quotes", + " generates a warning when the character used as a quote", + " delimiter is used inconsistently within a module.", + " (default: False)", + "", + "Method_args:", + " BaseChecker for method_args.", + "", + " --timeout-methods ", + " List of qualified names (i.e., library.method) which", + " require a timeout parameter e.g.", + " 'requests.api.get,requests.api.post' (default:", + " ('requests.api.delete', 'requests.api.get',", + " 'requests.api.head', 'requests.api.options',", + " 'requests.api.patch', 'requests.api.post',", + " 'requests.api.put', 'requests.api.request'))", + "", + "Exceptions:", + " Exception related checks.", + "", + " --overgeneral-exceptions ", + " Exceptions that will emit a warning when caught.", + " (default: ('BaseException', 'Exception'))", + "", + "Spelling:", + " Check spelling in comments and docstrings.", + "", + " --spelling-dict ", + " Spelling dictionary name. Available dictionaries:", + " none. To make it work, install the 'python-enchant'", + " package. (default: )", + " --spelling-ignore-words ", + " List of comma separated words that should not be", + " checked. (default: )", + " --spelling-private-dict-file ", + " A path to a file that contains the private dictionary;", + " one word per line. (default: )", + " --spelling-store-unknown-words ", + " Tells whether to store unknown words to the private", + " dictionary (see the --spelling-private-dict-file", + " option) instead of raising a message. (default: n)", + " --max-spelling-suggestions N", + " Limits count of emitted suggestions for spelling", + " mistakes. (default: 4)", + " --spelling-ignore-comment-directives ", + " List of comma separated words that should be", + " considered directives if they appear at the beginning", + " of a comment and should not be checked. (default: fmt:", + " on,fmt: off,noqa:,noqa,nosec,isort:skip,mypy:)", + "", + "Classes:", + " Checker for class nodes.", + "", + " --defining-attr-methods ", + " List of method names used to declare (i.e. assign)", + " instance attributes. (default: ('__init__', '__new__',", + " 'setUp', '__post_init__'))", + " --valid-classmethod-first-arg ", + " List of valid names for the first argument in a class", + " method. (default: ('cls',))", + " --valid-metaclass-classmethod-first-arg ", + " List of valid names for the first argument in a", + " metaclass class method. (default: ('cls',))", + " --exclude-protected ", + " List of member names, which should be excluded from", + " the protected access warning. (default: ('_asdict',", + " '_fields', '_replace', '_source', '_make'))", + " --check-protected-access-in-special-methods ", + " Warn about protected attribute access inside special", + " methods (default: False)", + "", + "Similarities:", + " Checks for similarities and duplicated code.", + "", + " --min-similarity-lines ", + " Minimum lines number of a similarity. (default: 4)", + " --ignore-comments ", + " Comments are removed from the similarity computation", + " (default: True)", + " --ignore-docstrings ", + " Docstrings are removed from the similarity computation", + " (default: True)", + " --ignore-imports ", + " Imports are removed from the similarity computation", + " (default: True)", + " --ignore-signatures ", + " Signatures are removed from the similarity computation", + " (default: True)", + "", + "Miscellaneous:", + " BaseChecker for encoding issues.", + "", + " --notes ", + " List of note tags to take in consideration, separated", + " by a comma. (default: ('FIXME', 'XXX', 'TODO'))", + " --notes-rgx Regular expression of note tags to take in", + " consideration. (default: )" + ], + "pyright": [ + "Usage: pyright [options] files...", + " Options:", + " --createstub Create type stub file(s) for import", + " --dependencies Emit import dependency information", + " -h,--help Show this help message", + " --ignoreexternal Ignore external imports for --verifytypes", + " --lib Use library code to infer types when stubs are missing", + " --outputjson Output results in JSON format", + " -p,--project Use the configuration file at this location", + " --pythonplatform Analyze for a specific platform (Darwin, Linux, Windows)", + " --pythonversion Analyze for a specific version (3.3, 3.4, etc.)", + " --skipunannotated Skip analysis of functions with no type annotations", + " --stats Print detailed performance stats", + " -t,--typeshed-path Use typeshed type stubs at this location", + " -v,--venv-path Directory that contains virtual environments", + " --verbose Emit verbose diagnostics", + " --verifytypes Verify type completeness of a py.typed package", + " --version Print Pyright version", " --warnings Use exit code of 1 if warnings are reported", " -w,--watch Continue to run and watch for changes", "", - "WARNING: there is a new pyright version available (v1.1.270 -> v1.1.275).", + "WARNING: there is a new pyright version available (v1.1.270 -> v1.1.276).", "Please install the new version or set PYRIGHT_PYTHON_FORCE_VERSION to `latest`", "" ], @@ -5452,6 +5452,7 @@ " --exclude-limit COUNT Set the limit for how many files to explicitly exclude.", " If there are more files than the limit, the cop will", " be disabled instead. Default is 15.", + " --no-exclude-limit Do not set the limit for how many files to exclude.", " --[no-]offense-counts Include offense counts in configuration", " file generated by --auto-gen-config.", " Default is true.", @@ -6005,937 +6006,19 @@ "@typescript-eslint/unbound-method typescript Best Practices Best Practices eslint-typescript" ], "sfdx-scanner-apex": [ - "evaluate a selection of rules against a codebase", - "", - "USAGE", - " $ sfdx scanner:run -t [-c ] [-r ] [-e ]", - " [-f csv|html|json|junit|sarif|table|xml] [-o ] [--tsconfig ]", - " [--eslintconfig ] [--pmdconfig ] [--env ] [-s", - " | undefined | [-v | --json]] [--normalize-severity] [--verbose]", - " [--loglevel", - " trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL]", - "", - "FLAGS", - " -c, --category=", - " categor(ies) of rules to run", - "", - " -e, --engine=", - " engine(s) to run", - "", - " -f, --format=(csv|html|json|junit|sarif|table|xml)", - " format of results", - "", - " -o, --outfile=", - " location of output file", - "", - " -r, --ruleset=", - " [deprecated] ruleset(s) of rules to run", - "", - " -s, --severity-threshold=", - " throws an error when violations of specific severity (or more severe) are", - " detected, invokes --normalize-severity", - "", - " -t, --target=", - " (required) location of source code", - "", - " -v, --violations-cause-error", - " [deprecated] throws an error when violations are detected", - "", - " --env=", - " JSON-formatted string, overrides ESLint's default environment variables", - "", - " --eslintconfig=", - " location of eslintrc config to customize eslint engine", - "", - " --json", - " format output as json", - "", - " --loglevel=(trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATA", - " L)", - " [default: warn] logging level for this command invocation", - "", - " --normalize-severity", - " A normalized severity 1 (high), 2 (moderate), and 3 (low) is returned in", - " addition to the engine specific severity", - "", - " --pmdconfig=", - " location of PMD rule reference XML file to customize rule selection", - "", - " --tsconfig=", - " location of tsconfig.json file", - "", - " --verbose", - " emit additional command output to stdout", - "", - "DESCRIPTION", - " evaluate a selection of rules against a codebase", - "", - "EXAMPLES", - " Invoking without specifying any rules causes all rules to be run.", - " E.g., $ sfdx scanner:run --format xml --target \"somefile.js\"", - " Evaluates all rules against somefile.js.", - " Specifying multiple categories is treated as a logical OR.", - " E.g., $ sfdx scanner:run --format xml --target \"somefile.js\" --category \"Design,Best Practices\"", - " Evaluates all rules in the Design or Best Practices categories.", - " Categories can be excluded by specifying the negation operator, the values must be enclosed in single quotes.", - " E.g., $ sfdx scanner:run --format xml --target \"somefile.js\" --category '!Design,!Best Practices'", - " Evaluates all rules except those in the Design or Best Practices categories.", - " Wrap globs in quotes.", - " Unix example: $ sfdx scanner:run --target './**/*.js,!./**/IgnoreMe.js' ...", - " Windows example: > sfdx scanner:run --target \".\\**\\*.js,!.\\**\\IgnoreMe.js\" ...", - " Evaluate rules against all .js files below the current directory, except for IgnoreMe.js.", - " Specify tsconfig.json if the current working directory does not contain the tsconfig.json that corresponds to the TypeScript files being scanned.", - " E.g., sfdx scanner:run --target \"/my-project/**/*.ts\" --tsconfig \"/my-project/tsconfig.json\"", - " Scans the project contained in '/my-project' if the current working directory is another directory.", - " Use --env to override the default ESLint environment variables to add frameworks.", - " E.g., $ sfdx scanner:run --target \"somefile.js\" --env '{\"jasmine\": true}'", - " Evaluates rules against somefile.js, including Jasmine in the environment variables.", - " Use --violations-cause-error to throw exit with a non-zero code when violations are found.", - " E.g., $ sfdx scanner:run --target \"somefile.js\" --violations-cause-error", - " Evaluates rules against somefile.js. If any rules are violated, the exit code will be the severity of the most severe violation.", - " Use --engine to include or exclude engines. Any engine listed will be run, regardless of its current 'disabled' attribute.", - " E.g., $ sfdx scanner:run --target \"somefile.js\" --engine \"eslint-lwc,pmd\"", - " Evaluates rules against somefile.js, using eslint-lwc and pmd engines.", - " Use --engine to invoke engines that are not enabled by default.", - " E.g, $ sfdx scanner:run --target \"/some/dir\" --engine cpd", - " Executes CPD engine against known file extensions in \"/some/dir\". CPD helps detect blocks of code duplication in selected languages.", - " To use PMD with your own rule reference file, use --pmdconfig. Note that rule filters are not applied.", - " E.g, $ sfdx scanner:run --target \"src\" --pmdconfig \"pmd_rule_ref.xml\"", - " To use Eslint with your own .eslintrc.json file, use --eslintconfig. Make sure that the directory you run the command from has all the NPM dependencies installed.", - " E.g., $ sfdx scanner:run --target \"src\" --eslintconfig \"/home/my/setup/.eslintrc.json\"", - " Use --normalize-severity to output a normalized (across all engines) severity (1 [high], 2 [moderate], and 3 [low]) in addition to the engine specific severity (when shown).", - " E.g., $ sfdx scanner:run --target \"/some-project/\" --format csv --normalize-severity", - " Use --severity-threshold to throw a non-zero exit code when rule violations of a specific severity (or greater) are found. For this example, if there are any rule violations with a severity of 2 or more (which includes 1-high and 2-moderate), the exit code will be equal to the severity of the most severe violation.", - " E.g., $ sfdx scanner:run --target \"/some-project/\" --severity-threshold 2", - "", - "", - "WARNING: We're constantly improving Salesforce Code Analyzer. Tell us what you think! Give feedback at https://research.net/r/SalesforceCA.", - "WARNING: v2.x's End Of Life is approaching.", - " In October 2022, v3.x of the Salesforce Code Analyzer will become the default version,", - " and older versions, including your currently installed version, will no longer be supported.", - " You can manually update to v3.x earlier for a smoother transition.", - "WARNING: As of April 27, 2022, v3.x of the Salesforce Code Analyzer is available as an open pilot.", - " To update to v3.x and try out our pilot features, run these commands:", - " > sfdx plugins:uninstall @salesforce/sfdx-scanner", - " > sfdx plugins:install @salesforce/sfdx-scanner@latest-pilot", - "NAME LANGUAGES CATEGORIES RULESETS [DEP] ENGINE", - "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500", - "VfCsrf visualforce Security Basic VF pmd", - "VfHtmlStyleTagXss visualforce Security pmd", - "VfUnescapeEl visualforce Security Basic VF pmd", - "ApexAssertionsShouldIncludeMessage apex Best Practices pmd", - "ApexUnitTestClassShouldHaveAsserts apex Best Practices quickstart,Default ruleset...,ApexUnit pmd", - "ApexUnitTestMethodShouldHaveIsTestAnnotation apex Best Practices pmd", - "ApexUnitTestShouldNotUseSeeAllDataTrue apex Best Practices quickstart,Default ruleset...,ApexUnit pmd", - "AvoidGlobalModifier apex Best Practices Style,quickstart,Default ruleset... pmd", - "AvoidLogicInTrigger apex Best Practices Style,quickstart,Default ruleset... pmd", - "DebugsShouldUseLoggingLevel apex Best Practices quickstart pmd", - "UnusedLocalVariable apex Best Practices pmd", - "AvoidDebugStatements apex Performance pmd", - "AvoidDmlStatementsInLoops apex Performance Default ruleset...,Performance pmd", - "AvoidSoqlInLoops apex Performance Default ruleset...,Performance pmd", - "AvoidSoslInLoops apex Performance Default ruleset...,Performance pmd", - "EagerlyLoadedDescribeSObjectResult apex Performance pmd", - "OperationWithLimitsInLoop apex Performance quickstart pmd", - "ApexBadCrypto apex Security Security,quickstart,Default ruleset... pmd", - "ApexCRUDViolation apex Security Security,quickstart,Default ruleset... pmd", - "ApexCSRF apex Security Security pmd", - "ApexDangerousMethods apex Security Security,quickstart,Default ruleset... pmd", - "ApexInsecureEndpoint apex Security Security,quickstart,Default ruleset... pmd", - "ApexOpenRedirect apex Security Security,quickstart,Default ruleset... pmd", - "ApexSharingViolations apex Security Security,quickstart,Default ruleset... pmd", - "ApexSOQLInjection apex Security Security,quickstart,Default ruleset... pmd", - "ApexSuggestUsingNamedCred apex Security Security,quickstart,Default ruleset... pmd", - "ApexXSSFromEscapeFalse apex Security Security,quickstart,Default ruleset... pmd", - "ApexXSSFromURLParam apex Security Security,quickstart,Default ruleset... pmd", - "ClassNamingConventions apex Code Style Style,quickstart,Default ruleset... pmd", - "IfElseStmtsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd", - "IfStmtsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd", - "FieldDeclarationsShouldBeAtStart apex Code Style pmd", - "FieldNamingConventions apex Code Style quickstart pmd", - "ForLoopsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd", - "FormalParameterNamingConventions apex Code Style quickstart pmd", - "LocalVariableNamingConventions apex Code Style quickstart pmd", - "MethodNamingConventions apex Code Style Style,quickstart,Default ruleset... pmd", - "OneDeclarationPerLine apex Code Style quickstart,Default ruleset... pmd", - "PropertyNamingConventions apex Code Style quickstart pmd", - "VariableNamingConventions apex Code Style Style,Default ruleset... pmd", - "WhileLoopsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd", - "AvoidDeeplyNestedIfStmts apex Design quickstart,Default ruleset...,Complexity pmd", - "CyclomaticComplexity apex Design Metrics tempora...,quickstart,Default ruleset... pmd", - "CognitiveComplexity apex Design pmd", - "ExcessiveClassLength apex Design quickstart,Default ruleset...,Complexity pmd", - "ExcessiveParameterList apex Design quickstart,Default ruleset...,Complexity pmd", - "ExcessivePublicCount apex Design quickstart,Default ruleset...,Complexity pmd", - "NcssConstructorCount apex Design quickstart,Default ruleset...,Complexity pmd", - "NcssMethodCount apex Design quickstart,Default ruleset...,Complexity pmd", - "NcssTypeCount apex Design quickstart,Default ruleset...,Complexity pmd", - "StdCyclomaticComplexity apex Design quickstart,Default ruleset...,Complexity pmd", - "TooManyFields apex Design quickstart,Default ruleset...,Complexity pmd", - "ApexDoc apex Documentation quickstart,Default ruleset... pmd", - "ApexCSRF apex Error Prone quickstart,Default ruleset... pmd", - "AvoidDirectAccessTriggerMap apex Error Prone Style,quickstart,Default ruleset... pmd", - "AvoidHardcodingId apex Error Prone Style,quickstart,Default ruleset... pmd", - "AvoidNonExistentAnnotations apex Error Prone quickstart,Default ruleset... pmd", - "EmptyCatchBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd", - "EmptyIfStmt apex Error Prone quickstart,Default ruleset...,Empty Code pmd", - "EmptyStatementBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd", - "EmptyTryOrFinallyBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd", - "EmptyWhileStmt apex Error Prone quickstart,Default ruleset...,Empty Code pmd", - "InaccessibleAuraEnabledGetter apex Error Prone pmd", - "MethodWithSameNameAsEnclosingClass apex Error Prone Style,quickstart,Default ruleset... pmd", - "OverrideBothEqualsAndHashcode apex Error Prone pmd", - "TestMethodsMustBeInTestClasses apex Error Prone pmd", - "constructor-super javascript ECMAScript 6 ECMAScript 6 eslint", - "for-direction javascript Possible Errors Possible Errors eslint", - "getter-return javascript Possible Errors Possible Errors eslint", - "no-async-promise-executor javascript Possible Errors Possible Errors eslint", - "no-case-declarations javascript Best Practices Best Practices eslint", - "no-class-assign javascript ECMAScript 6 ECMAScript 6 eslint", - "no-compare-neg-zero javascript Possible Errors Possible Errors eslint", - "no-cond-assign javascript Possible Errors Possible Errors eslint", - "no-const-assign javascript ECMAScript 6 ECMAScript 6 eslint", - "no-constant-condition javascript Possible Errors Possible Errors eslint", - "no-control-regex javascript Possible Errors Possible Errors eslint", - "no-debugger javascript Possible Errors Possible Errors eslint", - "no-delete-var javascript Variables Variables eslint", - "no-dupe-args javascript Possible Errors Possible Errors eslint", - "no-dupe-class-members javascript ECMAScript 6 ECMAScript 6 eslint", - "no-dupe-keys javascript Possible Errors Possible Errors eslint", - "no-duplicate-case javascript Possible Errors Possible Errors eslint", - "no-empty javascript Possible Errors Possible Errors eslint", - "no-empty-character-class javascript Possible Errors Possible Errors eslint", - "no-empty-pattern javascript Best Practices Best Practices eslint", - "no-ex-assign javascript Possible Errors Possible Errors eslint", - "no-extra-boolean-cast javascript Possible Errors Possible Errors eslint", - "no-extra-semi javascript Possible Errors Possible Errors eslint", - "no-fallthrough javascript Best Practices Best Practices eslint", - "no-func-assign javascript Possible Errors Possible Errors eslint", - "no-global-assign javascript Best Practices Best Practices eslint", - "no-inner-declarations javascript Possible Errors Possible Errors eslint", - "no-invalid-regexp javascript Possible Errors Possible Errors eslint", - "no-irregular-whitespace javascript Possible Errors Possible Errors eslint", - "no-misleading-character-class javascript Possible Errors Possible Errors eslint", - "no-mixed-spaces-and-tabs javascript Stylistic Issues Stylistic Issues eslint", - "no-new-symbol javascript ECMAScript 6 ECMAScript 6 eslint", - "no-obj-calls javascript Possible Errors Possible Errors eslint", - "no-octal javascript Best Practices Best Practices eslint", - "no-prototype-builtins javascript Possible Errors Possible Errors eslint", - "no-redeclare javascript Best Practices Best Practices eslint", - "no-regex-spaces javascript Possible Errors Possible Errors eslint", - "no-self-assign javascript Best Practices Best Practices eslint", - "no-shadow-restricted-names javascript Variables Variables eslint", - "no-sparse-arrays javascript Possible Errors Possible Errors eslint", - "no-this-before-super javascript ECMAScript 6 ECMAScript 6 eslint", - "no-undef javascript Variables Variables eslint", - "no-unexpected-multiline javascript Possible Errors Possible Errors eslint", - "no-unreachable javascript Possible Errors Possible Errors eslint", - "no-unsafe-finally javascript Possible Errors Possible Errors eslint", - "no-unsafe-negation javascript Possible Errors Possible Errors eslint", - "no-unused-labels javascript Best Practices Best Practices eslint", - "no-unused-vars javascript Variables Variables eslint", - "no-useless-catch javascript Best Practices Best Practices eslint", - "no-useless-escape javascript Best Practices Best Practices eslint", - "no-with javascript Best Practices Best Practices eslint", - "require-yield javascript ECMAScript 6 ECMAScript 6 eslint", - "use-isnan javascript Possible Errors Possible Errors eslint", - "valid-typeof javascript Possible Errors Possible Errors eslint", - "constructor-super typescript ECMAScript 6 ECMAScript 6 eslint-typescript", - "for-direction typescript Possible Errors Possible Errors eslint-typescript", - "no-async-promise-executor typescript Possible Errors Possible Errors eslint-typescript", - "no-case-declarations typescript Best Practices Best Practices eslint-typescript", - "no-class-assign typescript ECMAScript 6 ECMAScript 6 eslint-typescript", - "no-compare-neg-zero typescript Possible Errors Possible Errors eslint-typescript", - "no-cond-assign typescript Possible Errors Possible Errors eslint-typescript", - "no-constant-condition typescript Possible Errors Possible Errors eslint-typescript", - "no-control-regex typescript Possible Errors Possible Errors eslint-typescript", - "no-debugger typescript Possible Errors Possible Errors eslint-typescript", - "no-delete-var typescript Variables Variables eslint-typescript", - "no-duplicate-case typescript Possible Errors Possible Errors eslint-typescript", - "no-empty typescript Possible Errors Possible Errors eslint-typescript", - "no-empty-character-class typescript Possible Errors Possible Errors eslint-typescript", - "no-empty-pattern typescript Best Practices Best Practices eslint-typescript", - "no-ex-assign typescript Possible Errors Possible Errors eslint-typescript", - "no-extra-boolean-cast typescript Possible Errors Possible Errors eslint-typescript", - "no-fallthrough typescript Best Practices Best Practices eslint-typescript", - "no-func-assign typescript Possible Errors Possible Errors eslint-typescript", - "no-global-assign typescript Best Practices Best Practices eslint-typescript", - "no-inner-declarations typescript Possible Errors Possible Errors eslint-typescript", - "no-invalid-regexp typescript Possible Errors Possible Errors eslint-typescript", - "no-irregular-whitespace typescript Possible Errors Possible Errors eslint-typescript", - "no-misleading-character-class typescript Possible Errors Possible Errors eslint-typescript", - "no-mixed-spaces-and-tabs typescript Stylistic Issues Stylistic Issues eslint-typescript", - "no-obj-calls typescript Possible Errors Possible Errors eslint-typescript", - "no-octal typescript Best Practices Best Practices eslint-typescript", - "no-prototype-builtins typescript Possible Errors Possible Errors eslint-typescript", - "no-regex-spaces typescript Possible Errors Possible Errors eslint-typescript", - "no-self-assign typescript Best Practices Best Practices eslint-typescript", - "no-shadow-restricted-names typescript Variables Variables eslint-typescript", - "no-sparse-arrays typescript Possible Errors Possible Errors eslint-typescript", - "no-unexpected-multiline typescript Possible Errors Possible Errors eslint-typescript", - "no-unsafe-finally typescript Possible Errors Possible Errors eslint-typescript", - "no-unsafe-negation typescript Possible Errors Possible Errors eslint-typescript", - "no-unused-labels typescript Best Practices Best Practices eslint-typescript", - "no-useless-catch typescript Best Practices Best Practices eslint-typescript", - "no-useless-escape typescript Best Practices Best Practices eslint-typescript", - "no-var typescript ECMAScript 6 ECMAScript 6 eslint-typescript", - "no-with typescript Best Practices Best Practices eslint-typescript", - "prefer-const typescript ECMAScript 6 ECMAScript 6 eslint-typescript", - "prefer-rest-params typescript ECMAScript 6 ECMAScript 6 eslint-typescript", - "prefer-spread typescript ECMAScript 6 ECMAScript 6 eslint-typescript", - "require-yield typescript ECMAScript 6 ECMAScript 6 eslint-typescript", - "use-isnan typescript Possible Errors Possible Errors eslint-typescript", - "@typescript-eslint/adjacent-overload-signatures typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/await-thenable typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/ban-types typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/consistent-type-assertions typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/explicit-function-return-type typescript Stylistic Issues Stylistic Issues eslint-typescript", - "@typescript-eslint/member-delimiter-style typescript Stylistic Issues Stylistic Issues eslint-typescript", - "@typescript-eslint/no-array-constructor typescript Stylistic Issues Stylistic Issues eslint-typescript", - "@typescript-eslint/no-empty-function typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/no-empty-interface typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/no-explicit-any typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/no-for-in-array typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/no-inferrable-types typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/no-misused-new typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/no-misused-promises typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/no-namespace typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/no-non-null-assertion typescript Stylistic Issues Stylistic Issues eslint-typescript", - "@typescript-eslint/no-this-alias typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/no-unnecessary-type-assertion typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/no-unused-vars typescript Variables Variables eslint-typescript", - "@typescript-eslint/no-use-before-define typescript Variables Variables eslint-typescript", - "@typescript-eslint/no-var-requires typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/prefer-includes typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/prefer-namespace-keyword typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/prefer-regexp-exec typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/prefer-string-starts-ends-with typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/require-await typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/triple-slash-reference typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/type-annotation-spacing typescript Stylistic Issues Stylistic Issues eslint-typescript", - "@typescript-eslint/unbound-method typescript Best Practices Best Practices eslint-typescript" - ], - "sfdx-scanner-aura": [ - "evaluate a selection of rules against a codebase", - "", - "USAGE", - " $ sfdx scanner:run -t [-c ] [-r ] [-e ]", - " [-f csv|html|json|junit|sarif|table|xml] [-o ] [--tsconfig ]", - " [--eslintconfig ] [--pmdconfig ] [--env ] [-s", - " | undefined | [-v | --json]] [--normalize-severity] [--verbose]", - " [--loglevel", - " trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL]", - "", - "FLAGS", - " -c, --category=", - " categor(ies) of rules to run", - "", - " -e, --engine=", - " engine(s) to run", - "", - " -f, --format=(csv|html|json|junit|sarif|table|xml)", - " format of results", - "", - " -o, --outfile=", - " location of output file", - "", - " -r, --ruleset=", - " [deprecated] ruleset(s) of rules to run", - "", - " -s, --severity-threshold=", - " throws an error when violations of specific severity (or more severe) are", - " detected, invokes --normalize-severity", - "", - " -t, --target=", - " (required) location of source code", - "", - " -v, --violations-cause-error", - " [deprecated] throws an error when violations are detected", - "", - " --env=", - " JSON-formatted string, overrides ESLint's default environment variables", - "", - " --eslintconfig=", - " location of eslintrc config to customize eslint engine", - "", - " --json", - " format output as json", - "", - " --loglevel=(trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATA", - " L)", - " [default: warn] logging level for this command invocation", - "", - " --normalize-severity", - " A normalized severity 1 (high), 2 (moderate), and 3 (low) is returned in", - " addition to the engine specific severity", - "", - " --pmdconfig=", - " location of PMD rule reference XML file to customize rule selection", - "", - " --tsconfig=", - " location of tsconfig.json file", - "", - " --verbose", - " emit additional command output to stdout", - "", - "DESCRIPTION", - " evaluate a selection of rules against a codebase", - "", - "EXAMPLES", - " Invoking without specifying any rules causes all rules to be run.", - " E.g., $ sfdx scanner:run --format xml --target \"somefile.js\"", - " Evaluates all rules against somefile.js.", - " Specifying multiple categories is treated as a logical OR.", - " E.g., $ sfdx scanner:run --format xml --target \"somefile.js\" --category \"Design,Best Practices\"", - " Evaluates all rules in the Design or Best Practices categories.", - " Categories can be excluded by specifying the negation operator, the values must be enclosed in single quotes.", - " E.g., $ sfdx scanner:run --format xml --target \"somefile.js\" --category '!Design,!Best Practices'", - " Evaluates all rules except those in the Design or Best Practices categories.", - " Wrap globs in quotes.", - " Unix example: $ sfdx scanner:run --target './**/*.js,!./**/IgnoreMe.js' ...", - " Windows example: > sfdx scanner:run --target \".\\**\\*.js,!.\\**\\IgnoreMe.js\" ...", - " Evaluate rules against all .js files below the current directory, except for IgnoreMe.js.", - " Specify tsconfig.json if the current working directory does not contain the tsconfig.json that corresponds to the TypeScript files being scanned.", - " E.g., sfdx scanner:run --target \"/my-project/**/*.ts\" --tsconfig \"/my-project/tsconfig.json\"", - " Scans the project contained in '/my-project' if the current working directory is another directory.", - " Use --env to override the default ESLint environment variables to add frameworks.", - " E.g., $ sfdx scanner:run --target \"somefile.js\" --env '{\"jasmine\": true}'", - " Evaluates rules against somefile.js, including Jasmine in the environment variables.", - " Use --violations-cause-error to throw exit with a non-zero code when violations are found.", - " E.g., $ sfdx scanner:run --target \"somefile.js\" --violations-cause-error", - " Evaluates rules against somefile.js. If any rules are violated, the exit code will be the severity of the most severe violation.", - " Use --engine to include or exclude engines. Any engine listed will be run, regardless of its current 'disabled' attribute.", - " E.g., $ sfdx scanner:run --target \"somefile.js\" --engine \"eslint-lwc,pmd\"", - " Evaluates rules against somefile.js, using eslint-lwc and pmd engines.", - " Use --engine to invoke engines that are not enabled by default.", - " E.g, $ sfdx scanner:run --target \"/some/dir\" --engine cpd", - " Executes CPD engine against known file extensions in \"/some/dir\". CPD helps detect blocks of code duplication in selected languages.", - " To use PMD with your own rule reference file, use --pmdconfig. Note that rule filters are not applied.", - " E.g, $ sfdx scanner:run --target \"src\" --pmdconfig \"pmd_rule_ref.xml\"", - " To use Eslint with your own .eslintrc.json file, use --eslintconfig. Make sure that the directory you run the command from has all the NPM dependencies installed.", - " E.g., $ sfdx scanner:run --target \"src\" --eslintconfig \"/home/my/setup/.eslintrc.json\"", - " Use --normalize-severity to output a normalized (across all engines) severity (1 [high], 2 [moderate], and 3 [low]) in addition to the engine specific severity (when shown).", - " E.g., $ sfdx scanner:run --target \"/some-project/\" --format csv --normalize-severity", - " Use --severity-threshold to throw a non-zero exit code when rule violations of a specific severity (or greater) are found. For this example, if there are any rule violations with a severity of 2 or more (which includes 1-high and 2-moderate), the exit code will be equal to the severity of the most severe violation.", - " E.g., $ sfdx scanner:run --target \"/some-project/\" --severity-threshold 2", - "", - "", - "WARNING: We're constantly improving Salesforce Code Analyzer. Tell us what you think! Give feedback at https://research.net/r/SalesforceCA.", - "WARNING: v2.x's End Of Life is approaching.", - " In October 2022, v3.x of the Salesforce Code Analyzer will become the default version,", - " and older versions, including your currently installed version, will no longer be supported.", - " You can manually update to v3.x earlier for a smoother transition.", - "WARNING: As of April 27, 2022, v3.x of the Salesforce Code Analyzer is available as an open pilot.", - " To update to v3.x and try out our pilot features, run these commands:", - " > sfdx plugins:uninstall @salesforce/sfdx-scanner", - " > sfdx plugins:install @salesforce/sfdx-scanner@latest-pilot", - "NAME LANGUAGES CATEGORIES RULESETS [DEP] ENGINE", - "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500", - "VfCsrf visualforce Security Basic VF pmd", - "VfHtmlStyleTagXss visualforce Security pmd", - "VfUnescapeEl visualforce Security Basic VF pmd", - "ApexAssertionsShouldIncludeMessage apex Best Practices pmd", - "ApexUnitTestClassShouldHaveAsserts apex Best Practices quickstart,Default ruleset...,ApexUnit pmd", - "ApexUnitTestMethodShouldHaveIsTestAnnotation apex Best Practices pmd", - "ApexUnitTestShouldNotUseSeeAllDataTrue apex Best Practices quickstart,Default ruleset...,ApexUnit pmd", - "AvoidGlobalModifier apex Best Practices Style,quickstart,Default ruleset... pmd", - "AvoidLogicInTrigger apex Best Practices Style,quickstart,Default ruleset... pmd", - "DebugsShouldUseLoggingLevel apex Best Practices quickstart pmd", - "UnusedLocalVariable apex Best Practices pmd", - "AvoidDebugStatements apex Performance pmd", - "AvoidDmlStatementsInLoops apex Performance Default ruleset...,Performance pmd", - "AvoidSoqlInLoops apex Performance Default ruleset...,Performance pmd", - "AvoidSoslInLoops apex Performance Default ruleset...,Performance pmd", - "EagerlyLoadedDescribeSObjectResult apex Performance pmd", - "OperationWithLimitsInLoop apex Performance quickstart pmd", - "ApexBadCrypto apex Security Security,quickstart,Default ruleset... pmd", - "ApexCRUDViolation apex Security Security,quickstart,Default ruleset... pmd", - "ApexCSRF apex Security Security pmd", - "ApexDangerousMethods apex Security Security,quickstart,Default ruleset... pmd", - "ApexInsecureEndpoint apex Security Security,quickstart,Default ruleset... pmd", - "ApexOpenRedirect apex Security Security,quickstart,Default ruleset... pmd", - "ApexSharingViolations apex Security Security,quickstart,Default ruleset... pmd", - "ApexSOQLInjection apex Security Security,quickstart,Default ruleset... pmd", - "ApexSuggestUsingNamedCred apex Security Security,quickstart,Default ruleset... pmd", - "ApexXSSFromEscapeFalse apex Security Security,quickstart,Default ruleset... pmd", - "ApexXSSFromURLParam apex Security Security,quickstart,Default ruleset... pmd", - "ClassNamingConventions apex Code Style Style,quickstart,Default ruleset... pmd", - "IfElseStmtsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd", - "IfStmtsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd", - "FieldDeclarationsShouldBeAtStart apex Code Style pmd", - "FieldNamingConventions apex Code Style quickstart pmd", - "ForLoopsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd", - "FormalParameterNamingConventions apex Code Style quickstart pmd", - "LocalVariableNamingConventions apex Code Style quickstart pmd", - "MethodNamingConventions apex Code Style Style,quickstart,Default ruleset... pmd", - "OneDeclarationPerLine apex Code Style quickstart,Default ruleset... pmd", - "PropertyNamingConventions apex Code Style quickstart pmd", - "VariableNamingConventions apex Code Style Style,Default ruleset... pmd", - "WhileLoopsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd", - "AvoidDeeplyNestedIfStmts apex Design quickstart,Default ruleset...,Complexity pmd", - "CyclomaticComplexity apex Design Metrics tempora...,quickstart,Default ruleset... pmd", - "CognitiveComplexity apex Design pmd", - "ExcessiveClassLength apex Design quickstart,Default ruleset...,Complexity pmd", - "ExcessiveParameterList apex Design quickstart,Default ruleset...,Complexity pmd", - "ExcessivePublicCount apex Design quickstart,Default ruleset...,Complexity pmd", - "NcssConstructorCount apex Design quickstart,Default ruleset...,Complexity pmd", - "NcssMethodCount apex Design quickstart,Default ruleset...,Complexity pmd", - "NcssTypeCount apex Design quickstart,Default ruleset...,Complexity pmd", - "StdCyclomaticComplexity apex Design quickstart,Default ruleset...,Complexity pmd", - "TooManyFields apex Design quickstart,Default ruleset...,Complexity pmd", - "ApexDoc apex Documentation quickstart,Default ruleset... pmd", - "ApexCSRF apex Error Prone quickstart,Default ruleset... pmd", - "AvoidDirectAccessTriggerMap apex Error Prone Style,quickstart,Default ruleset... pmd", - "AvoidHardcodingId apex Error Prone Style,quickstart,Default ruleset... pmd", - "AvoidNonExistentAnnotations apex Error Prone quickstart,Default ruleset... pmd", - "EmptyCatchBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd", - "EmptyIfStmt apex Error Prone quickstart,Default ruleset...,Empty Code pmd", - "EmptyStatementBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd", - "EmptyTryOrFinallyBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd", - "EmptyWhileStmt apex Error Prone quickstart,Default ruleset...,Empty Code pmd", - "InaccessibleAuraEnabledGetter apex Error Prone pmd", - "MethodWithSameNameAsEnclosingClass apex Error Prone Style,quickstart,Default ruleset... pmd", - "OverrideBothEqualsAndHashcode apex Error Prone pmd", - "TestMethodsMustBeInTestClasses apex Error Prone pmd", - "constructor-super javascript ECMAScript 6 ECMAScript 6 eslint", - "for-direction javascript Possible Errors Possible Errors eslint", - "getter-return javascript Possible Errors Possible Errors eslint", - "no-async-promise-executor javascript Possible Errors Possible Errors eslint", - "no-case-declarations javascript Best Practices Best Practices eslint", - "no-class-assign javascript ECMAScript 6 ECMAScript 6 eslint", - "no-compare-neg-zero javascript Possible Errors Possible Errors eslint", - "no-cond-assign javascript Possible Errors Possible Errors eslint", - "no-const-assign javascript ECMAScript 6 ECMAScript 6 eslint", - "no-constant-condition javascript Possible Errors Possible Errors eslint", - "no-control-regex javascript Possible Errors Possible Errors eslint", - "no-debugger javascript Possible Errors Possible Errors eslint", - "no-delete-var javascript Variables Variables eslint", - "no-dupe-args javascript Possible Errors Possible Errors eslint", - "no-dupe-class-members javascript ECMAScript 6 ECMAScript 6 eslint", - "no-dupe-keys javascript Possible Errors Possible Errors eslint", - "no-duplicate-case javascript Possible Errors Possible Errors eslint", - "no-empty javascript Possible Errors Possible Errors eslint", - "no-empty-character-class javascript Possible Errors Possible Errors eslint", - "no-empty-pattern javascript Best Practices Best Practices eslint", - "no-ex-assign javascript Possible Errors Possible Errors eslint", - "no-extra-boolean-cast javascript Possible Errors Possible Errors eslint", - "no-extra-semi javascript Possible Errors Possible Errors eslint", - "no-fallthrough javascript Best Practices Best Practices eslint", - "no-func-assign javascript Possible Errors Possible Errors eslint", - "no-global-assign javascript Best Practices Best Practices eslint", - "no-inner-declarations javascript Possible Errors Possible Errors eslint", - "no-invalid-regexp javascript Possible Errors Possible Errors eslint", - "no-irregular-whitespace javascript Possible Errors Possible Errors eslint", - "no-misleading-character-class javascript Possible Errors Possible Errors eslint", - "no-mixed-spaces-and-tabs javascript Stylistic Issues Stylistic Issues eslint", - "no-new-symbol javascript ECMAScript 6 ECMAScript 6 eslint", - "no-obj-calls javascript Possible Errors Possible Errors eslint", - "no-octal javascript Best Practices Best Practices eslint", - "no-prototype-builtins javascript Possible Errors Possible Errors eslint", - "no-redeclare javascript Best Practices Best Practices eslint", - "no-regex-spaces javascript Possible Errors Possible Errors eslint", - "no-self-assign javascript Best Practices Best Practices eslint", - "no-shadow-restricted-names javascript Variables Variables eslint", - "no-sparse-arrays javascript Possible Errors Possible Errors eslint", - "no-this-before-super javascript ECMAScript 6 ECMAScript 6 eslint", - "no-undef javascript Variables Variables eslint", - "no-unexpected-multiline javascript Possible Errors Possible Errors eslint", - "no-unreachable javascript Possible Errors Possible Errors eslint", - "no-unsafe-finally javascript Possible Errors Possible Errors eslint", - "no-unsafe-negation javascript Possible Errors Possible Errors eslint", - "no-unused-labels javascript Best Practices Best Practices eslint", - "no-unused-vars javascript Variables Variables eslint", - "no-useless-catch javascript Best Practices Best Practices eslint", - "no-useless-escape javascript Best Practices Best Practices eslint", - "no-with javascript Best Practices Best Practices eslint", - "require-yield javascript ECMAScript 6 ECMAScript 6 eslint", - "use-isnan javascript Possible Errors Possible Errors eslint", - "valid-typeof javascript Possible Errors Possible Errors eslint", - "constructor-super typescript ECMAScript 6 ECMAScript 6 eslint-typescript", - "for-direction typescript Possible Errors Possible Errors eslint-typescript", - "no-async-promise-executor typescript Possible Errors Possible Errors eslint-typescript", - "no-case-declarations typescript Best Practices Best Practices eslint-typescript", - "no-class-assign typescript ECMAScript 6 ECMAScript 6 eslint-typescript", - "no-compare-neg-zero typescript Possible Errors Possible Errors eslint-typescript", - "no-cond-assign typescript Possible Errors Possible Errors eslint-typescript", - "no-constant-condition typescript Possible Errors Possible Errors eslint-typescript", - "no-control-regex typescript Possible Errors Possible Errors eslint-typescript", - "no-debugger typescript Possible Errors Possible Errors eslint-typescript", - "no-delete-var typescript Variables Variables eslint-typescript", - "no-duplicate-case typescript Possible Errors Possible Errors eslint-typescript", - "no-empty typescript Possible Errors Possible Errors eslint-typescript", - "no-empty-character-class typescript Possible Errors Possible Errors eslint-typescript", - "no-empty-pattern typescript Best Practices Best Practices eslint-typescript", - "no-ex-assign typescript Possible Errors Possible Errors eslint-typescript", - "no-extra-boolean-cast typescript Possible Errors Possible Errors eslint-typescript", - "no-fallthrough typescript Best Practices Best Practices eslint-typescript", - "no-func-assign typescript Possible Errors Possible Errors eslint-typescript", - "no-global-assign typescript Best Practices Best Practices eslint-typescript", - "no-inner-declarations typescript Possible Errors Possible Errors eslint-typescript", - "no-invalid-regexp typescript Possible Errors Possible Errors eslint-typescript", - "no-irregular-whitespace typescript Possible Errors Possible Errors eslint-typescript", - "no-misleading-character-class typescript Possible Errors Possible Errors eslint-typescript", - "no-mixed-spaces-and-tabs typescript Stylistic Issues Stylistic Issues eslint-typescript", - "no-obj-calls typescript Possible Errors Possible Errors eslint-typescript", - "no-octal typescript Best Practices Best Practices eslint-typescript", - "no-prototype-builtins typescript Possible Errors Possible Errors eslint-typescript", - "no-regex-spaces typescript Possible Errors Possible Errors eslint-typescript", - "no-self-assign typescript Best Practices Best Practices eslint-typescript", - "no-shadow-restricted-names typescript Variables Variables eslint-typescript", - "no-sparse-arrays typescript Possible Errors Possible Errors eslint-typescript", - "no-unexpected-multiline typescript Possible Errors Possible Errors eslint-typescript", - "no-unsafe-finally typescript Possible Errors Possible Errors eslint-typescript", - "no-unsafe-negation typescript Possible Errors Possible Errors eslint-typescript", - "no-unused-labels typescript Best Practices Best Practices eslint-typescript", - "no-useless-catch typescript Best Practices Best Practices eslint-typescript", - "no-useless-escape typescript Best Practices Best Practices eslint-typescript", - "no-var typescript ECMAScript 6 ECMAScript 6 eslint-typescript", - "no-with typescript Best Practices Best Practices eslint-typescript", - "prefer-const typescript ECMAScript 6 ECMAScript 6 eslint-typescript", - "prefer-rest-params typescript ECMAScript 6 ECMAScript 6 eslint-typescript", - "prefer-spread typescript ECMAScript 6 ECMAScript 6 eslint-typescript", - "require-yield typescript ECMAScript 6 ECMAScript 6 eslint-typescript", - "use-isnan typescript Possible Errors Possible Errors eslint-typescript", - "@typescript-eslint/adjacent-overload-signatures typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/await-thenable typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/ban-types typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/consistent-type-assertions typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/explicit-function-return-type typescript Stylistic Issues Stylistic Issues eslint-typescript", - "@typescript-eslint/member-delimiter-style typescript Stylistic Issues Stylistic Issues eslint-typescript", - "@typescript-eslint/no-array-constructor typescript Stylistic Issues Stylistic Issues eslint-typescript", - "@typescript-eslint/no-empty-function typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/no-empty-interface typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/no-explicit-any typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/no-for-in-array typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/no-inferrable-types typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/no-misused-new typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/no-misused-promises typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/no-namespace typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/no-non-null-assertion typescript Stylistic Issues Stylistic Issues eslint-typescript", - "@typescript-eslint/no-this-alias typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/no-unnecessary-type-assertion typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/no-unused-vars typescript Variables Variables eslint-typescript", - "@typescript-eslint/no-use-before-define typescript Variables Variables eslint-typescript", - "@typescript-eslint/no-var-requires typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/prefer-includes typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/prefer-namespace-keyword typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/prefer-regexp-exec typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/prefer-string-starts-ends-with typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/require-await typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/triple-slash-reference typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/type-annotation-spacing typescript Stylistic Issues Stylistic Issues eslint-typescript", - "@typescript-eslint/unbound-method typescript Best Practices Best Practices eslint-typescript" + " \u203a Error: Command scanner:run not found.", + " \u203a Warning: scanner:rule:list is not a sfdx command.", + "Did you mean force:auth:list? [y/n]:" + ], + "sfdx-scanner-aura": [ + " \u203a Error: Command scanner:run not found.", + " \u203a Warning: scanner:rule:list is not a sfdx command.", + "Did you mean force:auth:list? [y/n]:" ], "sfdx-scanner-lwc": [ - "evaluate a selection of rules against a codebase", - "", - "USAGE", - " $ sfdx scanner:run -t [-c ] [-r ] [-e ]", - " [-f csv|html|json|junit|sarif|table|xml] [-o ] [--tsconfig ]", - " [--eslintconfig ] [--pmdconfig ] [--env ] [-s", - " | undefined | [-v | --json]] [--normalize-severity] [--verbose]", - " [--loglevel", - " trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL]", - "", - "FLAGS", - " -c, --category=", - " categor(ies) of rules to run", - "", - " -e, --engine=", - " engine(s) to run", - "", - " -f, --format=(csv|html|json|junit|sarif|table|xml)", - " format of results", - "", - " -o, --outfile=", - " location of output file", - "", - " -r, --ruleset=", - " [deprecated] ruleset(s) of rules to run", - "", - " -s, --severity-threshold=", - " throws an error when violations of specific severity (or more severe) are", - " detected, invokes --normalize-severity", - "", - " -t, --target=", - " (required) location of source code", - "", - " -v, --violations-cause-error", - " [deprecated] throws an error when violations are detected", - "", - " --env=", - " JSON-formatted string, overrides ESLint's default environment variables", - "", - " --eslintconfig=", - " location of eslintrc config to customize eslint engine", - "", - " --json", - " format output as json", - "", - " --loglevel=(trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATA", - " L)", - " [default: warn] logging level for this command invocation", - "", - " --normalize-severity", - " A normalized severity 1 (high), 2 (moderate), and 3 (low) is returned in", - " addition to the engine specific severity", - "", - " --pmdconfig=", - " location of PMD rule reference XML file to customize rule selection", - "", - " --tsconfig=", - " location of tsconfig.json file", - "", - " --verbose", - " emit additional command output to stdout", - "", - "DESCRIPTION", - " evaluate a selection of rules against a codebase", - "", - "EXAMPLES", - " Invoking without specifying any rules causes all rules to be run.", - " E.g., $ sfdx scanner:run --format xml --target \"somefile.js\"", - " Evaluates all rules against somefile.js.", - " Specifying multiple categories is treated as a logical OR.", - " E.g., $ sfdx scanner:run --format xml --target \"somefile.js\" --category \"Design,Best Practices\"", - " Evaluates all rules in the Design or Best Practices categories.", - " Categories can be excluded by specifying the negation operator, the values must be enclosed in single quotes.", - " E.g., $ sfdx scanner:run --format xml --target \"somefile.js\" --category '!Design,!Best Practices'", - " Evaluates all rules except those in the Design or Best Practices categories.", - " Wrap globs in quotes.", - " Unix example: $ sfdx scanner:run --target './**/*.js,!./**/IgnoreMe.js' ...", - " Windows example: > sfdx scanner:run --target \".\\**\\*.js,!.\\**\\IgnoreMe.js\" ...", - " Evaluate rules against all .js files below the current directory, except for IgnoreMe.js.", - " Specify tsconfig.json if the current working directory does not contain the tsconfig.json that corresponds to the TypeScript files being scanned.", - " E.g., sfdx scanner:run --target \"/my-project/**/*.ts\" --tsconfig \"/my-project/tsconfig.json\"", - " Scans the project contained in '/my-project' if the current working directory is another directory.", - " Use --env to override the default ESLint environment variables to add frameworks.", - " E.g., $ sfdx scanner:run --target \"somefile.js\" --env '{\"jasmine\": true}'", - " Evaluates rules against somefile.js, including Jasmine in the environment variables.", - " Use --violations-cause-error to throw exit with a non-zero code when violations are found.", - " E.g., $ sfdx scanner:run --target \"somefile.js\" --violations-cause-error", - " Evaluates rules against somefile.js. If any rules are violated, the exit code will be the severity of the most severe violation.", - " Use --engine to include or exclude engines. Any engine listed will be run, regardless of its current 'disabled' attribute.", - " E.g., $ sfdx scanner:run --target \"somefile.js\" --engine \"eslint-lwc,pmd\"", - " Evaluates rules against somefile.js, using eslint-lwc and pmd engines.", - " Use --engine to invoke engines that are not enabled by default.", - " E.g, $ sfdx scanner:run --target \"/some/dir\" --engine cpd", - " Executes CPD engine against known file extensions in \"/some/dir\". CPD helps detect blocks of code duplication in selected languages.", - " To use PMD with your own rule reference file, use --pmdconfig. Note that rule filters are not applied.", - " E.g, $ sfdx scanner:run --target \"src\" --pmdconfig \"pmd_rule_ref.xml\"", - " To use Eslint with your own .eslintrc.json file, use --eslintconfig. Make sure that the directory you run the command from has all the NPM dependencies installed.", - " E.g., $ sfdx scanner:run --target \"src\" --eslintconfig \"/home/my/setup/.eslintrc.json\"", - " Use --normalize-severity to output a normalized (across all engines) severity (1 [high], 2 [moderate], and 3 [low]) in addition to the engine specific severity (when shown).", - " E.g., $ sfdx scanner:run --target \"/some-project/\" --format csv --normalize-severity", - " Use --severity-threshold to throw a non-zero exit code when rule violations of a specific severity (or greater) are found. For this example, if there are any rule violations with a severity of 2 or more (which includes 1-high and 2-moderate), the exit code will be equal to the severity of the most severe violation.", - " E.g., $ sfdx scanner:run --target \"/some-project/\" --severity-threshold 2", - "", - "", - "WARNING: We're constantly improving Salesforce Code Analyzer. Tell us what you think! Give feedback at https://research.net/r/SalesforceCA.", - "WARNING: v2.x's End Of Life is approaching.", - " In October 2022, v3.x of the Salesforce Code Analyzer will become the default version,", - " and older versions, including your currently installed version, will no longer be supported.", - " You can manually update to v3.x earlier for a smoother transition.", - "WARNING: As of April 27, 2022, v3.x of the Salesforce Code Analyzer is available as an open pilot.", - " To update to v3.x and try out our pilot features, run these commands:", - " > sfdx plugins:uninstall @salesforce/sfdx-scanner", - " > sfdx plugins:install @salesforce/sfdx-scanner@latest-pilot", - "NAME LANGUAGES CATEGORIES RULESETS [DEP] ENGINE", - "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500", - "VfCsrf visualforce Security Basic VF pmd", - "VfHtmlStyleTagXss visualforce Security pmd", - "VfUnescapeEl visualforce Security Basic VF pmd", - "ApexAssertionsShouldIncludeMessage apex Best Practices pmd", - "ApexUnitTestClassShouldHaveAsserts apex Best Practices quickstart,Default ruleset...,ApexUnit pmd", - "ApexUnitTestMethodShouldHaveIsTestAnnotation apex Best Practices pmd", - "ApexUnitTestShouldNotUseSeeAllDataTrue apex Best Practices quickstart,Default ruleset...,ApexUnit pmd", - "AvoidGlobalModifier apex Best Practices Style,quickstart,Default ruleset... pmd", - "AvoidLogicInTrigger apex Best Practices Style,quickstart,Default ruleset... pmd", - "DebugsShouldUseLoggingLevel apex Best Practices quickstart pmd", - "UnusedLocalVariable apex Best Practices pmd", - "AvoidDebugStatements apex Performance pmd", - "AvoidDmlStatementsInLoops apex Performance Default ruleset...,Performance pmd", - "AvoidSoqlInLoops apex Performance Default ruleset...,Performance pmd", - "AvoidSoslInLoops apex Performance Default ruleset...,Performance pmd", - "EagerlyLoadedDescribeSObjectResult apex Performance pmd", - "OperationWithLimitsInLoop apex Performance quickstart pmd", - "ApexBadCrypto apex Security Security,quickstart,Default ruleset... pmd", - "ApexCRUDViolation apex Security Security,quickstart,Default ruleset... pmd", - "ApexCSRF apex Security Security pmd", - "ApexDangerousMethods apex Security Security,quickstart,Default ruleset... pmd", - "ApexInsecureEndpoint apex Security Security,quickstart,Default ruleset... pmd", - "ApexOpenRedirect apex Security Security,quickstart,Default ruleset... pmd", - "ApexSharingViolations apex Security Security,quickstart,Default ruleset... pmd", - "ApexSOQLInjection apex Security Security,quickstart,Default ruleset... pmd", - "ApexSuggestUsingNamedCred apex Security Security,quickstart,Default ruleset... pmd", - "ApexXSSFromEscapeFalse apex Security Security,quickstart,Default ruleset... pmd", - "ApexXSSFromURLParam apex Security Security,quickstart,Default ruleset... pmd", - "ClassNamingConventions apex Code Style Style,quickstart,Default ruleset... pmd", - "IfElseStmtsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd", - "IfStmtsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd", - "FieldDeclarationsShouldBeAtStart apex Code Style pmd", - "FieldNamingConventions apex Code Style quickstart pmd", - "ForLoopsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd", - "FormalParameterNamingConventions apex Code Style quickstart pmd", - "LocalVariableNamingConventions apex Code Style quickstart pmd", - "MethodNamingConventions apex Code Style Style,quickstart,Default ruleset... pmd", - "OneDeclarationPerLine apex Code Style quickstart,Default ruleset... pmd", - "PropertyNamingConventions apex Code Style quickstart pmd", - "VariableNamingConventions apex Code Style Style,Default ruleset... pmd", - "WhileLoopsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd", - "AvoidDeeplyNestedIfStmts apex Design quickstart,Default ruleset...,Complexity pmd", - "CyclomaticComplexity apex Design Metrics tempora...,quickstart,Default ruleset... pmd", - "CognitiveComplexity apex Design pmd", - "ExcessiveClassLength apex Design quickstart,Default ruleset...,Complexity pmd", - "ExcessiveParameterList apex Design quickstart,Default ruleset...,Complexity pmd", - "ExcessivePublicCount apex Design quickstart,Default ruleset...,Complexity pmd", - "NcssConstructorCount apex Design quickstart,Default ruleset...,Complexity pmd", - "NcssMethodCount apex Design quickstart,Default ruleset...,Complexity pmd", - "NcssTypeCount apex Design quickstart,Default ruleset...,Complexity pmd", - "StdCyclomaticComplexity apex Design quickstart,Default ruleset...,Complexity pmd", - "TooManyFields apex Design quickstart,Default ruleset...,Complexity pmd", - "ApexDoc apex Documentation quickstart,Default ruleset... pmd", - "ApexCSRF apex Error Prone quickstart,Default ruleset... pmd", - "AvoidDirectAccessTriggerMap apex Error Prone Style,quickstart,Default ruleset... pmd", - "AvoidHardcodingId apex Error Prone Style,quickstart,Default ruleset... pmd", - "AvoidNonExistentAnnotations apex Error Prone quickstart,Default ruleset... pmd", - "EmptyCatchBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd", - "EmptyIfStmt apex Error Prone quickstart,Default ruleset...,Empty Code pmd", - "EmptyStatementBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd", - "EmptyTryOrFinallyBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd", - "EmptyWhileStmt apex Error Prone quickstart,Default ruleset...,Empty Code pmd", - "InaccessibleAuraEnabledGetter apex Error Prone pmd", - "MethodWithSameNameAsEnclosingClass apex Error Prone Style,quickstart,Default ruleset... pmd", - "OverrideBothEqualsAndHashcode apex Error Prone pmd", - "TestMethodsMustBeInTestClasses apex Error Prone pmd", - "constructor-super javascript ECMAScript 6 ECMAScript 6 eslint", - "for-direction javascript Possible Errors Possible Errors eslint", - "getter-return javascript Possible Errors Possible Errors eslint", - "no-async-promise-executor javascript Possible Errors Possible Errors eslint", - "no-case-declarations javascript Best Practices Best Practices eslint", - "no-class-assign javascript ECMAScript 6 ECMAScript 6 eslint", - "no-compare-neg-zero javascript Possible Errors Possible Errors eslint", - "no-cond-assign javascript Possible Errors Possible Errors eslint", - "no-const-assign javascript ECMAScript 6 ECMAScript 6 eslint", - "no-constant-condition javascript Possible Errors Possible Errors eslint", - "no-control-regex javascript Possible Errors Possible Errors eslint", - "no-debugger javascript Possible Errors Possible Errors eslint", - "no-delete-var javascript Variables Variables eslint", - "no-dupe-args javascript Possible Errors Possible Errors eslint", - "no-dupe-class-members javascript ECMAScript 6 ECMAScript 6 eslint", - "no-dupe-keys javascript Possible Errors Possible Errors eslint", - "no-duplicate-case javascript Possible Errors Possible Errors eslint", - "no-empty javascript Possible Errors Possible Errors eslint", - "no-empty-character-class javascript Possible Errors Possible Errors eslint", - "no-empty-pattern javascript Best Practices Best Practices eslint", - "no-ex-assign javascript Possible Errors Possible Errors eslint", - "no-extra-boolean-cast javascript Possible Errors Possible Errors eslint", - "no-extra-semi javascript Possible Errors Possible Errors eslint", - "no-fallthrough javascript Best Practices Best Practices eslint", - "no-func-assign javascript Possible Errors Possible Errors eslint", - "no-global-assign javascript Best Practices Best Practices eslint", - "no-inner-declarations javascript Possible Errors Possible Errors eslint", - "no-invalid-regexp javascript Possible Errors Possible Errors eslint", - "no-irregular-whitespace javascript Possible Errors Possible Errors eslint", - "no-misleading-character-class javascript Possible Errors Possible Errors eslint", - "no-mixed-spaces-and-tabs javascript Stylistic Issues Stylistic Issues eslint", - "no-new-symbol javascript ECMAScript 6 ECMAScript 6 eslint", - "no-obj-calls javascript Possible Errors Possible Errors eslint", - "no-octal javascript Best Practices Best Practices eslint", - "no-prototype-builtins javascript Possible Errors Possible Errors eslint", - "no-redeclare javascript Best Practices Best Practices eslint", - "no-regex-spaces javascript Possible Errors Possible Errors eslint", - "no-self-assign javascript Best Practices Best Practices eslint", - "no-shadow-restricted-names javascript Variables Variables eslint", - "no-sparse-arrays javascript Possible Errors Possible Errors eslint", - "no-this-before-super javascript ECMAScript 6 ECMAScript 6 eslint", - "no-undef javascript Variables Variables eslint", - "no-unexpected-multiline javascript Possible Errors Possible Errors eslint", - "no-unreachable javascript Possible Errors Possible Errors eslint", - "no-unsafe-finally javascript Possible Errors Possible Errors eslint", - "no-unsafe-negation javascript Possible Errors Possible Errors eslint", - "no-unused-labels javascript Best Practices Best Practices eslint", - "no-unused-vars javascript Variables Variables eslint", - "no-useless-catch javascript Best Practices Best Practices eslint", - "no-useless-escape javascript Best Practices Best Practices eslint", - "no-with javascript Best Practices Best Practices eslint", - "require-yield javascript ECMAScript 6 ECMAScript 6 eslint", - "use-isnan javascript Possible Errors Possible Errors eslint", - "valid-typeof javascript Possible Errors Possible Errors eslint", - "constructor-super typescript ECMAScript 6 ECMAScript 6 eslint-typescript", - "for-direction typescript Possible Errors Possible Errors eslint-typescript", - "no-async-promise-executor typescript Possible Errors Possible Errors eslint-typescript", - "no-case-declarations typescript Best Practices Best Practices eslint-typescript", - "no-class-assign typescript ECMAScript 6 ECMAScript 6 eslint-typescript", - "no-compare-neg-zero typescript Possible Errors Possible Errors eslint-typescript", - "no-cond-assign typescript Possible Errors Possible Errors eslint-typescript", - "no-constant-condition typescript Possible Errors Possible Errors eslint-typescript", - "no-control-regex typescript Possible Errors Possible Errors eslint-typescript", - "no-debugger typescript Possible Errors Possible Errors eslint-typescript", - "no-delete-var typescript Variables Variables eslint-typescript", - "no-duplicate-case typescript Possible Errors Possible Errors eslint-typescript", - "no-empty typescript Possible Errors Possible Errors eslint-typescript", - "no-empty-character-class typescript Possible Errors Possible Errors eslint-typescript", - "no-empty-pattern typescript Best Practices Best Practices eslint-typescript", - "no-ex-assign typescript Possible Errors Possible Errors eslint-typescript", - "no-extra-boolean-cast typescript Possible Errors Possible Errors eslint-typescript", - "no-fallthrough typescript Best Practices Best Practices eslint-typescript", - "no-func-assign typescript Possible Errors Possible Errors eslint-typescript", - "no-global-assign typescript Best Practices Best Practices eslint-typescript", - "no-inner-declarations typescript Possible Errors Possible Errors eslint-typescript", - "no-invalid-regexp typescript Possible Errors Possible Errors eslint-typescript", - "no-irregular-whitespace typescript Possible Errors Possible Errors eslint-typescript", - "no-misleading-character-class typescript Possible Errors Possible Errors eslint-typescript", - "no-mixed-spaces-and-tabs typescript Stylistic Issues Stylistic Issues eslint-typescript", - "no-obj-calls typescript Possible Errors Possible Errors eslint-typescript", - "no-octal typescript Best Practices Best Practices eslint-typescript", - "no-prototype-builtins typescript Possible Errors Possible Errors eslint-typescript", - "no-regex-spaces typescript Possible Errors Possible Errors eslint-typescript", - "no-self-assign typescript Best Practices Best Practices eslint-typescript", - "no-shadow-restricted-names typescript Variables Variables eslint-typescript", - "no-sparse-arrays typescript Possible Errors Possible Errors eslint-typescript", - "no-unexpected-multiline typescript Possible Errors Possible Errors eslint-typescript", - "no-unsafe-finally typescript Possible Errors Possible Errors eslint-typescript", - "no-unsafe-negation typescript Possible Errors Possible Errors eslint-typescript", - "no-unused-labels typescript Best Practices Best Practices eslint-typescript", - "no-useless-catch typescript Best Practices Best Practices eslint-typescript", - "no-useless-escape typescript Best Practices Best Practices eslint-typescript", - "no-var typescript ECMAScript 6 ECMAScript 6 eslint-typescript", - "no-with typescript Best Practices Best Practices eslint-typescript", - "prefer-const typescript ECMAScript 6 ECMAScript 6 eslint-typescript", - "prefer-rest-params typescript ECMAScript 6 ECMAScript 6 eslint-typescript", - "prefer-spread typescript ECMAScript 6 ECMAScript 6 eslint-typescript", - "require-yield typescript ECMAScript 6 ECMAScript 6 eslint-typescript", - "use-isnan typescript Possible Errors Possible Errors eslint-typescript", - "@typescript-eslint/adjacent-overload-signatures typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/await-thenable typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/ban-types typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/consistent-type-assertions typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/explicit-function-return-type typescript Stylistic Issues Stylistic Issues eslint-typescript", - "@typescript-eslint/member-delimiter-style typescript Stylistic Issues Stylistic Issues eslint-typescript", - "@typescript-eslint/no-array-constructor typescript Stylistic Issues Stylistic Issues eslint-typescript", - "@typescript-eslint/no-empty-function typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/no-empty-interface typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/no-explicit-any typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/no-for-in-array typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/no-inferrable-types typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/no-misused-new typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/no-misused-promises typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/no-namespace typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/no-non-null-assertion typescript Stylistic Issues Stylistic Issues eslint-typescript", - "@typescript-eslint/no-this-alias typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/no-unnecessary-type-assertion typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/no-unused-vars typescript Variables Variables eslint-typescript", - "@typescript-eslint/no-use-before-define typescript Variables Variables eslint-typescript", - "@typescript-eslint/no-var-requires typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/prefer-includes typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/prefer-namespace-keyword typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/prefer-regexp-exec typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/prefer-string-starts-ends-with typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/require-await typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/triple-slash-reference typescript Best Practices Best Practices eslint-typescript", - "@typescript-eslint/type-annotation-spacing typescript Stylistic Issues Stylistic Issues eslint-typescript", - "@typescript-eslint/unbound-method typescript Best Practices Best Practices eslint-typescript" + " \u203a Error: Command scanner:run not found.", + " \u203a Warning: scanner:rule:list is not a sfdx command.", + "Did you mean force:auth:list? [y/n]:" ], "shellcheck": [ "Usage: shellcheck [OPTIONS...] FILES...", diff --git a/.automation/generated/linter-versions.json b/.automation/generated/linter-versions.json index f25f0ceff04..d881fc04800 100644 --- a/.automation/generated/linter-versions.json +++ b/.automation/generated/linter-versions.json @@ -6,7 +6,7 @@ "bash-exec": "5.1.16", "bicep_linter": "Bicep.CLI.version.0.11.1", "black": "22.10.0", - "cfn-lint": "0.67.0", + "cfn-lint": "0.68.1", "checkmake": "0.2.1", "checkov": "2.1.244", "checkstyle": "10.3.4", @@ -18,17 +18,17 @@ "cspell": "6.12.0", "dartanalyzer": "0.0.0", "devskim": "0.6.9", - "djlint": "1.19.1", + "djlint": "1.19.2", "dockerfilelint": "1.8.0", "dotenv-linter": "3.2.0", "dotnet-format": "000", "dustilock": "0.0.0", "editorconfig-checker": "2.4.0", - "eslint": "8.25.0", + "eslint": "8.26.0", "eslint-plugin-jsonc": "2.4.0", "flake8": "5.0.4", "gherkin-lint": "0.0.0", - "git_diff": "2.34.4", + "git_diff": "2.34.5", "gitleaks": "8.14.1", "golangci-lint": "1.50.0", "goodcheck": "3.1.0", @@ -56,13 +56,13 @@ "phplint": "3.0", "phpstan": "1.8.10", "pmd": "6.48.0", - "powershell": "7.2.6", + "powershell": "7.2.7", "prettier": "2.7.1", "proselint": "0.13.0", "protolint": "0.41.0", "psalm": "Psalm.5.x-dev@", - "puppet-lint": "3.0.0", - "pylint": "2.15.4", + "puppet-lint": "3.0.1", + "pylint": "2.15.5", "pyright": "1.1.270", "raku": "2020.10", "remark-lint": "14.0.2", @@ -70,11 +70,11 @@ "rst-lint": "1.4.0", "rstcheck": "6.1.0", "rstfmt": "0.0.10", - "rubocop": "1.36.0", + "rubocop": "1.37.0", "scalafix": "0.10.4", "scss-lint": "0.59.0", "secretlint": "5.2.4", - "semgrep": "0.117.0", + "semgrep": "0.118.0", "sfdx-scanner": "2.8.0", "sfdx-scanner-apex": "2.13.9", "sfdx-scanner-aura": "2.13.9", @@ -82,7 +82,7 @@ "shellcheck": "0.8.0", "shfmt": "3.6.0", "snakefmt": "0.6.1", - "snakemake": "7.16.0", + "snakemake": "7.16.1", "spectral": "5.9.2", "sql-lint": "1.0.0", "sqlfluff": "1.3.2", @@ -91,9 +91,9 @@ "swiftlint": "0.46.5", "syft": "0.59.0", "tekton-lint": "0.6.0", - "terraform-fmt": "1.3.2", + "terraform-fmt": "1.3.3", "terragrunt": "0.39.2", - "terrascan": "1.15.2", + "terrascan": "1.16.0", "tflint": "0.41.0", "trivy": "0.29.2", "tsqllint": "1.14.5.0", diff --git a/.automation/generated/megalinter-users.json b/.automation/generated/megalinter-users.json index fbb49984eb2..8e09a90df67 100644 --- a/.automation/generated/megalinter-users.json +++ b/.automation/generated/megalinter-users.json @@ -23,8 +23,8 @@ "downloads_url": "https://api.github.com/repos/nektos/act/downloads", "events_url": "https://api.github.com/repos/nektos/act/events", "fork": false, - "forks": 750, - "forks_count": 750, + "forks": 752, + "forks_count": 752, "forks_url": "https://api.github.com/repos/nektos/act/forks", "full_name": "nektos/act", "git_commits_url": "https://api.github.com/repos/nektos/act/git/commits{/sha}", @@ -59,11 +59,11 @@ "milestones_url": "https://api.github.com/repos/nektos/act/milestones{/number}", "mirror_url": null, "name": "act", - "network_count": 750, + "network_count": 752, "node_id": "MDEwOlJlcG9zaXRvcnkxNjM4ODMyNzk=", "notifications_url": "https://api.github.com/repos/nektos/act/notifications{?since,all,participating}", - "open_issues": 77, - "open_issues_count": 77, + "open_issues": 78, + "open_issues_count": 78, "organization": { "avatar_url": "https://avatars.githubusercontent.com/u/3813618?v=4", "events_url": "https://api.github.com/users/nektos/events{/privacy}", @@ -106,11 +106,11 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/nektos/act/pulls{/number}", - "pushed_at": "2022-10-17T19:37:06Z", + "pushed_at": "2022-10-19T20:34:14Z", "releases_url": "https://api.github.com/repos/nektos/act/releases{/id}", - "size": 6302, + "size": 6347, "ssh_url": "git@github.com:nektos/act.git", - "stargazers_count": 28558, + "stargazers_count": 28780, "stargazers_url": "https://api.github.com/repos/nektos/act/stargazers", "statuses_url": "https://api.github.com/repos/nektos/act/statuses/{sha}", "subscribers_count": 120, @@ -127,15 +127,15 @@ "golang" ], "trees_url": "https://api.github.com/repos/nektos/act/git/trees{/sha}", - "updated_at": "2022-10-18T05:35:09Z", + "updated_at": "2022-10-22T01:09:09Z", "url": "https://api.github.com/repos/nektos/act", "visibility": "public", - "watchers": 28558, - "watchers_count": 28558, + "watchers": 28780, + "watchers_count": 28780, "web_commit_signoff_required": false }, "repo_url": "https://github.com/nektos/act", - "stargazers": 28558 + "stargazers": 28780 }, { "info": { @@ -160,8 +160,8 @@ "downloads_url": "https://api.github.com/repos/stepancheg/rust-protobuf/downloads", "events_url": "https://api.github.com/repos/stepancheg/rust-protobuf/events", "fork": false, - "forks": 325, - "forks_count": 325, + "forks": 326, + "forks_count": 326, "forks_url": "https://api.github.com/repos/stepancheg/rust-protobuf/forks", "full_name": "stepancheg/rust-protobuf", "git_commits_url": "https://api.github.com/repos/stepancheg/rust-protobuf/git/commits{/sha}", @@ -196,7 +196,7 @@ "milestones_url": "https://api.github.com/repos/stepancheg/rust-protobuf/milestones{/number}", "mirror_url": null, "name": "rust-protobuf", - "network_count": 325, + "network_count": 326, "node_id": "MDEwOlJlcG9zaXRvcnkxMTcyNjYxNg==", "notifications_url": "https://api.github.com/repos/stepancheg/rust-protobuf/notifications{?since,all,participating}", "open_issues": 38, @@ -227,7 +227,7 @@ "releases_url": "https://api.github.com/repos/stepancheg/rust-protobuf/releases{/id}", "size": 55963, "ssh_url": "git@github.com:stepancheg/rust-protobuf.git", - "stargazers_count": 2206, + "stargazers_count": 2210, "stargazers_url": "https://api.github.com/repos/stepancheg/rust-protobuf/stargazers", "statuses_url": "https://api.github.com/repos/stepancheg/rust-protobuf/statuses/{sha}", "subscribers_count": 21, @@ -243,15 +243,15 @@ "serialization" ], "trees_url": "https://api.github.com/repos/stepancheg/rust-protobuf/git/trees{/sha}", - "updated_at": "2022-10-16T17:04:15Z", + "updated_at": "2022-10-20T08:08:32Z", "url": "https://api.github.com/repos/stepancheg/rust-protobuf", "visibility": "public", - "watchers": 2206, - "watchers_count": 2206, + "watchers": 2210, + "watchers_count": 2210, "web_commit_signoff_required": false }, "repo_url": "https://github.com/stepancheg/rust-protobuf", - "stargazers": 2206 + "stargazers": 2210 }, { "info": { @@ -276,8 +276,8 @@ "downloads_url": "https://api.github.com/repos/IlanCosman/tide/downloads", "events_url": "https://api.github.com/repos/IlanCosman/tide/events", "fork": false, - "forks": 68, - "forks_count": 68, + "forks": 69, + "forks_count": 69, "forks_url": "https://api.github.com/repos/IlanCosman/tide/forks", "full_name": "IlanCosman/tide", "git_commits_url": "https://api.github.com/repos/IlanCosman/tide/git/commits{/sha}", @@ -312,7 +312,7 @@ "milestones_url": "https://api.github.com/repos/IlanCosman/tide/milestones{/number}", "mirror_url": null, "name": "tide", - "network_count": 68, + "network_count": 69, "node_id": "MDEwOlJlcG9zaXRvcnkyNTIzNTE5NjA=", "notifications_url": "https://api.github.com/repos/IlanCosman/tide/notifications{?since,all,participating}", "open_issues": 22, @@ -343,7 +343,7 @@ "releases_url": "https://api.github.com/repos/IlanCosman/tide/releases{/id}", "size": 6422, "ssh_url": "git@github.com:IlanCosman/tide.git", - "stargazers_count": 1594, + "stargazers_count": 1600, "stargazers_url": "https://api.github.com/repos/IlanCosman/tide/stargazers", "statuses_url": "https://api.github.com/repos/IlanCosman/tide/statuses/{sha}", "subscribers_count": 11, @@ -360,15 +360,15 @@ "prompt" ], "trees_url": "https://api.github.com/repos/IlanCosman/tide/git/trees{/sha}", - "updated_at": "2022-10-17T16:52:30Z", + "updated_at": "2022-10-21T23:37:34Z", "url": "https://api.github.com/repos/IlanCosman/tide", "visibility": "public", - "watchers": 1594, - "watchers_count": 1594, + "watchers": 1600, + "watchers_count": 1600, "web_commit_signoff_required": false }, "repo_url": "https://github.com/IlanCosman/tide", - "stargazers": 1594 + "stargazers": 1600 }, { "info": { @@ -432,8 +432,8 @@ "network_count": 421, "node_id": "MDEwOlJlcG9zaXRvcnkxNDI4NzQ4ODA=", "notifications_url": "https://api.github.com/repos/microsoft/code-with-engineering-playbook/notifications{?since,all,participating}", - "open_issues": 34, - "open_issues_count": 34, + "open_issues": 29, + "open_issues_count": 29, "organization": { "avatar_url": "https://avatars.githubusercontent.com/u/6154722?v=4", "events_url": "https://api.github.com/users/microsoft/events{/privacy}", @@ -476,11 +476,11 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/microsoft/code-with-engineering-playbook/pulls{/number}", - "pushed_at": "2022-10-18T04:03:30Z", + "pushed_at": "2022-10-21T17:14:58Z", "releases_url": "https://api.github.com/repos/microsoft/code-with-engineering-playbook/releases{/id}", - "size": 47457, + "size": 48608, "ssh_url": "git@github.com:microsoft/code-with-engineering-playbook.git", - "stargazers_count": 1418, + "stargazers_count": 1421, "stargazers_url": "https://api.github.com/repos/microsoft/code-with-engineering-playbook/stargazers", "statuses_url": "https://api.github.com/repos/microsoft/code-with-engineering-playbook/statuses/{sha}", "subscribers_count": 2355, @@ -492,15 +492,15 @@ "temp_clone_token": null, "topics": [], "trees_url": "https://api.github.com/repos/microsoft/code-with-engineering-playbook/git/trees{/sha}", - "updated_at": "2022-10-17T20:35:53Z", + "updated_at": "2022-10-20T17:20:40Z", "url": "https://api.github.com/repos/microsoft/code-with-engineering-playbook", "visibility": "public", - "watchers": 1418, - "watchers_count": 1418, + "watchers": 1421, + "watchers_count": 1421, "web_commit_signoff_required": false }, "repo_url": "https://github.com/microsoft/code-with-engineering-playbook", - "stargazers": 1418 + "stargazers": 1421 }, { "info": { @@ -525,8 +525,8 @@ "downloads_url": "https://api.github.com/repos/dorssel/usbipd-win/downloads", "events_url": "https://api.github.com/repos/dorssel/usbipd-win/events", "fork": false, - "forks": 87, - "forks_count": 87, + "forks": 89, + "forks_count": 89, "forks_url": "https://api.github.com/repos/dorssel/usbipd-win/forks", "full_name": "dorssel/usbipd-win", "git_commits_url": "https://api.github.com/repos/dorssel/usbipd-win/git/commits{/sha}", @@ -561,11 +561,11 @@ "milestones_url": "https://api.github.com/repos/dorssel/usbipd-win/milestones{/number}", "mirror_url": null, "name": "usbipd-win", - "network_count": 87, + "network_count": 89, "node_id": "MDEwOlJlcG9zaXRvcnkzMDUyMDIxODk=", "notifications_url": "https://api.github.com/repos/dorssel/usbipd-win/notifications{?since,all,participating}", - "open_issues": 14, - "open_issues_count": 14, + "open_issues": 15, + "open_issues_count": 15, "owner": { "avatar_url": "https://avatars.githubusercontent.com/u/17404029?v=4", "events_url": "https://api.github.com/users/dorssel/events{/privacy}", @@ -588,11 +588,11 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/dorssel/usbipd-win/pulls{/number}", - "pushed_at": "2022-10-13T21:08:33Z", + "pushed_at": "2022-10-20T22:02:02Z", "releases_url": "https://api.github.com/repos/dorssel/usbipd-win/releases{/id}", "size": 1529, "ssh_url": "git@github.com:dorssel/usbipd-win.git", - "stargazers_count": 1282, + "stargazers_count": 1306, "stargazers_url": "https://api.github.com/repos/dorssel/usbipd-win/stargazers", "statuses_url": "https://api.github.com/repos/dorssel/usbipd-win/statuses/{sha}", "subscribers_count": 32, @@ -613,15 +613,15 @@ "wsl2" ], "trees_url": "https://api.github.com/repos/dorssel/usbipd-win/git/trees{/sha}", - "updated_at": "2022-10-18T03:20:24Z", + "updated_at": "2022-10-21T13:21:04Z", "url": "https://api.github.com/repos/dorssel/usbipd-win", "visibility": "public", - "watchers": 1282, - "watchers_count": 1282, + "watchers": 1306, + "watchers_count": 1306, "web_commit_signoff_required": false }, "repo_url": "https://github.com/dorssel/usbipd-win", - "stargazers": 1282 + "stargazers": 1306 }, { "info": { @@ -804,8 +804,8 @@ "network_count": 131, "node_id": "MDEwOlJlcG9zaXRvcnkzMDQ4MzAyMjY=", "notifications_url": "https://api.github.com/repos/oxsecurity/megalinter/notifications{?since,all,participating}", - "open_issues": 45, - "open_issues_count": 45, + "open_issues": 50, + "open_issues_count": 50, "organization": { "avatar_url": "https://avatars.githubusercontent.com/u/89921661?v=4", "events_url": "https://api.github.com/users/oxsecurity/events{/privacy}", @@ -848,11 +848,11 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/oxsecurity/megalinter/pulls{/number}", - "pushed_at": "2022-10-18T06:02:18Z", + "pushed_at": "2022-10-22T01:03:52Z", "releases_url": "https://api.github.com/repos/oxsecurity/megalinter/releases{/id}", - "size": 257967, + "size": 259268, "ssh_url": "git@github.com:oxsecurity/megalinter.git", - "stargazers_count": 886, + "stargazers_count": 891, "stargazers_url": "https://api.github.com/repos/oxsecurity/megalinter/stargazers", "statuses_url": "https://api.github.com/repos/oxsecurity/megalinter/statuses/{sha}", "subscribers_count": 9, @@ -885,15 +885,15 @@ "terraform" ], "trees_url": "https://api.github.com/repos/oxsecurity/megalinter/git/trees{/sha}", - "updated_at": "2022-10-18T06:17:11Z", + "updated_at": "2022-10-21T20:09:05Z", "url": "https://api.github.com/repos/oxsecurity/megalinter", "visibility": "public", - "watchers": 886, - "watchers_count": 886, + "watchers": 891, + "watchers_count": 891, "web_commit_signoff_required": false }, "repo_url": "https://github.com/oxsecurity/megalinter", - "stargazers": 886 + "stargazers": 891 }, { "info": { @@ -981,11 +981,11 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/unixorn/git-extra-commands/pulls{/number}", - "pushed_at": "2022-10-17T20:11:04Z", + "pushed_at": "2022-10-18T15:31:29Z", "releases_url": "https://api.github.com/repos/unixorn/git-extra-commands/releases{/id}", - "size": 531, + "size": 550, "ssh_url": "git@github.com:unixorn/git-extra-commands.git", - "stargazers_count": 812, + "stargazers_count": 816, "stargazers_url": "https://api.github.com/repos/unixorn/git-extra-commands/stargazers", "statuses_url": "https://api.github.com/repos/unixorn/git-extra-commands/statuses/{sha}", "subscribers_count": 17, @@ -1011,15 +1011,15 @@ "zsh-plugins" ], "trees_url": "https://api.github.com/repos/unixorn/git-extra-commands/git/trees{/sha}", - "updated_at": "2022-10-17T01:01:39Z", + "updated_at": "2022-10-21T12:14:48Z", "url": "https://api.github.com/repos/unixorn/git-extra-commands", "visibility": "public", - "watchers": 812, - "watchers_count": 812, + "watchers": 816, + "watchers_count": 816, "web_commit_signoff_required": false }, "repo_url": "https://github.com/unixorn/git-extra-commands", - "stargazers": 812 + "stargazers": 816 }, { "info": { @@ -1044,8 +1044,8 @@ "downloads_url": "https://api.github.com/repos/onedr0p/flux-cluster-template/downloads", "events_url": "https://api.github.com/repos/onedr0p/flux-cluster-template/events", "fork": false, - "forks": 136, - "forks_count": 136, + "forks": 139, + "forks_count": 139, "forks_url": "https://api.github.com/repos/onedr0p/flux-cluster-template/forks", "full_name": "onedr0p/flux-cluster-template", "git_commits_url": "https://api.github.com/repos/onedr0p/flux-cluster-template/git/commits{/sha}", @@ -1080,11 +1080,11 @@ "milestones_url": "https://api.github.com/repos/onedr0p/flux-cluster-template/milestones{/number}", "mirror_url": null, "name": "flux-cluster-template", - "network_count": 136, + "network_count": 139, "node_id": "MDEwOlJlcG9zaXRvcnkzNTc4OTkyNDA=", "notifications_url": "https://api.github.com/repos/onedr0p/flux-cluster-template/notifications{?since,all,participating}", - "open_issues": 8, - "open_issues_count": 8, + "open_issues": 9, + "open_issues_count": 9, "owner": { "avatar_url": "https://avatars.githubusercontent.com/u/213795?v=4", "events_url": "https://api.github.com/users/onedr0p/events{/privacy}", @@ -1107,11 +1107,11 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/onedr0p/flux-cluster-template/pulls{/number}", - "pushed_at": "2022-10-17T16:20:34Z", + "pushed_at": "2022-10-21T23:26:38Z", "releases_url": "https://api.github.com/repos/onedr0p/flux-cluster-template/releases{/id}", - "size": 1002, + "size": 1017, "ssh_url": "git@github.com:onedr0p/flux-cluster-template.git", - "stargazers_count": 786, + "stargazers_count": 789, "stargazers_url": "https://api.github.com/repos/onedr0p/flux-cluster-template/stargazers", "statuses_url": "https://api.github.com/repos/onedr0p/flux-cluster-template/statuses/{sha}", "subscribers_count": 20, @@ -1136,15 +1136,15 @@ "traefik" ], "trees_url": "https://api.github.com/repos/onedr0p/flux-cluster-template/git/trees{/sha}", - "updated_at": "2022-10-17T21:12:58Z", + "updated_at": "2022-10-21T01:22:54Z", "url": "https://api.github.com/repos/onedr0p/flux-cluster-template", "visibility": "public", - "watchers": 786, - "watchers_count": 786, + "watchers": 789, + "watchers_count": 789, "web_commit_signoff_required": false }, "repo_url": "https://github.com/k8s-at-home/flux-cluster-template", - "stargazers": 786 + "stargazers": 789 }, { "info": { @@ -1169,8 +1169,8 @@ "downloads_url": "https://api.github.com/repos/onedr0p/home-ops/downloads", "events_url": "https://api.github.com/repos/onedr0p/home-ops/events", "fork": false, - "forks": 96, - "forks_count": 96, + "forks": 100, + "forks_count": 100, "forks_url": "https://api.github.com/repos/onedr0p/home-ops/forks", "full_name": "onedr0p/home-ops", "git_commits_url": "https://api.github.com/repos/onedr0p/home-ops/git/commits{/sha}", @@ -1205,11 +1205,11 @@ "milestones_url": "https://api.github.com/repos/onedr0p/home-ops/milestones{/number}", "mirror_url": null, "name": "home-ops", - "network_count": 96, + "network_count": 100, "node_id": "MDEwOlJlcG9zaXRvcnkyMzA5OTk4MjY=", "notifications_url": "https://api.github.com/repos/onedr0p/home-ops/notifications{?since,all,participating}", - "open_issues": 7, - "open_issues_count": 7, + "open_issues": 10, + "open_issues_count": 10, "owner": { "avatar_url": "https://avatars.githubusercontent.com/u/213795?v=4", "events_url": "https://api.github.com/users/onedr0p/events{/privacy}", @@ -1232,11 +1232,11 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/onedr0p/home-ops/pulls{/number}", - "pushed_at": "2022-10-18T03:56:19Z", + "pushed_at": "2022-10-22T00:14:19Z", "releases_url": "https://api.github.com/repos/onedr0p/home-ops/releases{/id}", - "size": 27289, + "size": 27327, "ssh_url": "git@github.com:onedr0p/home-ops.git", - "stargazers_count": 644, + "stargazers_count": 647, "stargazers_url": "https://api.github.com/repos/onedr0p/home-ops/stargazers", "statuses_url": "https://api.github.com/repos/onedr0p/home-ops/statuses/{sha}", "subscribers_count": 9, @@ -1258,15 +1258,15 @@ "terraform" ], "trees_url": "https://api.github.com/repos/onedr0p/home-ops/git/trees{/sha}", - "updated_at": "2022-10-16T11:40:14Z", + "updated_at": "2022-10-21T14:39:34Z", "url": "https://api.github.com/repos/onedr0p/home-ops", "visibility": "public", - "watchers": 644, - "watchers_count": 644, + "watchers": 647, + "watchers_count": 647, "web_commit_signoff_required": false }, "repo_url": "https://github.com/onedr0p/home-ops", - "stargazers": 644 + "stargazers": 647 }, { "info": { @@ -1354,11 +1354,11 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/unixorn/zsh-quickstart-kit/pulls{/number}", - "pushed_at": "2022-10-17T18:26:58Z", + "pushed_at": "2022-10-19T20:47:14Z", "releases_url": "https://api.github.com/repos/unixorn/zsh-quickstart-kit/releases{/id}", - "size": 418, + "size": 429, "ssh_url": "git@github.com:unixorn/zsh-quickstart-kit.git", - "stargazers_count": 575, + "stargazers_count": 579, "stargazers_url": "https://api.github.com/repos/unixorn/zsh-quickstart-kit/stargazers", "statuses_url": "https://api.github.com/repos/unixorn/zsh-quickstart-kit/statuses/{sha}", "subscribers_count": 13, @@ -1385,15 +1385,15 @@ "zshrc-enhancements" ], "trees_url": "https://api.github.com/repos/unixorn/zsh-quickstart-kit/git/trees{/sha}", - "updated_at": "2022-10-13T22:39:10Z", + "updated_at": "2022-10-20T05:28:39Z", "url": "https://api.github.com/repos/unixorn/zsh-quickstart-kit", "visibility": "public", - "watchers": 575, - "watchers_count": 575, + "watchers": 579, + "watchers_count": 579, "web_commit_signoff_required": false }, "repo_url": "https://github.com/unixorn/zsh-quickstart-kit", - "stargazers": 575 + "stargazers": 579 }, { "info": { @@ -1457,8 +1457,8 @@ "network_count": 111, "node_id": "MDEwOlJlcG9zaXRvcnk4MDcxMTkzMw==", "notifications_url": "https://api.github.com/repos/secureCodeBox/secureCodeBox/notifications{?since,all,participating}", - "open_issues": 114, - "open_issues_count": 114, + "open_issues": 116, + "open_issues_count": 116, "organization": { "avatar_url": "https://avatars.githubusercontent.com/u/34573705?v=4", "events_url": "https://api.github.com/users/secureCodeBox/events{/privacy}", @@ -1501,9 +1501,9 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/secureCodeBox/secureCodeBox/pulls{/number}", - "pushed_at": "2022-10-17T09:26:17Z", + "pushed_at": "2022-10-20T09:25:11Z", "releases_url": "https://api.github.com/repos/secureCodeBox/secureCodeBox/releases{/id}", - "size": 28596, + "size": 28605, "ssh_url": "git@github.com:secureCodeBox/secureCodeBox.git", "stargazers_count": 533, "stargazers_url": "https://api.github.com/repos/secureCodeBox/secureCodeBox/stargazers", @@ -1699,8 +1699,8 @@ "downloads_url": "https://api.github.com/repos/KelvinTegelaar/CIPP/downloads", "events_url": "https://api.github.com/repos/KelvinTegelaar/CIPP/events", "fork": false, - "forks": 1458, - "forks_count": 1458, + "forks": 1482, + "forks_count": 1482, "forks_url": "https://api.github.com/repos/KelvinTegelaar/CIPP/forks", "full_name": "KelvinTegelaar/CIPP", "git_commits_url": "https://api.github.com/repos/KelvinTegelaar/CIPP/git/commits{/sha}", @@ -1735,7 +1735,7 @@ "milestones_url": "https://api.github.com/repos/KelvinTegelaar/CIPP/milestones{/number}", "mirror_url": null, "name": "CIPP", - "network_count": 1458, + "network_count": 1482, "node_id": "R_kgDOGNiHEA", "notifications_url": "https://api.github.com/repos/KelvinTegelaar/CIPP/notifications{?since,all,participating}", "open_issues": 3, @@ -1762,14 +1762,14 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/KelvinTegelaar/CIPP/pulls{/number}", - "pushed_at": "2022-10-17T14:40:19Z", + "pushed_at": "2022-10-21T11:25:21Z", "releases_url": "https://api.github.com/repos/KelvinTegelaar/CIPP/releases{/id}", - "size": 63167, + "size": 62743, "ssh_url": "git@github.com:KelvinTegelaar/CIPP.git", - "stargazers_count": 418, + "stargazers_count": 420, "stargazers_url": "https://api.github.com/repos/KelvinTegelaar/CIPP/stargazers", "statuses_url": "https://api.github.com/repos/KelvinTegelaar/CIPP/statuses/{sha}", - "subscribers_count": 21, + "subscribers_count": 23, "subscribers_url": "https://api.github.com/repos/KelvinTegelaar/CIPP/subscribers", "subscription_url": "https://api.github.com/repos/KelvinTegelaar/CIPP/subscription", "svn_url": "https://github.com/KelvinTegelaar/CIPP", @@ -1778,15 +1778,15 @@ "temp_clone_token": null, "topics": [], "trees_url": "https://api.github.com/repos/KelvinTegelaar/CIPP/git/trees{/sha}", - "updated_at": "2022-10-16T04:11:37Z", + "updated_at": "2022-10-20T13:23:14Z", "url": "https://api.github.com/repos/KelvinTegelaar/CIPP", "visibility": "public", - "watchers": 418, - "watchers_count": 418, + "watchers": 420, + "watchers_count": 420, "web_commit_signoff_required": false }, "repo_url": "https://github.com/KelvinTegelaar/CIPP", - "stargazers": 418 + "stargazers": 420 }, { "info": { @@ -1892,7 +1892,7 @@ "releases_url": "https://api.github.com/repos/practicalli/clojure-deps-edn/releases{/id}", "size": 434, "ssh_url": "git@github.com:practicalli/clojure-deps-edn.git", - "stargazers_count": 415, + "stargazers_count": 416, "stargazers_url": "https://api.github.com/repos/practicalli/clojure-deps-edn/stargazers", "statuses_url": "https://api.github.com/repos/practicalli/clojure-deps-edn/statuses/{sha}", "subscribers_count": 12, @@ -1908,15 +1908,15 @@ "deps-edn" ], "trees_url": "https://api.github.com/repos/practicalli/clojure-deps-edn/git/trees{/sha}", - "updated_at": "2022-10-17T07:26:25Z", + "updated_at": "2022-10-21T17:30:49Z", "url": "https://api.github.com/repos/practicalli/clojure-deps-edn", "visibility": "public", - "watchers": 415, - "watchers_count": 415, + "watchers": 416, + "watchers_count": 416, "web_commit_signoff_required": false }, "repo_url": "https://github.com/practicalli/clojure-deps-edn", - "stargazers": 415 + "stargazers": 416 }, { "info": { @@ -2004,9 +2004,9 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/llaville/php-compatinfo/pulls{/number}", - "pushed_at": "2022-10-16T15:54:52Z", + "pushed_at": "2022-10-18T14:47:23Z", "releases_url": "https://api.github.com/repos/llaville/php-compatinfo/releases{/id}", - "size": 10577, + "size": 10585, "ssh_url": "git@github.com:llaville/php-compatinfo.git", "stargazers_count": 356, "stargazers_url": "https://api.github.com/repos/llaville/php-compatinfo/stargazers", @@ -2271,7 +2271,7 @@ "releases_url": "https://api.github.com/repos/OCSInventory-NG/OCSInventory-Server/releases{/id}", "size": 54163, "ssh_url": "git@github.com:OCSInventory-NG/OCSInventory-Server.git", - "stargazers_count": 278, + "stargazers_count": 280, "stargazers_url": "https://api.github.com/repos/OCSInventory-NG/OCSInventory-Server/stargazers", "statuses_url": "https://api.github.com/repos/OCSInventory-NG/OCSInventory-Server/statuses/{sha}", "subscribers_count": 58, @@ -2292,15 +2292,15 @@ "server" ], "trees_url": "https://api.github.com/repos/OCSInventory-NG/OCSInventory-Server/git/trees{/sha}", - "updated_at": "2022-10-06T09:01:40Z", + "updated_at": "2022-10-19T03:08:13Z", "url": "https://api.github.com/repos/OCSInventory-NG/OCSInventory-Server", "visibility": "public", - "watchers": 278, - "watchers_count": 278, + "watchers": 280, + "watchers_count": 280, "web_commit_signoff_required": false }, "repo_url": "https://github.com/OCSInventory-NG/OCSInventory-Server", - "stargazers": 278 + "stargazers": 280 }, { "info": { @@ -2364,8 +2364,8 @@ "network_count": 15, "node_id": "MDEwOlJlcG9zaXRvcnkyMjk1Mzg5NDg=", "notifications_url": "https://api.github.com/repos/xUnholy/k8s-gitops/notifications{?since,all,participating}", - "open_issues": 47, - "open_issues_count": 47, + "open_issues": 52, + "open_issues_count": 52, "owner": { "avatar_url": "https://avatars.githubusercontent.com/u/20387402?v=4", "events_url": "https://api.github.com/users/xUnholy/events{/privacy}", @@ -2388,9 +2388,9 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/xUnholy/k8s-gitops/pulls{/number}", - "pushed_at": "2022-10-18T04:40:59Z", + "pushed_at": "2022-10-22T00:34:54Z", "releases_url": "https://api.github.com/repos/xUnholy/k8s-gitops/releases{/id}", - "size": 6890, + "size": 6907, "ssh_url": "git@github.com:xUnholy/k8s-gitops.git", "stargazers_count": 264, "stargazers_url": "https://api.github.com/repos/xUnholy/k8s-gitops/stargazers", @@ -2525,7 +2525,7 @@ "releases_url": "https://api.github.com/repos/leosuncin/nest-auth-example/releases{/id}", "size": 4617, "ssh_url": "git@github.com:leosuncin/nest-auth-example.git", - "stargazers_count": 202, + "stargazers_count": 203, "stargazers_url": "https://api.github.com/repos/leosuncin/nest-auth-example/stargazers", "statuses_url": "https://api.github.com/repos/leosuncin/nest-auth-example/statuses/{sha}", "subscribers_count": 4, @@ -2544,15 +2544,15 @@ "typescript" ], "trees_url": "https://api.github.com/repos/leosuncin/nest-auth-example/git/trees{/sha}", - "updated_at": "2022-10-15T14:52:17Z", + "updated_at": "2022-10-18T12:05:26Z", "url": "https://api.github.com/repos/leosuncin/nest-auth-example", "visibility": "public", - "watchers": 202, - "watchers_count": 202, + "watchers": 203, + "watchers_count": 203, "web_commit_signoff_required": false }, "repo_url": "https://github.com/leosuncin/nest-auth-example", - "stargazers": 202 + "stargazers": 203 }, { "info": { @@ -2577,8 +2577,8 @@ "downloads_url": "https://api.github.com/repos/bjw-s/home-ops/downloads", "events_url": "https://api.github.com/repos/bjw-s/home-ops/events", "fork": false, - "forks": 24, - "forks_count": 24, + "forks": 26, + "forks_count": 26, "forks_url": "https://api.github.com/repos/bjw-s/home-ops/forks", "full_name": "bjw-s/home-ops", "git_commits_url": "https://api.github.com/repos/bjw-s/home-ops/git/commits{/sha}", @@ -2613,11 +2613,11 @@ "milestones_url": "https://api.github.com/repos/bjw-s/home-ops/milestones{/number}", "mirror_url": null, "name": "home-ops", - "network_count": 24, + "network_count": 26, "node_id": "MDEwOlJlcG9zaXRvcnkyODc1MDA0NTY=", "notifications_url": "https://api.github.com/repos/bjw-s/home-ops/notifications{?since,all,participating}", - "open_issues": 11, - "open_issues_count": 11, + "open_issues": 8, + "open_issues_count": 8, "owner": { "avatar_url": "https://avatars.githubusercontent.com/u/6213398?v=4", "events_url": "https://api.github.com/users/bjw-s/events{/privacy}", @@ -2640,11 +2640,11 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/bjw-s/home-ops/pulls{/number}", - "pushed_at": "2022-10-18T00:34:17Z", + "pushed_at": "2022-10-22T00:32:49Z", "releases_url": "https://api.github.com/repos/bjw-s/home-ops/releases{/id}", - "size": 32303, + "size": 32379, "ssh_url": "git@github.com:bjw-s/home-ops.git", - "stargazers_count": 189, + "stargazers_count": 191, "stargazers_url": "https://api.github.com/repos/bjw-s/home-ops/stargazers", "statuses_url": "https://api.github.com/repos/bjw-s/home-ops/statuses/{sha}", "subscribers_count": 2, @@ -2663,15 +2663,15 @@ "renovate" ], "trees_url": "https://api.github.com/repos/bjw-s/home-ops/git/trees{/sha}", - "updated_at": "2022-10-17T17:28:32Z", + "updated_at": "2022-10-21T10:32:34Z", "url": "https://api.github.com/repos/bjw-s/home-ops", "visibility": "public", - "watchers": 189, - "watchers_count": 189, + "watchers": 191, + "watchers_count": 191, "web_commit_signoff_required": false }, "repo_url": "https://github.com/bjw-s/home-ops", - "stargazers": 189 + "stargazers": 191 }, { "info": { @@ -2881,9 +2881,9 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/toboshii/home-ops/pulls{/number}", - "pushed_at": "2022-10-18T04:51:58Z", + "pushed_at": "2022-10-21T16:34:38Z", "releases_url": "https://api.github.com/repos/toboshii/home-ops/releases{/id}", - "size": 2720, + "size": 2726, "ssh_url": "git@github.com:toboshii/home-ops.git", "stargazers_count": 136, "stargazers_url": "https://api.github.com/repos/toboshii/home-ops/stargazers", @@ -2911,7 +2911,7 @@ "terraform" ], "trees_url": "https://api.github.com/repos/toboshii/home-ops/git/trees{/sha}", - "updated_at": "2022-10-16T15:34:13Z", + "updated_at": "2022-10-21T11:45:01Z", "url": "https://api.github.com/repos/toboshii/home-ops", "visibility": "public", "watchers": 136, @@ -2983,8 +2983,8 @@ "network_count": 72, "node_id": "MDEwOlJlcG9zaXRvcnk0NjEyMjQ2MA==", "notifications_url": "https://api.github.com/repos/newrelic/newrelic-python-agent/notifications{?since,all,participating}", - "open_issues": 29, - "open_issues_count": 29, + "open_issues": 31, + "open_issues_count": 31, "organization": { "avatar_url": "https://avatars.githubusercontent.com/u/31739?v=4", "events_url": "https://api.github.com/users/newrelic/events{/privacy}", @@ -3027,9 +3027,9 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/newrelic/newrelic-python-agent/pulls{/number}", - "pushed_at": "2022-10-17T22:25:43Z", + "pushed_at": "2022-10-21T20:43:27Z", "releases_url": "https://api.github.com/repos/newrelic/newrelic-python-agent/releases{/id}", - "size": 16487, + "size": 16515, "ssh_url": "git@github.com:newrelic/newrelic-python-agent.git", "stargazers_count": 119, "stargazers_url": "https://api.github.com/repos/newrelic/newrelic-python-agent/stargazers", @@ -3147,7 +3147,7 @@ "releases_url": "https://api.github.com/repos/nvuillam/npm-groovy-lint/releases{/id}", "size": 73565, "ssh_url": "git@github.com:nvuillam/npm-groovy-lint.git", - "stargazers_count": 115, + "stargazers_count": 116, "stargazers_url": "https://api.github.com/repos/nvuillam/npm-groovy-lint/stargazers", "statuses_url": "https://api.github.com/repos/nvuillam/npm-groovy-lint/statuses/{sha}", "subscribers_count": 3, @@ -3174,15 +3174,15 @@ "sarif-report" ], "trees_url": "https://api.github.com/repos/nvuillam/npm-groovy-lint/git/trees{/sha}", - "updated_at": "2022-10-05T09:49:06Z", + "updated_at": "2022-10-21T04:35:32Z", "url": "https://api.github.com/repos/nvuillam/npm-groovy-lint", "visibility": "public", - "watchers": 115, - "watchers_count": 115, + "watchers": 116, + "watchers_count": 116, "web_commit_signoff_required": false }, "repo_url": "https://github.com/nvuillam/npm-groovy-lint", - "stargazers": 115 + "stargazers": 116 }, { "info": { @@ -3240,8 +3240,8 @@ "network_count": 13, "node_id": "MDEwOlJlcG9zaXRvcnkyMzY4ODg0MDI=", "notifications_url": "https://api.github.com/repos/carpenike/k8s-gitops/notifications{?since,all,participating}", - "open_issues": 6, - "open_issues_count": 6, + "open_issues": 12, + "open_issues_count": 12, "owner": { "avatar_url": "https://avatars.githubusercontent.com/u/1302442?v=4", "events_url": "https://api.github.com/users/carpenike/events{/privacy}", @@ -3264,11 +3264,11 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/carpenike/k8s-gitops/pulls{/number}", - "pushed_at": "2022-10-18T05:18:36Z", + "pushed_at": "2022-10-22T00:12:03Z", "releases_url": "https://api.github.com/repos/carpenike/k8s-gitops/releases{/id}", - "size": 123946, + "size": 123963, "ssh_url": "git@github.com:carpenike/k8s-gitops.git", - "stargazers_count": 115, + "stargazers_count": 116, "stargazers_url": "https://api.github.com/repos/carpenike/k8s-gitops/stargazers", "statuses_url": "https://api.github.com/repos/carpenike/k8s-gitops/statuses/{sha}", "subscribers_count": 2, @@ -3287,15 +3287,15 @@ "kubernetes" ], "trees_url": "https://api.github.com/repos/carpenike/k8s-gitops/git/trees{/sha}", - "updated_at": "2022-10-13T18:53:53Z", + "updated_at": "2022-10-19T16:58:14Z", "url": "https://api.github.com/repos/carpenike/k8s-gitops", "visibility": "public", - "watchers": 115, - "watchers_count": 115, + "watchers": 116, + "watchers_count": 116, "web_commit_signoff_required": false }, "repo_url": "https://github.com/carpenike/k8s-gitops", - "stargazers": 115 + "stargazers": 116 }, { "info": { @@ -3387,7 +3387,7 @@ "releases_url": "https://api.github.com/repos/joeygoksu/prime-nestjs/releases{/id}", "size": 997, "ssh_url": "git@github.com:joeygoksu/prime-nestjs.git", - "stargazers_count": 110, + "stargazers_count": 112, "stargazers_url": "https://api.github.com/repos/joeygoksu/prime-nestjs/stargazers", "statuses_url": "https://api.github.com/repos/joeygoksu/prime-nestjs/statuses/{sha}", "subscribers_count": 7, @@ -3411,15 +3411,15 @@ "typescript" ], "trees_url": "https://api.github.com/repos/joeygoksu/prime-nestjs/git/trees{/sha}", - "updated_at": "2022-10-03T10:45:46Z", + "updated_at": "2022-10-20T15:07:35Z", "url": "https://api.github.com/repos/joeygoksu/prime-nestjs", "visibility": "public", - "watchers": 110, - "watchers_count": 110, + "watchers": 112, + "watchers_count": 112, "web_commit_signoff_required": false }, "repo_url": "https://github.com/joeygoksu/prime-nestjs", - "stargazers": 110 + "stargazers": 112 }, { "info": { @@ -3511,7 +3511,7 @@ "releases_url": "https://api.github.com/repos/meichthys/foss_photo_libraries/releases{/id}", "size": 85, "ssh_url": "git@github.com:meichthys/foss_photo_libraries.git", - "stargazers_count": 104, + "stargazers_count": 108, "stargazers_url": "https://api.github.com/repos/meichthys/foss_photo_libraries/stargazers", "statuses_url": "https://api.github.com/repos/meichthys/foss_photo_libraries/statuses/{sha}", "subscribers_count": 8, @@ -3523,15 +3523,146 @@ "temp_clone_token": null, "topics": [], "trees_url": "https://api.github.com/repos/meichthys/foss_photo_libraries/git/trees{/sha}", - "updated_at": "2022-10-17T03:27:18Z", + "updated_at": "2022-10-21T23:57:43Z", "url": "https://api.github.com/repos/meichthys/foss_photo_libraries", "visibility": "public", - "watchers": 104, - "watchers_count": 104, + "watchers": 108, + "watchers_count": 108, "web_commit_signoff_required": false }, "repo_url": "https://github.com/meichthys/foss_photo_libraries", - "stargazers": 104 + "stargazers": 108 + }, + { + "info": { + "allow_forking": true, + "archive_url": "https://api.github.com/repos/T145/black-mirror/{archive_format}{/ref}", + "archived": false, + "assignees_url": "https://api.github.com/repos/T145/black-mirror/assignees{/user}", + "blobs_url": "https://api.github.com/repos/T145/black-mirror/git/blobs{/sha}", + "branches_url": "https://api.github.com/repos/T145/black-mirror/branches{/branch}", + "clone_url": "https://github.com/T145/black-mirror.git", + "collaborators_url": "https://api.github.com/repos/T145/black-mirror/collaborators{/collaborator}", + "comments_url": "https://api.github.com/repos/T145/black-mirror/comments{/number}", + "commits_url": "https://api.github.com/repos/T145/black-mirror/commits{/sha}", + "compare_url": "https://api.github.com/repos/T145/black-mirror/compare/{base}...{head}", + "contents_url": "https://api.github.com/repos/T145/black-mirror/contents/{+path}", + "contributors_url": "https://api.github.com/repos/T145/black-mirror/contributors", + "created_at": "2021-05-28T17:01:48Z", + "default_branch": "master", + "deployments_url": "https://api.github.com/repos/T145/black-mirror/deployments", + "description": "Blacklists and whitelists that aim to promote security, safety, and sanity across the internet!", + "disabled": false, + "downloads_url": "https://api.github.com/repos/T145/black-mirror/downloads", + "events_url": "https://api.github.com/repos/T145/black-mirror/events", + "fork": false, + "forks": 6, + "forks_count": 6, + "forks_url": "https://api.github.com/repos/T145/black-mirror/forks", + "full_name": "T145/black-mirror", + "git_commits_url": "https://api.github.com/repos/T145/black-mirror/git/commits{/sha}", + "git_refs_url": "https://api.github.com/repos/T145/black-mirror/git/refs{/sha}", + "git_tags_url": "https://api.github.com/repos/T145/black-mirror/git/tags{/sha}", + "git_url": "git://github.com/T145/black-mirror.git", + "has_downloads": true, + "has_issues": true, + "has_pages": false, + "has_projects": true, + "has_wiki": false, + "homepage": "", + "hooks_url": "https://api.github.com/repos/T145/black-mirror/hooks", + "html_url": "https://github.com/T145/black-mirror", + "id": 371767474, + "is_template": false, + "issue_comment_url": "https://api.github.com/repos/T145/black-mirror/issues/comments{/number}", + "issue_events_url": "https://api.github.com/repos/T145/black-mirror/issues/events{/number}", + "issues_url": "https://api.github.com/repos/T145/black-mirror/issues{/number}", + "keys_url": "https://api.github.com/repos/T145/black-mirror/keys{/key_id}", + "labels_url": "https://api.github.com/repos/T145/black-mirror/labels{/name}", + "language": "Shell", + "languages_url": "https://api.github.com/repos/T145/black-mirror/languages", + "license": { + "key": "agpl-3.0", + "name": "GNU Affero General Public License v3.0", + "node_id": "MDc6TGljZW5zZTE=", + "spdx_id": "AGPL-3.0", + "url": "https://api.github.com/licenses/agpl-3.0" + }, + "merges_url": "https://api.github.com/repos/T145/black-mirror/merges", + "milestones_url": "https://api.github.com/repos/T145/black-mirror/milestones{/number}", + "mirror_url": null, + "name": "black-mirror", + "network_count": 6, + "node_id": "MDEwOlJlcG9zaXRvcnkzNzE3Njc0NzQ=", + "notifications_url": "https://api.github.com/repos/T145/black-mirror/notifications{?since,all,participating}", + "open_issues": 3, + "open_issues_count": 3, + "owner": { + "avatar_url": "https://avatars.githubusercontent.com/u/1214129?v=4", + "events_url": "https://api.github.com/users/T145/events{/privacy}", + "followers_url": "https://api.github.com/users/T145/followers", + "following_url": "https://api.github.com/users/T145/following{/other_user}", + "gists_url": "https://api.github.com/users/T145/gists{/gist_id}", + "gravatar_id": "", + "html_url": "https://github.com/T145", + "id": 1214129, + "login": "T145", + "node_id": "MDQ6VXNlcjEyMTQxMjk=", + "organizations_url": "https://api.github.com/users/T145/orgs", + "received_events_url": "https://api.github.com/users/T145/received_events", + "repos_url": "https://api.github.com/users/T145/repos", + "site_admin": false, + "starred_url": "https://api.github.com/users/T145/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/T145/subscriptions", + "type": "User", + "url": "https://api.github.com/users/T145" + }, + "private": false, + "pulls_url": "https://api.github.com/repos/T145/black-mirror/pulls{/number}", + "pushed_at": "2022-10-21T13:54:09Z", + "releases_url": "https://api.github.com/repos/T145/black-mirror/releases{/id}", + "size": 86820, + "ssh_url": "git@github.com:T145/black-mirror.git", + "stargazers_count": 99, + "stargazers_url": "https://api.github.com/repos/T145/black-mirror/stargazers", + "statuses_url": "https://api.github.com/repos/T145/black-mirror/statuses/{sha}", + "subscribers_count": 2, + "subscribers_url": "https://api.github.com/repos/T145/black-mirror/subscribers", + "subscription_url": "https://api.github.com/repos/T145/black-mirror/subscription", + "svn_url": "https://github.com/T145/black-mirror", + "tags_url": "https://api.github.com/repos/T145/black-mirror/tags", + "teams_url": "https://api.github.com/repos/T145/black-mirror/teams", + "temp_clone_token": null, + "topics": [ + "adblock-list", + "blackhole-lists", + "blacklist", + "blacklist-data", + "blacklist-domains", + "blacklist-feed", + "blacklist-ips", + "blacklist-management", + "blacklist-script", + "blacklist-service", + "blocklist", + "daily-build", + "dns", + "privacy", + "whitelist", + "whitelists", + "whitelists-hosts", + "whitelists-ip" + ], + "trees_url": "https://api.github.com/repos/T145/black-mirror/git/trees{/sha}", + "updated_at": "2022-10-21T02:25:19Z", + "url": "https://api.github.com/repos/T145/black-mirror", + "visibility": "public", + "watchers": 99, + "watchers_count": 99, + "web_commit_signoff_required": false + }, + "repo_url": "https://github.com/T145/black-mirror", + "stargazers": 99 }, { "info": { @@ -3556,8 +3687,8 @@ "downloads_url": "https://api.github.com/repos/cbg-ethz/V-pipe/downloads", "events_url": "https://api.github.com/repos/cbg-ethz/V-pipe/events", "fork": false, - "forks": 29, - "forks_count": 29, + "forks": 30, + "forks_count": 30, "forks_url": "https://api.github.com/repos/cbg-ethz/V-pipe/forks", "full_name": "cbg-ethz/V-pipe", "git_commits_url": "https://api.github.com/repos/cbg-ethz/V-pipe/git/commits{/sha}", @@ -3592,7 +3723,7 @@ "milestones_url": "https://api.github.com/repos/cbg-ethz/V-pipe/milestones{/number}", "mirror_url": null, "name": "V-pipe", - "network_count": 29, + "network_count": 30, "node_id": "MDEwOlJlcG9zaXRvcnk4Nzc4OTcwOQ==", "notifications_url": "https://api.github.com/repos/cbg-ethz/V-pipe/notifications{?since,all,participating}", "open_issues": 21, @@ -3680,137 +3811,6 @@ "repo_url": "https://github.com/cbg-ethz/V-pipe", "stargazers": 94 }, - { - "info": { - "allow_forking": true, - "archive_url": "https://api.github.com/repos/T145/black-mirror/{archive_format}{/ref}", - "archived": false, - "assignees_url": "https://api.github.com/repos/T145/black-mirror/assignees{/user}", - "blobs_url": "https://api.github.com/repos/T145/black-mirror/git/blobs{/sha}", - "branches_url": "https://api.github.com/repos/T145/black-mirror/branches{/branch}", - "clone_url": "https://github.com/T145/black-mirror.git", - "collaborators_url": "https://api.github.com/repos/T145/black-mirror/collaborators{/collaborator}", - "comments_url": "https://api.github.com/repos/T145/black-mirror/comments{/number}", - "commits_url": "https://api.github.com/repos/T145/black-mirror/commits{/sha}", - "compare_url": "https://api.github.com/repos/T145/black-mirror/compare/{base}...{head}", - "contents_url": "https://api.github.com/repos/T145/black-mirror/contents/{+path}", - "contributors_url": "https://api.github.com/repos/T145/black-mirror/contributors", - "created_at": "2021-05-28T17:01:48Z", - "default_branch": "master", - "deployments_url": "https://api.github.com/repos/T145/black-mirror/deployments", - "description": "Blacklists and whitelists that aim to promote security, safety, and sanity across the internet!", - "disabled": false, - "downloads_url": "https://api.github.com/repos/T145/black-mirror/downloads", - "events_url": "https://api.github.com/repos/T145/black-mirror/events", - "fork": false, - "forks": 6, - "forks_count": 6, - "forks_url": "https://api.github.com/repos/T145/black-mirror/forks", - "full_name": "T145/black-mirror", - "git_commits_url": "https://api.github.com/repos/T145/black-mirror/git/commits{/sha}", - "git_refs_url": "https://api.github.com/repos/T145/black-mirror/git/refs{/sha}", - "git_tags_url": "https://api.github.com/repos/T145/black-mirror/git/tags{/sha}", - "git_url": "git://github.com/T145/black-mirror.git", - "has_downloads": true, - "has_issues": true, - "has_pages": false, - "has_projects": true, - "has_wiki": false, - "homepage": "", - "hooks_url": "https://api.github.com/repos/T145/black-mirror/hooks", - "html_url": "https://github.com/T145/black-mirror", - "id": 371767474, - "is_template": false, - "issue_comment_url": "https://api.github.com/repos/T145/black-mirror/issues/comments{/number}", - "issue_events_url": "https://api.github.com/repos/T145/black-mirror/issues/events{/number}", - "issues_url": "https://api.github.com/repos/T145/black-mirror/issues{/number}", - "keys_url": "https://api.github.com/repos/T145/black-mirror/keys{/key_id}", - "labels_url": "https://api.github.com/repos/T145/black-mirror/labels{/name}", - "language": "Shell", - "languages_url": "https://api.github.com/repos/T145/black-mirror/languages", - "license": { - "key": "agpl-3.0", - "name": "GNU Affero General Public License v3.0", - "node_id": "MDc6TGljZW5zZTE=", - "spdx_id": "AGPL-3.0", - "url": "https://api.github.com/licenses/agpl-3.0" - }, - "merges_url": "https://api.github.com/repos/T145/black-mirror/merges", - "milestones_url": "https://api.github.com/repos/T145/black-mirror/milestones{/number}", - "mirror_url": null, - "name": "black-mirror", - "network_count": 6, - "node_id": "MDEwOlJlcG9zaXRvcnkzNzE3Njc0NzQ=", - "notifications_url": "https://api.github.com/repos/T145/black-mirror/notifications{?since,all,participating}", - "open_issues": 3, - "open_issues_count": 3, - "owner": { - "avatar_url": "https://avatars.githubusercontent.com/u/1214129?v=4", - "events_url": "https://api.github.com/users/T145/events{/privacy}", - "followers_url": "https://api.github.com/users/T145/followers", - "following_url": "https://api.github.com/users/T145/following{/other_user}", - "gists_url": "https://api.github.com/users/T145/gists{/gist_id}", - "gravatar_id": "", - "html_url": "https://github.com/T145", - "id": 1214129, - "login": "T145", - "node_id": "MDQ6VXNlcjEyMTQxMjk=", - "organizations_url": "https://api.github.com/users/T145/orgs", - "received_events_url": "https://api.github.com/users/T145/received_events", - "repos_url": "https://api.github.com/users/T145/repos", - "site_admin": false, - "starred_url": "https://api.github.com/users/T145/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/T145/subscriptions", - "type": "User", - "url": "https://api.github.com/users/T145" - }, - "private": false, - "pulls_url": "https://api.github.com/repos/T145/black-mirror/pulls{/number}", - "pushed_at": "2022-10-18T02:21:03Z", - "releases_url": "https://api.github.com/repos/T145/black-mirror/releases{/id}", - "size": 86632, - "ssh_url": "git@github.com:T145/black-mirror.git", - "stargazers_count": 94, - "stargazers_url": "https://api.github.com/repos/T145/black-mirror/stargazers", - "statuses_url": "https://api.github.com/repos/T145/black-mirror/statuses/{sha}", - "subscribers_count": 2, - "subscribers_url": "https://api.github.com/repos/T145/black-mirror/subscribers", - "subscription_url": "https://api.github.com/repos/T145/black-mirror/subscription", - "svn_url": "https://github.com/T145/black-mirror", - "tags_url": "https://api.github.com/repos/T145/black-mirror/tags", - "teams_url": "https://api.github.com/repos/T145/black-mirror/teams", - "temp_clone_token": null, - "topics": [ - "adblock-list", - "blackhole-lists", - "blacklist", - "blacklist-data", - "blacklist-domains", - "blacklist-feed", - "blacklist-ips", - "blacklist-management", - "blacklist-script", - "blacklist-service", - "blocklist", - "daily-build", - "dns", - "privacy", - "whitelist", - "whitelists", - "whitelists-hosts", - "whitelists-ip" - ], - "trees_url": "https://api.github.com/repos/T145/black-mirror/git/trees{/sha}", - "updated_at": "2022-10-13T22:47:00Z", - "url": "https://api.github.com/repos/T145/black-mirror", - "visibility": "public", - "watchers": 94, - "watchers_count": 94, - "web_commit_signoff_required": false - }, - "repo_url": "https://github.com/T145/black-mirror", - "stargazers": 94 - }, { "info": { "allow_forking": true, @@ -4179,9 +4179,9 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/oasisprotocol/oasis-wallet-web/pulls{/number}", - "pushed_at": "2022-10-18T01:02:58Z", + "pushed_at": "2022-10-21T21:28:44Z", "releases_url": "https://api.github.com/repos/oasisprotocol/oasis-wallet-web/releases{/id}", - "size": 8912, + "size": 8871, "ssh_url": "git@github.com:oasisprotocol/oasis-wallet-web.git", "stargazers_count": 78, "stargazers_url": "https://api.github.com/repos/oasisprotocol/oasis-wallet-web/stargazers", @@ -4279,8 +4279,8 @@ "network_count": 48, "node_id": "MDEwOlJlcG9zaXRvcnkxMDQ5NzQ2OTM=", "notifications_url": "https://api.github.com/repos/telstra/open-kilda/notifications{?since,all,participating}", - "open_issues": 372, - "open_issues_count": 372, + "open_issues": 375, + "open_issues_count": 375, "organization": { "avatar_url": "https://avatars.githubusercontent.com/u/3914896?v=4", "events_url": "https://api.github.com/users/telstra/events{/privacy}", @@ -4323,9 +4323,9 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/telstra/open-kilda/pulls{/number}", - "pushed_at": "2022-10-17T12:07:04Z", + "pushed_at": "2022-10-21T08:40:56Z", "releases_url": "https://api.github.com/repos/telstra/open-kilda/releases{/id}", - "size": 299009, + "size": 299347, "ssh_url": "git@github.com:telstra/open-kilda.git", "stargazers_count": 69, "stargazers_url": "https://api.github.com/repos/telstra/open-kilda/stargazers", @@ -4411,8 +4411,8 @@ "network_count": 111, "node_id": "MDEwOlJlcG9zaXRvcnkyMjQ4Nzg3ODA=", "notifications_url": "https://api.github.com/repos/Azure/ARO-RP/notifications{?since,all,participating}", - "open_issues": 155, - "open_issues_count": 155, + "open_issues": 160, + "open_issues_count": 160, "organization": { "avatar_url": "https://avatars.githubusercontent.com/u/6844498?v=4", "events_url": "https://api.github.com/users/Azure/events{/privacy}", @@ -4455,9 +4455,9 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/Azure/ARO-RP/pulls{/number}", - "pushed_at": "2022-10-18T01:56:41Z", + "pushed_at": "2022-10-21T19:11:08Z", "releases_url": "https://api.github.com/repos/Azure/ARO-RP/releases{/id}", - "size": 75287, + "size": 75237, "ssh_url": "git@github.com:Azure/ARO-RP.git", "stargazers_count": 67, "stargazers_url": "https://api.github.com/repos/Azure/ARO-RP/stargazers", @@ -4567,9 +4567,9 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/rasa/scoops/pulls{/number}", - "pushed_at": "2022-10-17T21:53:49Z", + "pushed_at": "2022-10-18T21:01:48Z", "releases_url": "https://api.github.com/repos/rasa/scoops/releases{/id}", - "size": 772, + "size": 781, "ssh_url": "git@github.com:rasa/scoops.git", "stargazers_count": 66, "stargazers_url": "https://api.github.com/repos/rasa/scoops/stargazers", @@ -4783,8 +4783,8 @@ "network_count": 20, "node_id": "MDEwOlJlcG9zaXRvcnkxNzcxNTQ3Mzc=", "notifications_url": "https://api.github.com/repos/philips-software/amp-embedded-infra-lib/notifications{?since,all,participating}", - "open_issues": 4, - "open_issues_count": 4, + "open_issues": 3, + "open_issues_count": 3, "organization": { "avatar_url": "https://avatars.githubusercontent.com/u/39734771?v=4", "events_url": "https://api.github.com/users/philips-software/events{/privacy}", @@ -4827,9 +4827,9 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/philips-software/amp-embedded-infra-lib/pulls{/number}", - "pushed_at": "2022-10-17T18:27:52Z", + "pushed_at": "2022-10-20T17:16:36Z", "releases_url": "https://api.github.com/repos/philips-software/amp-embedded-infra-lib/releases{/id}", - "size": 29945, + "size": 29843, "ssh_url": "git@github.com:philips-software/amp-embedded-infra-lib.git", "stargazers_count": 57, "stargazers_url": "https://api.github.com/repos/philips-software/amp-embedded-infra-lib/stargazers", @@ -4887,8 +4887,8 @@ "downloads_url": "https://api.github.com/repos/auricom/home-ops/downloads", "events_url": "https://api.github.com/repos/auricom/home-ops/events", "fork": false, - "forks": 3, - "forks_count": 3, + "forks": 4, + "forks_count": 4, "forks_url": "https://api.github.com/repos/auricom/home-ops/forks", "full_name": "auricom/home-ops", "git_commits_url": "https://api.github.com/repos/auricom/home-ops/git/commits{/sha}", @@ -4917,7 +4917,7 @@ "milestones_url": "https://api.github.com/repos/auricom/home-ops/milestones{/number}", "mirror_url": null, "name": "home-ops", - "network_count": 3, + "network_count": 4, "node_id": "MDEwOlJlcG9zaXRvcnkzMTQxODEwODI=", "notifications_url": "https://api.github.com/repos/auricom/home-ops/notifications{?since,all,participating}", "open_issues": 9, @@ -4944,9 +4944,9 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/auricom/home-ops/pulls{/number}", - "pushed_at": "2022-10-18T04:52:30Z", + "pushed_at": "2022-10-21T20:27:14Z", "releases_url": "https://api.github.com/repos/auricom/home-ops/releases{/id}", - "size": 6498, + "size": 6543, "ssh_url": "git@github.com:auricom/home-ops.git", "stargazers_count": 56, "stargazers_url": "https://api.github.com/repos/auricom/home-ops/stargazers", @@ -5864,8 +5864,8 @@ "network_count": 2, "node_id": "MDEwOlJlcG9zaXRvcnkzOTE3NjkwNDE=", "notifications_url": "https://api.github.com/repos/jr0dd/home-ops/notifications{?since,all,participating}", - "open_issues": 1, - "open_issues_count": 1, + "open_issues": 5, + "open_issues_count": 5, "owner": { "avatar_url": "https://avatars.githubusercontent.com/u/285797?v=4", "events_url": "https://api.github.com/users/jr0dd/events{/privacy}", @@ -5888,9 +5888,9 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/jr0dd/home-ops/pulls{/number}", - "pushed_at": "2022-10-18T04:12:07Z", + "pushed_at": "2022-10-22T01:03:11Z", "releases_url": "https://api.github.com/repos/jr0dd/home-ops/releases{/id}", - "size": 5707, + "size": 5722, "ssh_url": "git@github.com:jr0dd/home-ops.git", "stargazers_count": 34, "stargazers_url": "https://api.github.com/repos/jr0dd/home-ops/stargazers", @@ -6253,9 +6253,9 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/hardisgroupcom/sfdx-hardis/pulls{/number}", - "pushed_at": "2022-10-17T19:47:33Z", + "pushed_at": "2022-10-19T12:41:56Z", "releases_url": "https://api.github.com/repos/hardisgroupcom/sfdx-hardis/releases{/id}", - "size": 6012, + "size": 6188, "ssh_url": "git@github.com:hardisgroupcom/sfdx-hardis.git", "stargazers_count": 31, "stargazers_url": "https://api.github.com/repos/hardisgroupcom/sfdx-hardis/stargazers", diff --git a/.trivyignore b/.trivyignore index 1c3fef1c926..cc386f34b02 100644 --- a/.trivyignore +++ b/.trivyignore @@ -115,11 +115,14 @@ CVE-2022-29458 CVE-2022-30321 CVE-2022-30322 CVE-2022-30323 +CVE-2022-32149 CVE-2022-33082 +CVE-2022-3517 CVE-2022-36067 CVE-2022-36085 CVE-2022-36944 CVE-2022-37434 +CVE-2022-37616 CVE-2022-38013 CVE-2022-40674 CVE-2022-41032 diff --git a/CHANGELOG.md b/CHANGELOG.md index 380a6b26a57..d113c641a6c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,18 @@ Note: Can be used with `oxsecurity/megalinter@beta` in your GitHub Action mega-l - [phpstan](https://phpstan.org/) from 1.8.9 to **1.8.10** on 2022-10-18 - [syft](https://github.com/anchore/syft) from 0.58.0 to **0.59.0** on 2022-10-18 - [terragrunt](https://terragrunt.gruntwork.io) from 0.39.1 to **0.39.2** on 2022-10-18 + - [cfn-lint](https://github.com/aws-cloudformation/cfn-lint) from 0.67.0 to **0.68.1** on 2022-10-22 + - [djlint](https://djlint.com/) from 1.19.1 to **1.19.2** on 2022-10-22 + - [eslint](https://eslint.org) from 8.25.0 to **8.26.0** on 2022-10-22 + - [powershell](https://github.com/PowerShell/PSScriptAnalyzer) from 7.2.6 to **7.2.7** on 2022-10-22 + - [puppet-lint](http://puppet-lint.com/) from 3.0.0 to **3.0.1** on 2022-10-22 + - [pylint](https://pylint.pycqa.org) from 2.15.4 to **2.15.5** on 2022-10-22 + - [git_diff](https://git-scm.com) from 2.34.4 to **2.34.5** on 2022-10-22 + - [semgrep](https://semgrep.dev/) from 0.117.0 to **0.118.0** on 2022-10-22 + - [rubocop](https://rubocop.org/) from 1.36.0 to **1.37.0** on 2022-10-22 + - [snakemake](https://snakemake.readthedocs.io/en/stable/) from 7.16.0 to **7.16.1** on 2022-10-22 + - [terraform-fmt](https://www.terraform.io/docs/cli/commands/fmt.html) from 1.3.2 to **1.3.3** on 2022-10-22 + - [terrascan](https://www.accurics.com/products/terrascan/) from 1.15.2 to **1.16.0** on 2022-10-22 ## [v6.12.0] - 2022-10-16 diff --git a/Dockerfile b/Dockerfile index 7e603408bc9..f501b3250c2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -552,7 +552,7 @@ RUN PYTHONDONTWRITEBYTECODE=1 pip3 install --upgrade --no-cache-dir pip && PYTHO # && ./dotnet-install.sh --install-dir /usr/share/dotnet -channel 5.0 -version latest # Next line commented because already managed by another linter # ENV PATH="${PATH}:/root/.dotnet/tools:/usr/share/dotnet" - && dotnet tool install --global Microsoft.CST.DevSkim.CLI \ + && dotnet tool install --global Microsoft.CST.DevSkim.CLI --version 0.6.9 \ # dustilock installation && ML_THIRD_PARTY_DIR=/download/dustilock && \ diff --git a/docs/all_linters.md b/docs/all_linters.md index d5dcd50854a..1be6fb0cac5 100644 --- a/docs/all_linters.md +++ b/docs/all_linters.md @@ -12,7 +12,7 @@ | [**bash-exec**](https://tiswww.case.edu/php/chet/bash/bashtop.html){target=_blank} | 5.1.16 | | | [BASH](descriptors/bash_bash_exec.md) | | [Web Site](https://tiswww.case.edu/php/chet/bash/bashtop.html){target=_blank} | | [**bicep_linter**](https://github.com/Azure/bicep){target=_blank} | Bicep.CLI.version.0.11.1 | | [![GitHub stars](https://img.shields.io/github/stars/Azure/bicep?cacheSeconds=3600)](https://github.com/Azure/bicep){target=_blank} | [BICEP](descriptors/bicep_bicep_linter.md) | :white_circle: | [Repository](https://github.com/Azure/bicep){target=_blank} | | [**black**](https://github.com/psf/black){target=_blank} | 22.10.0 | [MIT](licenses/black.md) | [![GitHub stars](https://img.shields.io/github/stars/psf/black?cacheSeconds=3600)](https://github.com/psf/black){target=_blank} | [PYTHON](descriptors/python_black.md) | :white_circle: | [Repository](https://github.com/psf/black){target=_blank} | -| [**cfn-lint**](https://github.com/aws-cloudformation/cfn-lint){target=_blank} | 0.67.0 | [MIT-0](licenses/cfn-lint.md) | [![GitHub stars](https://img.shields.io/github/stars/aws-cloudformation/cfn-lint?cacheSeconds=3600)](https://github.com/aws-cloudformation/cfn-lint){target=_blank} | [CLOUDFORMATION](descriptors/cloudformation_cfn_lint.md) | :white_circle: | [Repository](https://github.com/aws-cloudformation/cfn-lint){target=_blank} | +| [**cfn-lint**](https://github.com/aws-cloudformation/cfn-lint){target=_blank} | 0.68.1 | [MIT-0](licenses/cfn-lint.md) | [![GitHub stars](https://img.shields.io/github/stars/aws-cloudformation/cfn-lint?cacheSeconds=3600)](https://github.com/aws-cloudformation/cfn-lint){target=_blank} | [CLOUDFORMATION](descriptors/cloudformation_cfn_lint.md) | :white_circle: | [Repository](https://github.com/aws-cloudformation/cfn-lint){target=_blank} | | [**checkmake**](https://github.com/mrtazz/checkmake){target=_blank} | 0.2.1 | [MIT](licenses/checkmake.md) | [![GitHub stars](https://img.shields.io/github/stars/mrtazz/checkmake?cacheSeconds=3600)](https://github.com/mrtazz/checkmake){target=_blank} | [MAKEFILE](descriptors/makefile_checkmake.md) | :white_circle: | [Repository](https://github.com/mrtazz/checkmake){target=_blank} | | [**checkov**](https://github.com/bridgecrewio/checkov){target=_blank} | 2.1.244 | [Apache-2.0](licenses/checkov.md) | [![GitHub stars](https://img.shields.io/github/stars/bridgecrewio/checkov?cacheSeconds=3600)](https://github.com/bridgecrewio/checkov){target=_blank} | [REPOSITORY](descriptors/repository_checkov.md)
[TERRAFORM](descriptors/terraform_checkov.md) | :no_entry_sign: | [Repository](https://github.com/bridgecrewio/checkov){target=_blank} | | [**checkstyle**](https://github.com/checkstyle/checkstyle){target=_blank} | 10.3.4 | [LGPL-2.1](licenses/checkstyle.md) | [![GitHub stars](https://img.shields.io/github/stars/checkstyle/checkstyle?cacheSeconds=3600)](https://github.com/checkstyle/checkstyle){target=_blank} | [JAVA](descriptors/java_checkstyle.md) | :heart: | [MegaLinter reference](https://checkstyle.sourceforge.io/index.html#Related_Tools_Active_Tools){target=_blank} | @@ -24,16 +24,16 @@ | [**cspell**](https://github.com/streetsidesoftware/cspell){target=_blank} | 6.12.0 | [MIT](licenses/cspell.md) | [![GitHub stars](https://img.shields.io/github/stars/streetsidesoftware/cspell?cacheSeconds=3600)](https://github.com/streetsidesoftware/cspell){target=_blank} | [SPELL](descriptors/spell_cspell.md) | :heart: | [MegaLinter reference](https://github.com/streetsidesoftware/cspell/tree/master/packages/cspell#mega-linter){target=_blank} | | [**dartanalyzer**](https://github.com/dart-lang/sdk){target=_blank} | N/A | [BSD-3-Clause](licenses/dartanalyzer.md) | [![GitHub stars](https://img.shields.io/github/stars/dart-lang/sdk?cacheSeconds=3600)](https://github.com/dart-lang/sdk){target=_blank} | [DART](descriptors/dart_dartanalyzer.md) | :no_entry_sign: | [Repository](https://github.com/dart-lang/sdk){target=_blank} | | [**devskim**](https://github.com/microsoft/DevSkim){target=_blank} | 0.6.9 | [MIT](licenses/devskim.md) | [![GitHub stars](https://img.shields.io/github/stars/microsoft/DevSkim?cacheSeconds=3600)](https://github.com/microsoft/DevSkim){target=_blank} | [REPOSITORY](descriptors/repository_devskim.md) | :white_circle: | [Repository](https://github.com/microsoft/DevSkim){target=_blank} | -| [**djlint**](https://github.com/Riverside-Healthcare/djlint){target=_blank} | 1.19.1 | [GPL-3.0](licenses/djlint.md) | [![GitHub stars](https://img.shields.io/github/stars/Riverside-Healthcare/djlint?cacheSeconds=3600)](https://github.com/Riverside-Healthcare/djlint){target=_blank} | [HTML](descriptors/html_djlint.md) | :white_circle: | [Repository](https://github.com/Riverside-Healthcare/djlint){target=_blank} | +| [**djlint**](https://github.com/Riverside-Healthcare/djlint){target=_blank} | 1.19.2 | [GPL-3.0](licenses/djlint.md) | [![GitHub stars](https://img.shields.io/github/stars/Riverside-Healthcare/djlint?cacheSeconds=3600)](https://github.com/Riverside-Healthcare/djlint){target=_blank} | [HTML](descriptors/html_djlint.md) | :white_circle: | [Repository](https://github.com/Riverside-Healthcare/djlint){target=_blank} | | [**dotenv-linter**](https://github.com/dotenv-linter/dotenv-linter){target=_blank} | 3.2.0 | [MIT](licenses/dotenv-linter.md) | [![GitHub stars](https://img.shields.io/github/stars/dotenv-linter/dotenv-linter?cacheSeconds=3600)](https://github.com/dotenv-linter/dotenv-linter){target=_blank} | [ENV](descriptors/env_dotenv_linter.md) | :heart: | [MegaLinter reference](https://dotenv-linter.github.io/#/integrations/mega_linter){target=_blank} | | [**dotnet-format**](https://github.com/dotnet/format){target=_blank} | 000 | [MIT](licenses/dotnet-format.md) | [![GitHub stars](https://img.shields.io/github/stars/dotnet/format?cacheSeconds=3600)](https://github.com/dotnet/format){target=_blank} | [CSHARP](descriptors/csharp_dotnet_format.md)
[VBDOTNET](descriptors/vbdotnet_dotnet_format.md) | :white_circle: | [Repository](https://github.com/dotnet/format){target=_blank} | | [**dustilock**](https://github.com/Checkmarx/dustilock){target=_blank} | N/A | [Apache-2.0](licenses/dustilock.md) | [![GitHub stars](https://img.shields.io/github/stars/Checkmarx/dustilock?cacheSeconds=3600)](https://github.com/Checkmarx/dustilock){target=_blank} | [REPOSITORY](descriptors/repository_dustilock.md) | :white_circle: | [Repository](https://github.com/Checkmarx/dustilock){target=_blank} | | [**editorconfig-checker**](https://github.com/editorconfig-checker/editorconfig-checker){target=_blank} | 2.4.0 | [MIT](licenses/editorconfig-checker.md) | [![GitHub stars](https://img.shields.io/github/stars/editorconfig-checker/editorconfig-checker?cacheSeconds=3600)](https://github.com/editorconfig-checker/editorconfig-checker){target=_blank} | [EDITORCONFIG](descriptors/editorconfig_editorconfig_checker.md) | :heart: | [MegaLinter reference](https://github.com/editorconfig-checker/editorconfig-checker#mega-linter){target=_blank} | -| [**eslint**](https://github.com/eslint/eslint){target=_blank} | 8.25.0 | [MIT](licenses/eslint.md) | [![GitHub stars](https://img.shields.io/github/stars/eslint/eslint?cacheSeconds=3600)](https://github.com/eslint/eslint){target=_blank} | [JAVASCRIPT](descriptors/javascript_eslint.md)
[JSX](descriptors/jsx_eslint.md)
[TSX](descriptors/tsx_eslint.md)
[TYPESCRIPT](descriptors/typescript_eslint.md) | :heart: | [MegaLinter reference](https://eslint.org/docs/user-guide/integrations#source-control){target=_blank} | +| [**eslint**](https://github.com/eslint/eslint){target=_blank} | 8.26.0 | [MIT](licenses/eslint.md) | [![GitHub stars](https://img.shields.io/github/stars/eslint/eslint?cacheSeconds=3600)](https://github.com/eslint/eslint){target=_blank} | [JAVASCRIPT](descriptors/javascript_eslint.md)
[JSX](descriptors/jsx_eslint.md)
[TSX](descriptors/tsx_eslint.md)
[TYPESCRIPT](descriptors/typescript_eslint.md) | :heart: | [MegaLinter reference](https://eslint.org/docs/user-guide/integrations#source-control){target=_blank} | | [**eslint-plugin-jsonc**](https://github.com/ota-meshi/eslint-plugin-jsonc){target=_blank} | 2.4.0 | [MIT](licenses/eslint-plugin-jsonc.md) | [![GitHub stars](https://img.shields.io/github/stars/ota-meshi/eslint-plugin-jsonc?cacheSeconds=3600)](https://github.com/ota-meshi/eslint-plugin-jsonc){target=_blank} | [JSON](descriptors/json_eslint_plugin_jsonc.md) | :heart: | [MegaLinter reference](https://eslint.org/docs/user-guide/integrations#source-control){target=_blank} | | [**flake8**](https://github.com/PyCQA/flake8){target=_blank} | 5.0.4 | [MIT](licenses/flake8.md) | [![GitHub stars](https://img.shields.io/github/stars/PyCQA/flake8?cacheSeconds=3600)](https://github.com/PyCQA/flake8){target=_blank} | [PYTHON](descriptors/python_flake8.md) | :white_circle: | [Repository](https://github.com/PyCQA/flake8){target=_blank} | | [**gherkin-lint**](https://github.com/vsiakka/gherkin-lint){target=_blank} | N/A | [ISC](licenses/gherkin-lint.md) | [![GitHub stars](https://img.shields.io/github/stars/vsiakka/gherkin-lint?cacheSeconds=3600)](https://github.com/vsiakka/gherkin-lint){target=_blank} | [GHERKIN](descriptors/gherkin_gherkin_lint.md) | :white_circle: | [Repository](https://github.com/vsiakka/gherkin-lint){target=_blank} | -| [**git_diff**](https://github.com/git/git){target=_blank} | 2.34.4 | [LGPL-2.1](licenses/git_diff.md) | [![GitHub stars](https://img.shields.io/github/stars/git/git?cacheSeconds=3600)](https://github.com/git/git){target=_blank} | [REPOSITORY](descriptors/repository_git_diff.md) | | [Repository](https://github.com/git/git){target=_blank} | +| [**git_diff**](https://github.com/git/git){target=_blank} | 2.34.5 | [LGPL-2.1](licenses/git_diff.md) | [![GitHub stars](https://img.shields.io/github/stars/git/git?cacheSeconds=3600)](https://github.com/git/git){target=_blank} | [REPOSITORY](descriptors/repository_git_diff.md) | | [Repository](https://github.com/git/git){target=_blank} | | [**gitleaks**](https://github.com/zricethezav/gitleaks){target=_blank} | 8.14.1 | [MIT](licenses/gitleaks.md) | [![GitHub stars](https://img.shields.io/github/stars/zricethezav/gitleaks?cacheSeconds=3600)](https://github.com/zricethezav/gitleaks){target=_blank} | [REPOSITORY](descriptors/repository_gitleaks.md) | :white_circle: | [Repository](https://github.com/zricethezav/gitleaks){target=_blank} | | [**golangci-lint**](https://github.com/golangci/golangci-lint){target=_blank} | 1.50.0 | [GPL-3.0](licenses/golangci-lint.md) | [![GitHub stars](https://img.shields.io/github/stars/golangci/golangci-lint?cacheSeconds=3600)](https://github.com/golangci/golangci-lint){target=_blank} | [GO](descriptors/go_golangci_lint.md) | :white_circle: | [Repository](https://github.com/golangci/golangci-lint){target=_blank} | | [**goodcheck**](https://github.com/sider/goodcheck){target=_blank} | 3.1.0 | [MIT](licenses/goodcheck.md) | [![GitHub stars](https://img.shields.io/github/stars/sider/goodcheck?cacheSeconds=3600)](https://github.com/sider/goodcheck){target=_blank} | [REPOSITORY](descriptors/repository_goodcheck.md) | :white_circle: | [Repository](https://github.com/sider/goodcheck){target=_blank} | @@ -60,31 +60,31 @@ | [**phplint**](https://github.com/overtrue/phplint){target=_blank} | 3.0 | | | [PHP](descriptors/php_phplint.md) | :white_circle: | [Web Site](https://github.com/overtrue/phplint){target=_blank} | | [**phpstan**](https://github.com/phpstan/phpstan){target=_blank} | 1.8.10 | [MIT](licenses/phpstan.md) | [![GitHub stars](https://img.shields.io/github/stars/phpstan/phpstan?cacheSeconds=3600)](https://github.com/phpstan/phpstan){target=_blank} | [PHP](descriptors/php_phpstan.md) | :white_circle: | [Repository](https://github.com/phpstan/phpstan){target=_blank} | | [**pmd**](https://github.com/pmd/pmd){target=_blank} | 6.48.0 | [Apache-2.0](licenses/pmd.md) | [![GitHub stars](https://img.shields.io/github/stars/pmd/pmd?cacheSeconds=3600)](https://github.com/pmd/pmd){target=_blank} | [JAVA](descriptors/java_pmd.md) | :heart: | [MegaLinter reference](https://pmd.sourceforge.io/pmd-6.49.0/pmd_userdocs_tools_ci.html){target=_blank} | -| [**powershell**](https://github.com/PowerShell/PSScriptAnalyzer){target=_blank} | 7.2.6 | | [![GitHub stars](https://img.shields.io/github/stars/PowerShell/PSScriptAnalyzer?cacheSeconds=3600)](https://github.com/PowerShell/PSScriptAnalyzer){target=_blank} | [POWERSHELL](descriptors/powershell_powershell.md) | :white_circle: | [Repository](https://github.com/PowerShell/PSScriptAnalyzer){target=_blank} | +| [**powershell**](https://github.com/PowerShell/PSScriptAnalyzer){target=_blank} | 7.2.7 | | [![GitHub stars](https://img.shields.io/github/stars/PowerShell/PSScriptAnalyzer?cacheSeconds=3600)](https://github.com/PowerShell/PSScriptAnalyzer){target=_blank} | [POWERSHELL](descriptors/powershell_powershell.md) | :white_circle: | [Repository](https://github.com/PowerShell/PSScriptAnalyzer){target=_blank} | | [**prettier**](https://github.com/prettier/prettier){target=_blank} | 2.7.1 | [MIT](licenses/prettier.md) | [![GitHub stars](https://img.shields.io/github/stars/prettier/prettier?cacheSeconds=3600)](https://github.com/prettier/prettier){target=_blank} | [JAVASCRIPT](descriptors/javascript_prettier.md)
[JSON](descriptors/json_prettier.md)
[TYPESCRIPT](descriptors/typescript_prettier.md)
[YAML](descriptors/yaml_prettier.md) | :white_circle: | [Repository](https://github.com/prettier/prettier){target=_blank} | | [**proselint**](https://github.com/amperser/proselint){target=_blank} | 0.13.0 | | [![GitHub stars](https://img.shields.io/github/stars/amperser/proselint?cacheSeconds=3600)](https://github.com/amperser/proselint){target=_blank} | [SPELL](descriptors/spell_proselint.md) | :white_circle: | [Repository](https://github.com/amperser/proselint){target=_blank} | | [**protolint**](https://github.com/yoheimuta/protolint){target=_blank} | 0.41.0 | | [![GitHub stars](https://img.shields.io/github/stars/yoheimuta/protolint?cacheSeconds=3600)](https://github.com/yoheimuta/protolint){target=_blank} | [PROTOBUF](descriptors/protobuf_protolint.md) | :white_circle: | [Repository](https://github.com/yoheimuta/protolint){target=_blank} | | [**psalm**](https://github.com/vimeo/psalm){target=_blank} | Psalm.5.x-dev@ | [MIT](licenses/psalm.md) | [![GitHub stars](https://img.shields.io/github/stars/vimeo/psalm?cacheSeconds=3600)](https://github.com/vimeo/psalm){target=_blank} | [PHP](descriptors/php_psalm.md) | :white_circle: | [Repository](https://github.com/vimeo/psalm){target=_blank} | -| [**puppet-lint**](https://github.com/rodjek/puppet-lint){target=_blank} | 3.0.0 | [MIT](licenses/puppet-lint.md) | [![GitHub stars](https://img.shields.io/github/stars/rodjek/puppet-lint?cacheSeconds=3600)](https://github.com/rodjek/puppet-lint){target=_blank} | [PUPPET](descriptors/puppet_puppet_lint.md) | :white_circle: | [Repository](https://github.com/rodjek/puppet-lint){target=_blank} | -| [**pylint**](https://github.com/PyCQA/pylint){target=_blank} | 2.15.4 | [GPL-2.0](licenses/pylint.md) | [![GitHub stars](https://img.shields.io/github/stars/PyCQA/pylint?cacheSeconds=3600)](https://github.com/PyCQA/pylint){target=_blank} | [PYTHON](descriptors/python_pylint.md) | :white_circle: | [Repository](https://github.com/PyCQA/pylint){target=_blank} | +| [**puppet-lint**](https://github.com/rodjek/puppet-lint){target=_blank} | 3.0.1 | [MIT](licenses/puppet-lint.md) | [![GitHub stars](https://img.shields.io/github/stars/rodjek/puppet-lint?cacheSeconds=3600)](https://github.com/rodjek/puppet-lint){target=_blank} | [PUPPET](descriptors/puppet_puppet_lint.md) | :white_circle: | [Repository](https://github.com/rodjek/puppet-lint){target=_blank} | +| [**pylint**](https://github.com/PyCQA/pylint){target=_blank} | 2.15.5 | [GPL-2.0](licenses/pylint.md) | [![GitHub stars](https://img.shields.io/github/stars/PyCQA/pylint?cacheSeconds=3600)](https://github.com/PyCQA/pylint){target=_blank} | [PYTHON](descriptors/python_pylint.md) | :white_circle: | [Repository](https://github.com/PyCQA/pylint){target=_blank} | | [**pyright**](https://github.com/microsoft/pyright){target=_blank} | 1.1.270 | | [![GitHub stars](https://img.shields.io/github/stars/microsoft/pyright?cacheSeconds=3600)](https://github.com/microsoft/pyright){target=_blank} | [PYTHON](descriptors/python_pyright.md) | :white_circle: | [Repository](https://github.com/microsoft/pyright){target=_blank} | | [**raku**](https://github.com/rakudo/rakudo){target=_blank} | 2020.10 | [Artistic-2.0](licenses/raku.md) | [![GitHub stars](https://img.shields.io/github/stars/rakudo/rakudo?cacheSeconds=3600)](https://github.com/rakudo/rakudo){target=_blank} | [RAKU](descriptors/raku_raku.md) | :white_circle: | [Repository](https://github.com/rakudo/rakudo){target=_blank} | | [**remark-lint**](https://github.com/remarkjs/remark-lint){target=_blank} | 14.0.2 | [MIT](licenses/remark-lint.md) | [![GitHub stars](https://img.shields.io/github/stars/remarkjs/remark-lint?cacheSeconds=3600)](https://github.com/remarkjs/remark-lint){target=_blank} | [MARKDOWN](descriptors/markdown_remark_lint.md) | :white_circle: | [Repository](https://github.com/remarkjs/remark-lint){target=_blank} | | [**revive**](https://github.com/mgechev/revive){target=_blank} | N/A | [MIT](licenses/revive.md) | [![GitHub stars](https://img.shields.io/github/stars/mgechev/revive?cacheSeconds=3600)](https://github.com/mgechev/revive){target=_blank} | [GO](descriptors/go_revive.md) | :white_circle: | [Repository](https://github.com/mgechev/revive){target=_blank} | | [**rst-lint**](https://github.com/twolfson/restructuredtext-lint){target=_blank} | 1.4.0 | | [![GitHub stars](https://img.shields.io/github/stars/twolfson/restructuredtext-lint?cacheSeconds=3600)](https://github.com/twolfson/restructuredtext-lint){target=_blank} | [RST](descriptors/rst_rst_lint.md) | :heart: | [MegaLinter reference](https://github.com/twolfson/restructuredtext-lint/wiki/Integration-in-other-tools#integration-in-other-tools){target=_blank} | | [**rstcheck**](https://github.com/myint/rstcheck){target=_blank} | 6.1.0 | | [![GitHub stars](https://img.shields.io/github/stars/myint/rstcheck?cacheSeconds=3600)](https://github.com/myint/rstcheck){target=_blank} | [RST](descriptors/rst_rstcheck.md) | :hammer_and_wrench: | [Pull Request](https://github.com/myint/rstcheck/pull/73){target=_blank} | -| [**rubocop**](https://github.com/rubocop-hq/rubocop){target=_blank} | 1.36.0 | [MIT](licenses/rubocop.md) | [![GitHub stars](https://img.shields.io/github/stars/rubocop-hq/rubocop?cacheSeconds=3600)](https://github.com/rubocop-hq/rubocop){target=_blank} | [RUBY](descriptors/ruby_rubocop.md) | :heart: | [MegaLinter reference](https://docs.rubocop.org/rubocop/integration_with_other_tools.html#mega-linter-integration){target=_blank} | +| [**rubocop**](https://github.com/rubocop-hq/rubocop){target=_blank} | 1.37.0 | [MIT](licenses/rubocop.md) | [![GitHub stars](https://img.shields.io/github/stars/rubocop-hq/rubocop?cacheSeconds=3600)](https://github.com/rubocop-hq/rubocop){target=_blank} | [RUBY](descriptors/ruby_rubocop.md) | :heart: | [MegaLinter reference](https://docs.rubocop.org/rubocop/integration_with_other_tools.html#mega-linter-integration){target=_blank} | | [**scalafix**](https://github.com/scalacenter/scalafix){target=_blank} | 0.10.4 | [Other](licenses/scalafix.md) | [![GitHub stars](https://img.shields.io/github/stars/scalacenter/scalafix?cacheSeconds=3600)](https://github.com/scalacenter/scalafix){target=_blank} | [SCALA](descriptors/scala_scalafix.md) | :heart: | [MegaLinter reference](https://scalacenter.github.io/scalafix/docs/users/installation.html#plugins-for-other-build-tools){target=_blank} | | [**scss-lint**](https://github.com/sds/scss-lint){target=_blank} | 0.59.0 | | [![GitHub stars](https://img.shields.io/github/stars/sds/scss-lint?cacheSeconds=3600)](https://github.com/sds/scss-lint){target=_blank} | [CSS](descriptors/css_scss_lint.md) | :white_circle: | [Repository](https://github.com/sds/scss-lint){target=_blank} | | [**secretlint**](https://github.com/secretlint/secretlint){target=_blank} | 5.2.4 | [MIT](licenses/secretlint.md) | [![GitHub stars](https://img.shields.io/github/stars/secretlint/secretlint?cacheSeconds=3600)](https://github.com/secretlint/secretlint){target=_blank} | [REPOSITORY](descriptors/repository_secretlint.md) | :heart: | [MegaLinter reference](https://github.com/secretlint/secretlint#mega-linter){target=_blank} | -| [**semgrep**](https://github.com/returntocorp/semgrep){target=_blank} | 0.117.0 | | [![GitHub stars](https://img.shields.io/github/stars/returntocorp/semgrep?cacheSeconds=3600)](https://github.com/returntocorp/semgrep){target=_blank} | [REPOSITORY](descriptors/repository_semgrep.md) | :white_circle: | [Repository](https://github.com/returntocorp/semgrep){target=_blank} | +| [**semgrep**](https://github.com/returntocorp/semgrep){target=_blank} | 0.118.0 | | [![GitHub stars](https://img.shields.io/github/stars/returntocorp/semgrep?cacheSeconds=3600)](https://github.com/returntocorp/semgrep){target=_blank} | [REPOSITORY](descriptors/repository_semgrep.md) | :white_circle: | [Repository](https://github.com/returntocorp/semgrep){target=_blank} | | [**sfdx-scanner-apex**](https://github.com/forcedotcom/sfdx-scanner){target=_blank} | 2.13.9 | [MIT](licenses/sfdx-scanner-apex.md) | [![GitHub stars](https://img.shields.io/github/stars/forcedotcom/sfdx-scanner?cacheSeconds=3600)](https://github.com/forcedotcom/sfdx-scanner){target=_blank} | [SALESFORCE](descriptors/salesforce_sfdx_scanner_apex.md) | :hammer_and_wrench: | [Pull Request](https://github.com/forcedotcom/sfdx-scanner/pull/307){target=_blank} | | [**sfdx-scanner-aura**](https://github.com/forcedotcom/sfdx-scanner){target=_blank} | 2.13.9 | [MIT](licenses/sfdx-scanner-aura.md) | [![GitHub stars](https://img.shields.io/github/stars/forcedotcom/sfdx-scanner?cacheSeconds=3600)](https://github.com/forcedotcom/sfdx-scanner){target=_blank} | [SALESFORCE](descriptors/salesforce_sfdx_scanner_aura.md) | :hammer_and_wrench: | [Pull Request](https://github.com/forcedotcom/sfdx-scanner/pull/307){target=_blank} | | [**sfdx-scanner-lwc**](https://github.com/forcedotcom/sfdx-scanner){target=_blank} | 2.13.9 | [MIT](licenses/sfdx-scanner-lwc.md) | [![GitHub stars](https://img.shields.io/github/stars/forcedotcom/sfdx-scanner?cacheSeconds=3600)](https://github.com/forcedotcom/sfdx-scanner){target=_blank} | [SALESFORCE](descriptors/salesforce_sfdx_scanner_lwc.md) | :hammer_and_wrench: | [Pull Request](https://github.com/forcedotcom/sfdx-scanner/pull/307){target=_blank} | | [**shellcheck**](https://github.com/koalaman/shellcheck){target=_blank} | 0.8.0 | | [![GitHub stars](https://img.shields.io/github/stars/koalaman/shellcheck?cacheSeconds=3600)](https://github.com/koalaman/shellcheck){target=_blank} | [BASH](descriptors/bash_shellcheck.md) | | [Repository](https://github.com/koalaman/shellcheck){target=_blank} | | [**shfmt**](https://github.com/mvdan/sh){target=_blank} | 3.6.0 | | [![GitHub stars](https://img.shields.io/github/stars/mvdan/sh?cacheSeconds=3600)](https://github.com/mvdan/sh){target=_blank} | [BASH](descriptors/bash_shfmt.md) | :no_entry_sign: | [Repository](https://github.com/mvdan/sh){target=_blank} | | [**snakefmt**](https://github.com/snakemake/snakefmt){target=_blank} | 0.6.1 | | [![GitHub stars](https://img.shields.io/github/stars/snakemake/snakefmt?cacheSeconds=3600)](https://github.com/snakemake/snakefmt){target=_blank} | [SNAKEMAKE](descriptors/snakemake_snakefmt.md) | :white_circle: | [Repository](https://github.com/snakemake/snakefmt){target=_blank} | -| [**snakemake**](https://github.com/snakemake/snakemake){target=_blank} | 7.16.0 | [MIT](licenses/snakemake.md) | [![GitHub stars](https://img.shields.io/github/stars/snakemake/snakemake?cacheSeconds=3600)](https://github.com/snakemake/snakemake){target=_blank} | [SNAKEMAKE](descriptors/snakemake_snakemake.md) | :white_circle: | [Repository](https://github.com/snakemake/snakemake){target=_blank} | +| [**snakemake**](https://github.com/snakemake/snakemake){target=_blank} | 7.16.1 | [MIT](licenses/snakemake.md) | [![GitHub stars](https://img.shields.io/github/stars/snakemake/snakemake?cacheSeconds=3600)](https://github.com/snakemake/snakemake){target=_blank} | [SNAKEMAKE](descriptors/snakemake_snakemake.md) | :white_circle: | [Repository](https://github.com/snakemake/snakemake){target=_blank} | | [**spectral**](https://github.com/stoplightio/spectral){target=_blank} | 5.9.2 | [Apache-2.0](licenses/spectral.md) | [![GitHub stars](https://img.shields.io/github/stars/stoplightio/spectral?cacheSeconds=3600)](https://github.com/stoplightio/spectral){target=_blank} | [OPENAPI](descriptors/openapi_spectral.md) | :white_circle: | [Repository](https://github.com/stoplightio/spectral){target=_blank} | | [**sql-lint**](https://github.com/joereynolds/sql-lint){target=_blank} | 1.0.0 | | [![GitHub stars](https://img.shields.io/github/stars/joereynolds/sql-lint?cacheSeconds=3600)](https://github.com/joereynolds/sql-lint){target=_blank} | [SQL](descriptors/sql_sql_lint.md) | :white_circle: | [Repository](https://github.com/joereynolds/sql-lint){target=_blank} | | [**sqlfluff**](https://github.com/sqlfluff/sqlfluff){target=_blank} | 1.3.2 | [MIT](licenses/sqlfluff.md) | [![GitHub stars](https://img.shields.io/github/stars/sqlfluff/sqlfluff?cacheSeconds=3600)](https://github.com/sqlfluff/sqlfluff){target=_blank} | [SQL](descriptors/sql_sqlfluff.md) | :white_circle: | [Repository](https://github.com/sqlfluff/sqlfluff){target=_blank} | @@ -93,9 +93,9 @@ | [**swiftlint**](https://github.com/realm/SwiftLint){target=_blank} | 0.46.5 | [MIT](licenses/swiftlint.md) | [![GitHub stars](https://img.shields.io/github/stars/realm/SwiftLint?cacheSeconds=3600)](https://github.com/realm/SwiftLint){target=_blank} | [SWIFT](descriptors/swift_swiftlint.md) | :white_circle: | [Repository](https://github.com/realm/SwiftLint){target=_blank} | | [**syft**](https://github.com/anchore/syft){target=_blank} | 0.59.0 | | [![GitHub stars](https://img.shields.io/github/stars/anchore/syft?cacheSeconds=3600)](https://github.com/anchore/syft){target=_blank} | [REPOSITORY](descriptors/repository_syft.md) | :white_circle: | [Repository](https://github.com/anchore/syft){target=_blank} | | [**tekton-lint**](https://github.com/IBM/tekton-lint){target=_blank} | 0.6.0 | | [![GitHub stars](https://img.shields.io/github/stars/IBM/tekton-lint?cacheSeconds=3600)](https://github.com/IBM/tekton-lint){target=_blank} | [TEKTON](descriptors/tekton_tekton_lint.md) | :white_circle: | [Repository](https://github.com/IBM/tekton-lint){target=_blank} | -| [**terraform-fmt**](https://github.com/hashicorp/terraform){target=_blank} | 1.3.2 | [MPL-2.0](licenses/terraform-fmt.md) | [![GitHub stars](https://img.shields.io/github/stars/hashicorp/terraform?cacheSeconds=3600)](https://github.com/hashicorp/terraform){target=_blank} | [TERRAFORM](descriptors/terraform_terraform_fmt.md) | :white_circle: | [Repository](https://github.com/hashicorp/terraform){target=_blank} | +| [**terraform-fmt**](https://github.com/hashicorp/terraform){target=_blank} | 1.3.3 | [MPL-2.0](licenses/terraform-fmt.md) | [![GitHub stars](https://img.shields.io/github/stars/hashicorp/terraform?cacheSeconds=3600)](https://github.com/hashicorp/terraform){target=_blank} | [TERRAFORM](descriptors/terraform_terraform_fmt.md) | :white_circle: | [Repository](https://github.com/hashicorp/terraform){target=_blank} | | [**terragrunt**](https://github.com/gruntwork-io/terragrunt){target=_blank} | 0.39.2 | [MIT](licenses/terragrunt.md) | [![GitHub stars](https://img.shields.io/github/stars/gruntwork-io/terragrunt?cacheSeconds=3600)](https://github.com/gruntwork-io/terragrunt){target=_blank} | [TERRAFORM](descriptors/terraform_terragrunt.md) | :white_circle: | [Repository](https://github.com/gruntwork-io/terragrunt){target=_blank} | -| [**terrascan**](https://github.com/accurics/terrascan){target=_blank} | 1.15.2 | [Apache-2.0](licenses/terrascan.md) | [![GitHub stars](https://img.shields.io/github/stars/accurics/terrascan?cacheSeconds=3600)](https://github.com/accurics/terrascan){target=_blank} | [TERRAFORM](descriptors/terraform_terrascan.md) | :white_circle: | [Repository](https://github.com/accurics/terrascan){target=_blank} | +| [**terrascan**](https://github.com/accurics/terrascan){target=_blank} | 1.16.0 | [Apache-2.0](licenses/terrascan.md) | [![GitHub stars](https://img.shields.io/github/stars/accurics/terrascan?cacheSeconds=3600)](https://github.com/accurics/terrascan){target=_blank} | [TERRAFORM](descriptors/terraform_terrascan.md) | :white_circle: | [Repository](https://github.com/accurics/terrascan){target=_blank} | | [**tflint**](https://github.com/terraform-linters/tflint){target=_blank} | 0.41.0 | | [![GitHub stars](https://img.shields.io/github/stars/terraform-linters/tflint?cacheSeconds=3600)](https://github.com/terraform-linters/tflint){target=_blank} | [TERRAFORM](descriptors/terraform_tflint.md) | :white_circle: | [Repository](https://github.com/terraform-linters/tflint){target=_blank} | | [**trivy**](https://github.com/aquasecurity/trivy){target=_blank} | 0.29.2 | [Apache-2.0](licenses/trivy.md) | [![GitHub stars](https://img.shields.io/github/stars/aquasecurity/trivy?cacheSeconds=3600)](https://github.com/aquasecurity/trivy){target=_blank} | [REPOSITORY](descriptors/repository_trivy.md) | :white_circle: | [Repository](https://github.com/aquasecurity/trivy){target=_blank} | | [**tsqllint**](https://github.com/tsqllint/tsqllint){target=_blank} | 1.14.5.0 | [MIT](licenses/tsqllint.md) | [![GitHub stars](https://img.shields.io/github/stars/tsqllint/tsqllint?cacheSeconds=3600)](https://github.com/tsqllint/tsqllint){target=_blank} | [SQL](descriptors/sql_tsqllint.md) | :white_circle: | [Repository](https://github.com/tsqllint/tsqllint){target=_blank} | diff --git a/docs/all_users.md b/docs/all_users.md index aa4ff4302c4..c7a39bf3485 100644 --- a/docs/all_users.md +++ b/docs/all_users.md @@ -32,8 +32,8 @@ According to posted issues, there are many more private and self-hosted repos us [![carpenike/k8s-gitops - GitHub](https://gh-card.dev/repos/carpenike/k8s-gitops.svg?fullname=)](https://github.com/carpenike/k8s-gitops){target=_blank} [![joeygoksu/prime-nestjs - GitHub](https://gh-card.dev/repos/joeygoksu/prime-nestjs.svg?fullname=)](https://github.com/joeygoksu/prime-nestjs){target=_blank} [![meichthys/foss_photo_libraries - GitHub](https://gh-card.dev/repos/meichthys/foss_photo_libraries.svg?fullname=)](https://github.com/meichthys/foss_photo_libraries){target=_blank} -[![cbg-ethz/V-pipe - GitHub](https://gh-card.dev/repos/cbg-ethz/V-pipe.svg?fullname=)](https://github.com/cbg-ethz/V-pipe){target=_blank} [![T145/black-mirror - GitHub](https://gh-card.dev/repos/T145/black-mirror.svg?fullname=)](https://github.com/T145/black-mirror){target=_blank} +[![cbg-ethz/V-pipe - GitHub](https://gh-card.dev/repos/cbg-ethz/V-pipe.svg?fullname=)](https://github.com/cbg-ethz/V-pipe){target=_blank} [![practicalli/spacemacs - GitHub](https://gh-card.dev/repos/practicalli/spacemacs.svg?fullname=)](https://github.com/practicalli/spacemacs){target=_blank} [![practicalli/spacemacs - GitHub](https://gh-card.dev/repos/practicalli/spacemacs.svg?fullname=)](https://github.com/practicalli/spacemacs){target=_blank} [![oasisprotocol/oasis-wallet-web - GitHub](https://gh-card.dev/repos/oasisprotocol/oasis-wallet-web.svg?fullname=)](https://github.com/oasisprotocol/oasis-wallet-web){target=_blank} diff --git a/docs/descriptors/arm_arm_ttk.md b/docs/descriptors/arm_arm_ttk.md index c9937fa1aba..c07c52273ec 100644 --- a/docs/descriptors/arm_arm_ttk.md +++ b/docs/descriptors/arm_arm_ttk.md @@ -85,11 +85,11 @@ pwsh -NoProfile -NoLogo -Command " ### Help content ```shell -Test-AzTemplate: -Line | - 2 |  $TAZ_V = (Test-AzTemplate -help); - |  ~~~~~ - | A parameter cannot be found that matches parameter name 'help'. +Test-AzTemplate: +Line | + 2 |  $TAZ_V = (Test-AzTemplate -help); + |  ~~~~~ + | A parameter cannot be found that matches parameter name 'help'. ``` ### Installation on mega-linter Docker image diff --git a/docs/descriptors/cloudformation_cfn_lint.md b/docs/descriptors/cloudformation_cfn_lint.md index 150a55102d9..393da3026ad 100644 --- a/docs/descriptors/cloudformation_cfn_lint.md +++ b/docs/descriptors/cloudformation_cfn_lint.md @@ -11,7 +11,7 @@ ## cfn-lint documentation -- Version in MegaLinter: **0.67.0** +- Version in MegaLinter: **0.68.1** - Visit [Official Web Site](https://github.com/aws-cloudformation/cfn-lint#readme){target=_blank} - If custom `.cfnlintrc.yml` config file is not found, [.cfnlintrc.yml](https://github.com/oxsecurity/megalinter/tree/main/TEMPLATES/.cfnlintrc.yml){target=_blank} will be used - See [Index of problems detected by cfn-lint](https://github.com/aws-cloudformation/cfn-lint/blob/main/docs/rules.md){target=_blank} diff --git a/docs/descriptors/html_djlint.md b/docs/descriptors/html_djlint.md index 409f82f0b5f..560df22f852 100644 --- a/docs/descriptors/html_djlint.md +++ b/docs/descriptors/html_djlint.md @@ -23,7 +23,7 @@ For example, define `HTML_DJLINT_HTMLHINT_ARGUMENTS: ["--profile", "django"]` to ## djlint documentation -- Version in MegaLinter: **1.19.1** +- Version in MegaLinter: **1.19.2** - Visit [Official Web Site](https://djlint.com/){target=_blank} - See [How to configure djlint rules](https://djlint.com/docs/configuration/){target=_blank} - See [How to disable djlint rules in files](https://djlint.com/docs/ignoring-code/){target=_blank} diff --git a/docs/descriptors/javascript_eslint.md b/docs/descriptors/javascript_eslint.md index 232797bbac5..3686ecf7ed6 100644 --- a/docs/descriptors/javascript_eslint.md +++ b/docs/descriptors/javascript_eslint.md @@ -15,7 +15,7 @@ You can create it by typing `npx eslint --init` in the root of your repository ## eslint documentation -- Version in MegaLinter: **8.25.0** +- Version in MegaLinter: **8.26.0** - Visit [Official Web Site](https://eslint.org){target=_blank} - See [How to configure eslint rules](https://eslint.org/docs/user-guide/configuring){target=_blank} - See [How to disable eslint rules in files](https://eslint.org/docs/user-guide/configuring#disabling-rules-with-inline-comments){target=_blank} diff --git a/docs/descriptors/jsx_eslint.md b/docs/descriptors/jsx_eslint.md index 25a0a3548f6..12892cf3a96 100644 --- a/docs/descriptors/jsx_eslint.md +++ b/docs/descriptors/jsx_eslint.md @@ -14,7 +14,7 @@ You can create it by typing `npx eslint --init` in the root of your repository ## eslint documentation -- Version in MegaLinter: **8.25.0** +- Version in MegaLinter: **8.26.0** - Visit [Official Web Site](https://github.com/yannickcr/eslint-plugin-react#readme){target=_blank} - See [How to configure eslint rules](https://github.com/yannickcr/eslint-plugin-react#configuration){target=_blank} - See [How to disable eslint rules in files](https://eslint.org/docs/user-guide/configuring#disabling-rules-with-inline-comments){target=_blank} diff --git a/docs/descriptors/powershell_powershell.md b/docs/descriptors/powershell_powershell.md index 77c39dc25db..3546d34ad49 100644 --- a/docs/descriptors/powershell_powershell.md +++ b/docs/descriptors/powershell_powershell.md @@ -4,7 +4,7 @@ ## powershell documentation -- Version in MegaLinter: **7.2.6** +- Version in MegaLinter: **7.2.7** - Visit [Official Web Site](https://github.com/PowerShell/PSScriptAnalyzer#readme){target=_blank} - See [How to configure powershell rules](https://github.com/PowerShell/PSScriptAnalyzer#explicit){target=_blank} - If custom `.powershell-psscriptanalyzer.psd1` config file is not found, [.powershell-psscriptanalyzer.psd1](https://github.com/oxsecurity/megalinter/tree/main/TEMPLATES/.powershell-psscriptanalyzer.psd1){target=_blank} will be used diff --git a/docs/descriptors/puppet_puppet_lint.md b/docs/descriptors/puppet_puppet_lint.md index fc3f8254c32..a3a904195f9 100644 --- a/docs/descriptors/puppet_puppet_lint.md +++ b/docs/descriptors/puppet_puppet_lint.md @@ -4,7 +4,7 @@ ## puppet-lint documentation -- Version in MegaLinter: **3.0.0** +- Version in MegaLinter: **3.0.1** - Visit [Official Web Site](http://puppet-lint.com/){target=_blank} - See [How to configure puppet-lint rules](https://github.com/rodjek/puppet-lint#configuration-file){target=_blank} - See [How to disable puppet-lint rules in files](http://puppet-lint.com/controlcomments/){target=_blank} diff --git a/docs/descriptors/python_black.md b/docs/descriptors/python_black.md index bae12a49420..492c633067b 100644 --- a/docs/descriptors/python_black.md +++ b/docs/descriptors/python_black.md @@ -114,9 +114,9 @@ Options: input). --python-cell-magics TEXT When processing Jupyter Notebooks, add the given magic to the list of known python- - magics (prun, python3, timeit, time, - capture, pypy, python). Useful for - formatting cells with custom python magics. + magics (timeit, capture, time, python3, + pypy, prun, python). Useful for formatting + cells with custom python magics. -x, --skip-source-first-line Skip the first line of the source code. -S, --skip-string-normalization Don't normalize string quotes or prefixes. diff --git a/docs/descriptors/python_pylint.md b/docs/descriptors/python_pylint.md index 3aaa2b4d542..825f57d1f7c 100644 --- a/docs/descriptors/python_pylint.md +++ b/docs/descriptors/python_pylint.md @@ -11,7 +11,7 @@ ## pylint documentation -- Version in MegaLinter: **2.15.4** +- Version in MegaLinter: **2.15.5** - Visit [Official Web Site](https://pylint.pycqa.org){target=_blank} - See [How to configure pylint rules](https://pylint.pycqa.org/en/latest/user_guide/configuration/index.html){target=_blank} - If custom `.pylintrc` config file is not found, [.pylintrc](https://github.com/oxsecurity/megalinter/tree/main/TEMPLATES/.pylintrc){target=_blank} will be used @@ -273,65 +273,6 @@ Messages control: Warning level messages displayed, use "--disable=all --enable=classes --disable=W". -Spelling: - Check spelling in comments and docstrings. - - --spelling-dict - Spelling dictionary name. Available dictionaries: - none. To make it work, install the 'python-enchant' - package. (default: ) - --spelling-ignore-words - List of comma separated words that should not be - checked. (default: ) - --spelling-private-dict-file - A path to a file that contains the private dictionary; - one word per line. (default: ) - --spelling-store-unknown-words - Tells whether to store unknown words to the private - dictionary (see the --spelling-private-dict-file - option) instead of raising a message. (default: n) - --max-spelling-suggestions N - Limits count of emitted suggestions for spelling - mistakes. (default: 4) - --spelling-ignore-comment-directives - List of comma separated words that should be - considered directives if they appear at the beginning - of a comment and should not be checked. (default: fmt: - on,fmt: off,noqa:,noqa,nosec,isort:skip,mypy:) - -Classes: - Checker for class nodes. - - --defining-attr-methods - List of method names used to declare (i.e. assign) - instance attributes. (default: ('__init__', '__new__', - 'setUp', '__post_init__')) - --valid-classmethod-first-arg - List of valid names for the first argument in a class - method. (default: ('cls',)) - --valid-metaclass-classmethod-first-arg - List of valid names for the first argument in a - metaclass class method. (default: ('cls',)) - --exclude-protected - List of member names, which should be excluded from - the protected access warning. (default: ('_asdict', - '_fields', '_replace', '_source', '_make')) - --check-protected-access-in-special-methods - Warn about protected attribute access inside special - methods (default: False) - -Logging: - Checks use of the logging module. - - --logging-modules - Logging modules to check that the string format - arguments are in logging function parameter format. - (default: ('logging',)) - --logging-format-style - The type of string formatting that logging methods do. - `old` means using % formatting, `new` is for `{}` - formatting. (default: old) - Basic: --good-names Good variable names which should always be accepted, separated by a comma. (default: ('i', 'j', 'k', 'ex', @@ -457,119 +398,6 @@ Basic: Minimum line length for functions/classes that require docstrings, shorter ones are exempt. (default: -1) -Miscellaneous: - BaseChecker for encoding issues. - - --notes - List of note tags to take in consideration, separated - by a comma. (default: ('FIXME', 'XXX', 'TODO')) - --notes-rgx Regular expression of note tags to take in - consideration. (default: ) - -Format: - Formatting checker. - - --max-line-length - Maximum number of characters on a single line. - (default: 100) - --ignore-long-lines - Regexp for a line that is allowed to be longer than - the limit. (default: ^\s*(# )??$) - --single-line-if-stmt - Allow the body of an if to be on the same line as the - test if there is no else. (default: False) - --single-line-class-stmt - Allow the body of a class to be on the same line as - the declaration if body contains single statement. - (default: False) - --max-module-lines - Maximum number of lines in a module. (default: 1000) - --indent-string - String used as indentation unit. This is usually " " - (4 spaces) or " " (1 tab). (default: ) - --indent-after-paren - Number of spaces of indent required inside a hanging - or continued line. (default: 4) - --expected-line-ending-format - Expected format of line ending, e.g. empty (any line - ending), LF or CRLF. (default: ) - -Method_args: - BaseChecker for method_args. - - --timeout-methods - List of qualified names (i.e., library.method) which - require a timeout parameter e.g. - 'requests.api.get,requests.api.post' (default: - ('requests.api.delete', 'requests.api.get', - 'requests.api.head', 'requests.api.options', - 'requests.api.patch', 'requests.api.post', - 'requests.api.put', 'requests.api.request')) - -Refactoring: - Looks for code which can be refactored. - - --max-nested-blocks - Maximum number of nested blocks for function / method - body (default: 5) - --never-returning-functions - Complete name of functions that never returns. When - checking for inconsistent-return-statements if a never - returning function is called then it will be - considered as an explicit return statement and no - message will be printed. (default: ('sys.exit', - 'argparse.parse_error')) - -String: - Check string literals. - - --check-str-concat-over-line-jumps - This flag controls whether the implicit-str-concat - should generate a warning on implicit string - concatenation in sequences defined over several lines. - (default: False) - --check-quote-consistency - This flag controls whether inconsistent-quotes - generates a warning when the character used as a quote - delimiter is used inconsistently within a module. - (default: False) - -Design: - Checker of potential misdesigns. - - --max-args Maximum number of arguments for function / method. - (default: 5) - --max-locals Maximum number of locals for function / method body. - (default: 15) - --max-returns Maximum number of return / yield for function / method - body. (default: 6) - --max-branches Maximum number of branch for function / method body. - (default: 12) - --max-statements - Maximum number of statements in function / method - body. (default: 50) - --max-parents Maximum number of parents for a class (see R0901). - (default: 7) - --ignored-parents - List of qualified class names to ignore when counting - class parents (see R0901) (default: ()) - --max-attributes - Maximum number of attributes for a class (see R0902). - (default: 7) - --min-public-methods - Minimum number of public methods for a class (see - R0903). (default: 2) - --max-public-methods - Maximum number of public methods for a class (see - R0904). (default: 20) - --max-bool-expr - Maximum number of boolean expressions in an if - statement (see R0916). (default: 5) - --exclude-too-few-public-methods [,...] - List of regular expressions of class ancestor names to - ignore when counting public methods (see R0903) - (default: []) - Typecheck: Try to find bugs in the code using type inference. @@ -632,45 +460,17 @@ Typecheck: List of decorators that change the signature of a decorated function. (default: []) -Exceptions: - Exception related checks. - - --overgeneral-exceptions - Exceptions that will emit a warning when caught. - (default: ('BaseException', 'Exception')) - -Variables: - BaseChecker for variables. +Logging: + Checks use of the logging module. - --init-import - Tells whether we should check for unused import in - __init__ files. (default: False) - --dummy-variables-rgx - A regular expression matching the name of dummy - variables (i.e. expected to not be used). (default: _+ - $|(_[a-zA-Z0-9_]*[a-zA-Z0- - 9]+?$)|dummy|^ignored_|^unused_) - --additional-builtins - List of additional names supposed to be defined in - builtins. Remember that you should avoid defining new - builtins when possible. (default: ()) - --callbacks - List of strings which can identify a callback function - by name. A callback name must start or end with one of - those strings. (default: ('cb_', '_cb')) - --redefining-builtins-modules - List of qualified module names which can have objects - that can redefine builtins. (default: ('six.moves', - 'past.builtins', 'future.builtins', 'builtins', 'io')) - --ignored-argument-names - Argument names that match this expression will be - ignored. (default: - re.compile('_.*|^ignored_|^unused_')) - --allow-global-unused-variables - Tells whether unused global variables should be - treated as a violation. (default: True) - --allowed-redefined-builtins - List of names allowed to shadow builtins (default: ()) + --logging-modules + Logging modules to check that the string format + arguments are in logging function parameter format. + (default: ('logging',)) + --logging-format-style + The type of string formatting that logging methods do. + `old` means using % formatting, `new` is for `{}` + formatting. (default: old) Imports: BaseChecker for import statements. @@ -707,6 +507,197 @@ Imports: Allow wildcard imports from modules that define __all__. (default: False) +Variables: + BaseChecker for variables. + + --init-import + Tells whether we should check for unused import in + __init__ files. (default: False) + --dummy-variables-rgx + A regular expression matching the name of dummy + variables (i.e. expected to not be used). (default: _+ + $|(_[a-zA-Z0-9_]*[a-zA-Z0- + 9]+?$)|dummy|^ignored_|^unused_) + --additional-builtins + List of additional names supposed to be defined in + builtins. Remember that you should avoid defining new + builtins when possible. (default: ()) + --callbacks + List of strings which can identify a callback function + by name. A callback name must start or end with one of + those strings. (default: ('cb_', '_cb')) + --redefining-builtins-modules + List of qualified module names which can have objects + that can redefine builtins. (default: ('six.moves', + 'past.builtins', 'future.builtins', 'builtins', 'io')) + --ignored-argument-names + Argument names that match this expression will be + ignored. (default: + re.compile('_.*|^ignored_|^unused_')) + --allow-global-unused-variables + Tells whether unused global variables should be + treated as a violation. (default: True) + --allowed-redefined-builtins + List of names allowed to shadow builtins (default: ()) + +Design: + Checker of potential misdesigns. + + --max-args Maximum number of arguments for function / method. + (default: 5) + --max-locals Maximum number of locals for function / method body. + (default: 15) + --max-returns Maximum number of return / yield for function / method + body. (default: 6) + --max-branches Maximum number of branch for function / method body. + (default: 12) + --max-statements + Maximum number of statements in function / method + body. (default: 50) + --max-parents Maximum number of parents for a class (see R0901). + (default: 7) + --ignored-parents + List of qualified class names to ignore when counting + class parents (see R0901) (default: ()) + --max-attributes + Maximum number of attributes for a class (see R0902). + (default: 7) + --min-public-methods + Minimum number of public methods for a class (see + R0903). (default: 2) + --max-public-methods + Maximum number of public methods for a class (see + R0904). (default: 20) + --max-bool-expr + Maximum number of boolean expressions in an if + statement (see R0916). (default: 5) + --exclude-too-few-public-methods [,...] + List of regular expressions of class ancestor names to + ignore when counting public methods (see R0903) + (default: []) + +Format: + Formatting checker. + + --max-line-length + Maximum number of characters on a single line. + (default: 100) + --ignore-long-lines + Regexp for a line that is allowed to be longer than + the limit. (default: ^\s*(# )??$) + --single-line-if-stmt + Allow the body of an if to be on the same line as the + test if there is no else. (default: False) + --single-line-class-stmt + Allow the body of a class to be on the same line as + the declaration if body contains single statement. + (default: False) + --max-module-lines + Maximum number of lines in a module. (default: 1000) + --indent-string + String used as indentation unit. This is usually " " + (4 spaces) or " " (1 tab). (default: ) + --indent-after-paren + Number of spaces of indent required inside a hanging + or continued line. (default: 4) + --expected-line-ending-format + Expected format of line ending, e.g. empty (any line + ending), LF or CRLF. (default: ) + +Refactoring: + Looks for code which can be refactored. + + --max-nested-blocks + Maximum number of nested blocks for function / method + body (default: 5) + --never-returning-functions + Complete name of functions that never returns. When + checking for inconsistent-return-statements if a never + returning function is called then it will be + considered as an explicit return statement and no + message will be printed. (default: ('sys.exit', + 'argparse.parse_error')) + +String: + Check string literals. + + --check-str-concat-over-line-jumps + This flag controls whether the implicit-str-concat + should generate a warning on implicit string + concatenation in sequences defined over several lines. + (default: False) + --check-quote-consistency + This flag controls whether inconsistent-quotes + generates a warning when the character used as a quote + delimiter is used inconsistently within a module. + (default: False) + +Method_args: + BaseChecker for method_args. + + --timeout-methods + List of qualified names (i.e., library.method) which + require a timeout parameter e.g. + 'requests.api.get,requests.api.post' (default: + ('requests.api.delete', 'requests.api.get', + 'requests.api.head', 'requests.api.options', + 'requests.api.patch', 'requests.api.post', + 'requests.api.put', 'requests.api.request')) + +Exceptions: + Exception related checks. + + --overgeneral-exceptions + Exceptions that will emit a warning when caught. + (default: ('BaseException', 'Exception')) + +Spelling: + Check spelling in comments and docstrings. + + --spelling-dict + Spelling dictionary name. Available dictionaries: + none. To make it work, install the 'python-enchant' + package. (default: ) + --spelling-ignore-words + List of comma separated words that should not be + checked. (default: ) + --spelling-private-dict-file + A path to a file that contains the private dictionary; + one word per line. (default: ) + --spelling-store-unknown-words + Tells whether to store unknown words to the private + dictionary (see the --spelling-private-dict-file + option) instead of raising a message. (default: n) + --max-spelling-suggestions N + Limits count of emitted suggestions for spelling + mistakes. (default: 4) + --spelling-ignore-comment-directives + List of comma separated words that should be + considered directives if they appear at the beginning + of a comment and should not be checked. (default: fmt: + on,fmt: off,noqa:,noqa,nosec,isort:skip,mypy:) + +Classes: + Checker for class nodes. + + --defining-attr-methods + List of method names used to declare (i.e. assign) + instance attributes. (default: ('__init__', '__new__', + 'setUp', '__post_init__')) + --valid-classmethod-first-arg + List of valid names for the first argument in a class + method. (default: ('cls',)) + --valid-metaclass-classmethod-first-arg + List of valid names for the first argument in a + metaclass class method. (default: ('cls',)) + --exclude-protected + List of member names, which should be excluded from + the protected access warning. (default: ('_asdict', + '_fields', '_replace', '_source', '_make')) + --check-protected-access-in-special-methods + Warn about protected attribute access inside special + methods (default: False) + Similarities: Checks for similarities and duplicated code. @@ -724,6 +715,15 @@ Similarities: --ignore-signatures Signatures are removed from the similarity computation (default: True) + +Miscellaneous: + BaseChecker for encoding issues. + + --notes + List of note tags to take in consideration, separated + by a comma. (default: ('FIXME', 'XXX', 'TODO')) + --notes-rgx Regular expression of note tags to take in + consideration. (default: ) ``` ### Installation on mega-linter Docker image diff --git a/docs/descriptors/python_pyright.md b/docs/descriptors/python_pyright.md index dd81b180056..314110904ef 100644 --- a/docs/descriptors/python_pyright.md +++ b/docs/descriptors/python_pyright.md @@ -111,7 +111,7 @@ Usage: pyright [options] files... --warnings Use exit code of 1 if warnings are reported -w,--watch Continue to run and watch for changes -WARNING: there is a new pyright version available (v1.1.270 -> v1.1.275). +WARNING: there is a new pyright version available (v1.1.270 -> v1.1.276). Please install the new version or set PYRIGHT_PYTHON_FORCE_VERSION to `latest` ``` diff --git a/docs/descriptors/repository_checkov.md b/docs/descriptors/repository_checkov.md index ddcd22986b0..87b958748c8 100644 --- a/docs/descriptors/repository_checkov.md +++ b/docs/descriptors/repository_checkov.md @@ -123,7 +123,7 @@ usage: checkov [-h] [-v] [-d DIRECTORY] [--add-check] [-f FILE] [--secrets-scan-file-type SECRETS_SCAN_FILE_TYPE] [--enable-secret-scan-all-files] [--block-list-secret-scan BLOCK_LIST_SECRET_SCAN] - [--summary-position {bottom,top}] + [--summary-position {top,bottom}] [--skip-resources-without-violations] Infrastructure as code static analysis @@ -374,7 +374,7 @@ options: --block-list-secret-scan BLOCK_LIST_SECRET_SCAN List of files to filter out from the secret scanner [env var: CKV_SECRETS_SCAN_BLOCK_LIST] - --summary-position {bottom,top} + --summary-position {top,bottom} Chose whether the summary will be appended on top (before the checks results) or on bottom (after check results), default is on top. diff --git a/docs/descriptors/repository_git_diff.md b/docs/descriptors/repository_git_diff.md index 2b1059ba98f..5eb81a137fe 100644 --- a/docs/descriptors/repository_git_diff.md +++ b/docs/descriptors/repository_git_diff.md @@ -6,7 +6,7 @@ Git diff checks for git conflicts markers in files ## git_diff documentation -- Version in MegaLinter: **2.34.4** +- Version in MegaLinter: **2.34.5** - Visit [Official Web Site](https://git-scm.com){target=_blank} [![git - GitHub](https://gh-card.dev/repos/git/git.svg?fullname=)](https://github.com/git/git){target=_blank} diff --git a/docs/descriptors/repository_semgrep.md b/docs/descriptors/repository_semgrep.md index dac9536069c..7e53c088705 100644 --- a/docs/descriptors/repository_semgrep.md +++ b/docs/descriptors/repository_semgrep.md @@ -17,7 +17,7 @@ Exception for standalone and security flavors docker images, that use a list of ## semgrep documentation -- Version in MegaLinter: **0.117.0** +- Version in MegaLinter: **0.118.0** - Visit [Official Web Site](https://semgrep.dev/){target=_blank} - See [How to configure semgrep rules](https://semgrep.dev/docs/running-rules/){target=_blank} - See [How to disable semgrep rules in files](https://semgrep.dev/docs/ignoring-findings/#inline-comments){target=_blank} diff --git a/docs/descriptors/ruby_rubocop.md b/docs/descriptors/ruby_rubocop.md index c0825754a80..a5e021bb5bc 100644 --- a/docs/descriptors/ruby_rubocop.md +++ b/docs/descriptors/ruby_rubocop.md @@ -11,7 +11,7 @@ ## rubocop documentation -- Version in MegaLinter: **1.36.0** +- Version in MegaLinter: **1.37.0** - Visit [Official Web Site](https://rubocop.org/){target=_blank} - See [How to configure rubocop rules](https://docs.rubocop.org/rubocop/0.92/configuration.html){target=_blank} - If custom `.ruby-lint.yml` config file is not found, [.ruby-lint.yml](https://github.com/oxsecurity/megalinter/tree/main/TEMPLATES/.ruby-lint.yml){target=_blank} will be used @@ -222,6 +222,7 @@ Config Generation: --exclude-limit COUNT Set the limit for how many files to explicitly exclude. If there are more files than the limit, the cop will be disabled instead. Default is 15. + --no-exclude-limit Do not set the limit for how many files to exclude. --[no-]offense-counts Include offense counts in configuration file generated by --auto-gen-config. Default is true. diff --git a/docs/descriptors/salesforce_sfdx_scanner_apex.md b/docs/descriptors/salesforce_sfdx_scanner_apex.md index d45badc00e5..f321455c746 100644 --- a/docs/descriptors/salesforce_sfdx_scanner_apex.md +++ b/docs/descriptors/salesforce_sfdx_scanner_apex.md @@ -85,315 +85,9 @@ sfdx scanner:run ### Help content ```shell -evaluate a selection of rules against a codebase - -USAGE - $ sfdx scanner:run -t [-c ] [-r ] [-e ] - [-f csv|html|json|junit|sarif|table|xml] [-o ] [--tsconfig ] - [--eslintconfig ] [--pmdconfig ] [--env ] [-s - | undefined | [-v | --json]] [--normalize-severity] [--verbose] - [--loglevel - trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL] - -FLAGS - -c, --category= - categor(ies) of rules to run - - -e, --engine= - engine(s) to run - - -f, --format=(csv|html|json|junit|sarif|table|xml) - format of results - - -o, --outfile= - location of output file - - -r, --ruleset= - [deprecated] ruleset(s) of rules to run - - -s, --severity-threshold= - throws an error when violations of specific severity (or more severe) are - detected, invokes --normalize-severity - - -t, --target= - (required) location of source code - - -v, --violations-cause-error - [deprecated] throws an error when violations are detected - - --env= - JSON-formatted string, overrides ESLint's default environment variables - - --eslintconfig= - location of eslintrc config to customize eslint engine - - --json - format output as json - - --loglevel=(trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATA - L) - [default: warn] logging level for this command invocation - - --normalize-severity - A normalized severity 1 (high), 2 (moderate), and 3 (low) is returned in - addition to the engine specific severity - - --pmdconfig= - location of PMD rule reference XML file to customize rule selection - - --tsconfig= - location of tsconfig.json file - - --verbose - emit additional command output to stdout - -DESCRIPTION - evaluate a selection of rules against a codebase - -EXAMPLES - Invoking without specifying any rules causes all rules to be run. - E.g., $ sfdx scanner:run --format xml --target "somefile.js" - Evaluates all rules against somefile.js. - Specifying multiple categories is treated as a logical OR. - E.g., $ sfdx scanner:run --format xml --target "somefile.js" --category "Design,Best Practices" - Evaluates all rules in the Design or Best Practices categories. - Categories can be excluded by specifying the negation operator, the values must be enclosed in single quotes. - E.g., $ sfdx scanner:run --format xml --target "somefile.js" --category '!Design,!Best Practices' - Evaluates all rules except those in the Design or Best Practices categories. - Wrap globs in quotes. - Unix example: $ sfdx scanner:run --target './**/*.js,!./**/IgnoreMe.js' ... - Windows example: > sfdx scanner:run --target ".\**\*.js,!.\**\IgnoreMe.js" ... - Evaluate rules against all .js files below the current directory, except for IgnoreMe.js. - Specify tsconfig.json if the current working directory does not contain the tsconfig.json that corresponds to the TypeScript files being scanned. - E.g., sfdx scanner:run --target "/my-project/**/*.ts" --tsconfig "/my-project/tsconfig.json" - Scans the project contained in '/my-project' if the current working directory is another directory. - Use --env to override the default ESLint environment variables to add frameworks. - E.g., $ sfdx scanner:run --target "somefile.js" --env '{"jasmine": true}' - Evaluates rules against somefile.js, including Jasmine in the environment variables. - Use --violations-cause-error to throw exit with a non-zero code when violations are found. - E.g., $ sfdx scanner:run --target "somefile.js" --violations-cause-error - Evaluates rules against somefile.js. If any rules are violated, the exit code will be the severity of the most severe violation. - Use --engine to include or exclude engines. Any engine listed will be run, regardless of its current 'disabled' attribute. - E.g., $ sfdx scanner:run --target "somefile.js" --engine "eslint-lwc,pmd" - Evaluates rules against somefile.js, using eslint-lwc and pmd engines. - Use --engine to invoke engines that are not enabled by default. - E.g, $ sfdx scanner:run --target "/some/dir" --engine cpd - Executes CPD engine against known file extensions in "/some/dir". CPD helps detect blocks of code duplication in selected languages. - To use PMD with your own rule reference file, use --pmdconfig. Note that rule filters are not applied. - E.g, $ sfdx scanner:run --target "src" --pmdconfig "pmd_rule_ref.xml" - To use Eslint with your own .eslintrc.json file, use --eslintconfig. Make sure that the directory you run the command from has all the NPM dependencies installed. - E.g., $ sfdx scanner:run --target "src" --eslintconfig "/home/my/setup/.eslintrc.json" - Use --normalize-severity to output a normalized (across all engines) severity (1 [high], 2 [moderate], and 3 [low]) in addition to the engine specific severity (when shown). - E.g., $ sfdx scanner:run --target "/some-project/" --format csv --normalize-severity - Use --severity-threshold to throw a non-zero exit code when rule violations of a specific severity (or greater) are found. For this example, if there are any rule violations with a severity of 2 or more (which includes 1-high and 2-moderate), the exit code will be equal to the severity of the most severe violation. - E.g., $ sfdx scanner:run --target "/some-project/" --severity-threshold 2 - - -WARNING: We're constantly improving Salesforce Code Analyzer. Tell us what you think! Give feedback at https://research.net/r/SalesforceCA. -WARNING: v2.x's End Of Life is approaching. - In October 2022, v3.x of the Salesforce Code Analyzer will become the default version, - and older versions, including your currently installed version, will no longer be supported. - You can manually update to v3.x earlier for a smoother transition. -WARNING: As of April 27, 2022, v3.x of the Salesforce Code Analyzer is available as an open pilot. - To update to v3.x and try out our pilot features, run these commands: - > sfdx plugins:uninstall @salesforce/sfdx-scanner - > sfdx plugins:install @salesforce/sfdx-scanner@latest-pilot -NAME LANGUAGES CATEGORIES RULESETS [DEP] ENGINE -───────────────────────────────────────────────── ─────────── ──────────────── ──────────────────────────────────────────────── ───────────────── -VfCsrf visualforce Security Basic VF pmd -VfHtmlStyleTagXss visualforce Security pmd -VfUnescapeEl visualforce Security Basic VF pmd -ApexAssertionsShouldIncludeMessage apex Best Practices pmd -ApexUnitTestClassShouldHaveAsserts apex Best Practices quickstart,Default ruleset...,ApexUnit pmd -ApexUnitTestMethodShouldHaveIsTestAnnotation apex Best Practices pmd -ApexUnitTestShouldNotUseSeeAllDataTrue apex Best Practices quickstart,Default ruleset...,ApexUnit pmd -AvoidGlobalModifier apex Best Practices Style,quickstart,Default ruleset... pmd -AvoidLogicInTrigger apex Best Practices Style,quickstart,Default ruleset... pmd -DebugsShouldUseLoggingLevel apex Best Practices quickstart pmd -UnusedLocalVariable apex Best Practices pmd -AvoidDebugStatements apex Performance pmd -AvoidDmlStatementsInLoops apex Performance Default ruleset...,Performance pmd -AvoidSoqlInLoops apex Performance Default ruleset...,Performance pmd -AvoidSoslInLoops apex Performance Default ruleset...,Performance pmd -EagerlyLoadedDescribeSObjectResult apex Performance pmd -OperationWithLimitsInLoop apex Performance quickstart pmd -ApexBadCrypto apex Security Security,quickstart,Default ruleset... pmd -ApexCRUDViolation apex Security Security,quickstart,Default ruleset... pmd -ApexCSRF apex Security Security pmd -ApexDangerousMethods apex Security Security,quickstart,Default ruleset... pmd -ApexInsecureEndpoint apex Security Security,quickstart,Default ruleset... pmd -ApexOpenRedirect apex Security Security,quickstart,Default ruleset... pmd -ApexSharingViolations apex Security Security,quickstart,Default ruleset... pmd -ApexSOQLInjection apex Security Security,quickstart,Default ruleset... pmd -ApexSuggestUsingNamedCred apex Security Security,quickstart,Default ruleset... pmd -ApexXSSFromEscapeFalse apex Security Security,quickstart,Default ruleset... pmd -ApexXSSFromURLParam apex Security Security,quickstart,Default ruleset... pmd -ClassNamingConventions apex Code Style Style,quickstart,Default ruleset... pmd -IfElseStmtsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd -IfStmtsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd -FieldDeclarationsShouldBeAtStart apex Code Style pmd -FieldNamingConventions apex Code Style quickstart pmd -ForLoopsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd -FormalParameterNamingConventions apex Code Style quickstart pmd -LocalVariableNamingConventions apex Code Style quickstart pmd -MethodNamingConventions apex Code Style Style,quickstart,Default ruleset... pmd -OneDeclarationPerLine apex Code Style quickstart,Default ruleset... pmd -PropertyNamingConventions apex Code Style quickstart pmd -VariableNamingConventions apex Code Style Style,Default ruleset... pmd -WhileLoopsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd -AvoidDeeplyNestedIfStmts apex Design quickstart,Default ruleset...,Complexity pmd -CyclomaticComplexity apex Design Metrics tempora...,quickstart,Default ruleset... pmd -CognitiveComplexity apex Design pmd -ExcessiveClassLength apex Design quickstart,Default ruleset...,Complexity pmd -ExcessiveParameterList apex Design quickstart,Default ruleset...,Complexity pmd -ExcessivePublicCount apex Design quickstart,Default ruleset...,Complexity pmd -NcssConstructorCount apex Design quickstart,Default ruleset...,Complexity pmd -NcssMethodCount apex Design quickstart,Default ruleset...,Complexity pmd -NcssTypeCount apex Design quickstart,Default ruleset...,Complexity pmd -StdCyclomaticComplexity apex Design quickstart,Default ruleset...,Complexity pmd -TooManyFields apex Design quickstart,Default ruleset...,Complexity pmd -ApexDoc apex Documentation quickstart,Default ruleset... pmd -ApexCSRF apex Error Prone quickstart,Default ruleset... pmd -AvoidDirectAccessTriggerMap apex Error Prone Style,quickstart,Default ruleset... pmd -AvoidHardcodingId apex Error Prone Style,quickstart,Default ruleset... pmd -AvoidNonExistentAnnotations apex Error Prone quickstart,Default ruleset... pmd -EmptyCatchBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd -EmptyIfStmt apex Error Prone quickstart,Default ruleset...,Empty Code pmd -EmptyStatementBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd -EmptyTryOrFinallyBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd -EmptyWhileStmt apex Error Prone quickstart,Default ruleset...,Empty Code pmd -InaccessibleAuraEnabledGetter apex Error Prone pmd -MethodWithSameNameAsEnclosingClass apex Error Prone Style,quickstart,Default ruleset... pmd -OverrideBothEqualsAndHashcode apex Error Prone pmd -TestMethodsMustBeInTestClasses apex Error Prone pmd -constructor-super javascript ECMAScript 6 ECMAScript 6 eslint -for-direction javascript Possible Errors Possible Errors eslint -getter-return javascript Possible Errors Possible Errors eslint -no-async-promise-executor javascript Possible Errors Possible Errors eslint -no-case-declarations javascript Best Practices Best Practices eslint -no-class-assign javascript ECMAScript 6 ECMAScript 6 eslint -no-compare-neg-zero javascript Possible Errors Possible Errors eslint -no-cond-assign javascript Possible Errors Possible Errors eslint -no-const-assign javascript ECMAScript 6 ECMAScript 6 eslint -no-constant-condition javascript Possible Errors Possible Errors eslint -no-control-regex javascript Possible Errors Possible Errors eslint -no-debugger javascript Possible Errors Possible Errors eslint -no-delete-var javascript Variables Variables eslint -no-dupe-args javascript Possible Errors Possible Errors eslint -no-dupe-class-members javascript ECMAScript 6 ECMAScript 6 eslint -no-dupe-keys javascript Possible Errors Possible Errors eslint -no-duplicate-case javascript Possible Errors Possible Errors eslint -no-empty javascript Possible Errors Possible Errors eslint -no-empty-character-class javascript Possible Errors Possible Errors eslint -no-empty-pattern javascript Best Practices Best Practices eslint -no-ex-assign javascript Possible Errors Possible Errors eslint -no-extra-boolean-cast javascript Possible Errors Possible Errors eslint -no-extra-semi javascript Possible Errors Possible Errors eslint -no-fallthrough javascript Best Practices Best Practices eslint -no-func-assign javascript Possible Errors Possible Errors eslint -no-global-assign javascript Best Practices Best Practices eslint -no-inner-declarations javascript Possible Errors Possible Errors eslint -no-invalid-regexp javascript Possible Errors Possible Errors eslint -no-irregular-whitespace javascript Possible Errors Possible Errors eslint -no-misleading-character-class javascript Possible Errors Possible Errors eslint -no-mixed-spaces-and-tabs javascript Stylistic Issues Stylistic Issues eslint -no-new-symbol javascript ECMAScript 6 ECMAScript 6 eslint -no-obj-calls javascript Possible Errors Possible Errors eslint -no-octal javascript Best Practices Best Practices eslint -no-prototype-builtins javascript Possible Errors Possible Errors eslint -no-redeclare javascript Best Practices Best Practices eslint -no-regex-spaces javascript Possible Errors Possible Errors eslint -no-self-assign javascript Best Practices Best Practices eslint -no-shadow-restricted-names javascript Variables Variables eslint -no-sparse-arrays javascript Possible Errors Possible Errors eslint -no-this-before-super javascript ECMAScript 6 ECMAScript 6 eslint -no-undef javascript Variables Variables eslint -no-unexpected-multiline javascript Possible Errors Possible Errors eslint -no-unreachable javascript Possible Errors Possible Errors eslint -no-unsafe-finally javascript Possible Errors Possible Errors eslint -no-unsafe-negation javascript Possible Errors Possible Errors eslint -no-unused-labels javascript Best Practices Best Practices eslint -no-unused-vars javascript Variables Variables eslint -no-useless-catch javascript Best Practices Best Practices eslint -no-useless-escape javascript Best Practices Best Practices eslint -no-with javascript Best Practices Best Practices eslint -require-yield javascript ECMAScript 6 ECMAScript 6 eslint -use-isnan javascript Possible Errors Possible Errors eslint -valid-typeof javascript Possible Errors Possible Errors eslint -constructor-super typescript ECMAScript 6 ECMAScript 6 eslint-typescript -for-direction typescript Possible Errors Possible Errors eslint-typescript -no-async-promise-executor typescript Possible Errors Possible Errors eslint-typescript -no-case-declarations typescript Best Practices Best Practices eslint-typescript -no-class-assign typescript ECMAScript 6 ECMAScript 6 eslint-typescript -no-compare-neg-zero typescript Possible Errors Possible Errors eslint-typescript -no-cond-assign typescript Possible Errors Possible Errors eslint-typescript -no-constant-condition typescript Possible Errors Possible Errors eslint-typescript -no-control-regex typescript Possible Errors Possible Errors eslint-typescript -no-debugger typescript Possible Errors Possible Errors eslint-typescript -no-delete-var typescript Variables Variables eslint-typescript -no-duplicate-case typescript Possible Errors Possible Errors eslint-typescript -no-empty typescript Possible Errors Possible Errors eslint-typescript -no-empty-character-class typescript Possible Errors Possible Errors eslint-typescript -no-empty-pattern typescript Best Practices Best Practices eslint-typescript -no-ex-assign typescript Possible Errors Possible Errors eslint-typescript -no-extra-boolean-cast typescript Possible Errors Possible Errors eslint-typescript -no-fallthrough typescript Best Practices Best Practices eslint-typescript -no-func-assign typescript Possible Errors Possible Errors eslint-typescript -no-global-assign typescript Best Practices Best Practices eslint-typescript -no-inner-declarations typescript Possible Errors Possible Errors eslint-typescript -no-invalid-regexp typescript Possible Errors Possible Errors eslint-typescript -no-irregular-whitespace typescript Possible Errors Possible Errors eslint-typescript -no-misleading-character-class typescript Possible Errors Possible Errors eslint-typescript -no-mixed-spaces-and-tabs typescript Stylistic Issues Stylistic Issues eslint-typescript -no-obj-calls typescript Possible Errors Possible Errors eslint-typescript -no-octal typescript Best Practices Best Practices eslint-typescript -no-prototype-builtins typescript Possible Errors Possible Errors eslint-typescript -no-regex-spaces typescript Possible Errors Possible Errors eslint-typescript -no-self-assign typescript Best Practices Best Practices eslint-typescript -no-shadow-restricted-names typescript Variables Variables eslint-typescript -no-sparse-arrays typescript Possible Errors Possible Errors eslint-typescript -no-unexpected-multiline typescript Possible Errors Possible Errors eslint-typescript -no-unsafe-finally typescript Possible Errors Possible Errors eslint-typescript -no-unsafe-negation typescript Possible Errors Possible Errors eslint-typescript -no-unused-labels typescript Best Practices Best Practices eslint-typescript -no-useless-catch typescript Best Practices Best Practices eslint-typescript -no-useless-escape typescript Best Practices Best Practices eslint-typescript -no-var typescript ECMAScript 6 ECMAScript 6 eslint-typescript -no-with typescript Best Practices Best Practices eslint-typescript -prefer-const typescript ECMAScript 6 ECMAScript 6 eslint-typescript -prefer-rest-params typescript ECMAScript 6 ECMAScript 6 eslint-typescript -prefer-spread typescript ECMAScript 6 ECMAScript 6 eslint-typescript -require-yield typescript ECMAScript 6 ECMAScript 6 eslint-typescript -use-isnan typescript Possible Errors Possible Errors eslint-typescript -@typescript-eslint/adjacent-overload-signatures typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/await-thenable typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/ban-types typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/consistent-type-assertions typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/explicit-function-return-type typescript Stylistic Issues Stylistic Issues eslint-typescript -@typescript-eslint/member-delimiter-style typescript Stylistic Issues Stylistic Issues eslint-typescript -@typescript-eslint/no-array-constructor typescript Stylistic Issues Stylistic Issues eslint-typescript -@typescript-eslint/no-empty-function typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/no-empty-interface typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/no-explicit-any typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/no-for-in-array typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/no-inferrable-types typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/no-misused-new typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/no-misused-promises typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/no-namespace typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/no-non-null-assertion typescript Stylistic Issues Stylistic Issues eslint-typescript -@typescript-eslint/no-this-alias typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/no-unnecessary-type-assertion typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/no-unused-vars typescript Variables Variables eslint-typescript -@typescript-eslint/no-use-before-define typescript Variables Variables eslint-typescript -@typescript-eslint/no-var-requires typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/prefer-includes typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/prefer-namespace-keyword typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/prefer-regexp-exec typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/prefer-string-starts-ends-with typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/require-await typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/triple-slash-reference typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/type-annotation-spacing typescript Stylistic Issues Stylistic Issues eslint-typescript -@typescript-eslint/unbound-method typescript Best Practices Best Practices eslint-typescript + › Error: Command scanner:run not found. + › Warning: scanner:rule:list is not a sfdx command. +Did you mean force:auth:list? [y/n]: ``` ### Installation on mega-linter Docker image diff --git a/docs/descriptors/salesforce_sfdx_scanner_aura.md b/docs/descriptors/salesforce_sfdx_scanner_aura.md index b4ba0b4fadb..4ce8d4829b5 100644 --- a/docs/descriptors/salesforce_sfdx_scanner_aura.md +++ b/docs/descriptors/salesforce_sfdx_scanner_aura.md @@ -81,315 +81,9 @@ sfdx scanner:run ### Help content ```shell -evaluate a selection of rules against a codebase - -USAGE - $ sfdx scanner:run -t [-c ] [-r ] [-e ] - [-f csv|html|json|junit|sarif|table|xml] [-o ] [--tsconfig ] - [--eslintconfig ] [--pmdconfig ] [--env ] [-s - | undefined | [-v | --json]] [--normalize-severity] [--verbose] - [--loglevel - trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL] - -FLAGS - -c, --category= - categor(ies) of rules to run - - -e, --engine= - engine(s) to run - - -f, --format=(csv|html|json|junit|sarif|table|xml) - format of results - - -o, --outfile= - location of output file - - -r, --ruleset= - [deprecated] ruleset(s) of rules to run - - -s, --severity-threshold= - throws an error when violations of specific severity (or more severe) are - detected, invokes --normalize-severity - - -t, --target= - (required) location of source code - - -v, --violations-cause-error - [deprecated] throws an error when violations are detected - - --env= - JSON-formatted string, overrides ESLint's default environment variables - - --eslintconfig= - location of eslintrc config to customize eslint engine - - --json - format output as json - - --loglevel=(trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATA - L) - [default: warn] logging level for this command invocation - - --normalize-severity - A normalized severity 1 (high), 2 (moderate), and 3 (low) is returned in - addition to the engine specific severity - - --pmdconfig= - location of PMD rule reference XML file to customize rule selection - - --tsconfig= - location of tsconfig.json file - - --verbose - emit additional command output to stdout - -DESCRIPTION - evaluate a selection of rules against a codebase - -EXAMPLES - Invoking without specifying any rules causes all rules to be run. - E.g., $ sfdx scanner:run --format xml --target "somefile.js" - Evaluates all rules against somefile.js. - Specifying multiple categories is treated as a logical OR. - E.g., $ sfdx scanner:run --format xml --target "somefile.js" --category "Design,Best Practices" - Evaluates all rules in the Design or Best Practices categories. - Categories can be excluded by specifying the negation operator, the values must be enclosed in single quotes. - E.g., $ sfdx scanner:run --format xml --target "somefile.js" --category '!Design,!Best Practices' - Evaluates all rules except those in the Design or Best Practices categories. - Wrap globs in quotes. - Unix example: $ sfdx scanner:run --target './**/*.js,!./**/IgnoreMe.js' ... - Windows example: > sfdx scanner:run --target ".\**\*.js,!.\**\IgnoreMe.js" ... - Evaluate rules against all .js files below the current directory, except for IgnoreMe.js. - Specify tsconfig.json if the current working directory does not contain the tsconfig.json that corresponds to the TypeScript files being scanned. - E.g., sfdx scanner:run --target "/my-project/**/*.ts" --tsconfig "/my-project/tsconfig.json" - Scans the project contained in '/my-project' if the current working directory is another directory. - Use --env to override the default ESLint environment variables to add frameworks. - E.g., $ sfdx scanner:run --target "somefile.js" --env '{"jasmine": true}' - Evaluates rules against somefile.js, including Jasmine in the environment variables. - Use --violations-cause-error to throw exit with a non-zero code when violations are found. - E.g., $ sfdx scanner:run --target "somefile.js" --violations-cause-error - Evaluates rules against somefile.js. If any rules are violated, the exit code will be the severity of the most severe violation. - Use --engine to include or exclude engines. Any engine listed will be run, regardless of its current 'disabled' attribute. - E.g., $ sfdx scanner:run --target "somefile.js" --engine "eslint-lwc,pmd" - Evaluates rules against somefile.js, using eslint-lwc and pmd engines. - Use --engine to invoke engines that are not enabled by default. - E.g, $ sfdx scanner:run --target "/some/dir" --engine cpd - Executes CPD engine against known file extensions in "/some/dir". CPD helps detect blocks of code duplication in selected languages. - To use PMD with your own rule reference file, use --pmdconfig. Note that rule filters are not applied. - E.g, $ sfdx scanner:run --target "src" --pmdconfig "pmd_rule_ref.xml" - To use Eslint with your own .eslintrc.json file, use --eslintconfig. Make sure that the directory you run the command from has all the NPM dependencies installed. - E.g., $ sfdx scanner:run --target "src" --eslintconfig "/home/my/setup/.eslintrc.json" - Use --normalize-severity to output a normalized (across all engines) severity (1 [high], 2 [moderate], and 3 [low]) in addition to the engine specific severity (when shown). - E.g., $ sfdx scanner:run --target "/some-project/" --format csv --normalize-severity - Use --severity-threshold to throw a non-zero exit code when rule violations of a specific severity (or greater) are found. For this example, if there are any rule violations with a severity of 2 or more (which includes 1-high and 2-moderate), the exit code will be equal to the severity of the most severe violation. - E.g., $ sfdx scanner:run --target "/some-project/" --severity-threshold 2 - - -WARNING: We're constantly improving Salesforce Code Analyzer. Tell us what you think! Give feedback at https://research.net/r/SalesforceCA. -WARNING: v2.x's End Of Life is approaching. - In October 2022, v3.x of the Salesforce Code Analyzer will become the default version, - and older versions, including your currently installed version, will no longer be supported. - You can manually update to v3.x earlier for a smoother transition. -WARNING: As of April 27, 2022, v3.x of the Salesforce Code Analyzer is available as an open pilot. - To update to v3.x and try out our pilot features, run these commands: - > sfdx plugins:uninstall @salesforce/sfdx-scanner - > sfdx plugins:install @salesforce/sfdx-scanner@latest-pilot -NAME LANGUAGES CATEGORIES RULESETS [DEP] ENGINE -───────────────────────────────────────────────── ─────────── ──────────────── ──────────────────────────────────────────────── ───────────────── -VfCsrf visualforce Security Basic VF pmd -VfHtmlStyleTagXss visualforce Security pmd -VfUnescapeEl visualforce Security Basic VF pmd -ApexAssertionsShouldIncludeMessage apex Best Practices pmd -ApexUnitTestClassShouldHaveAsserts apex Best Practices quickstart,Default ruleset...,ApexUnit pmd -ApexUnitTestMethodShouldHaveIsTestAnnotation apex Best Practices pmd -ApexUnitTestShouldNotUseSeeAllDataTrue apex Best Practices quickstart,Default ruleset...,ApexUnit pmd -AvoidGlobalModifier apex Best Practices Style,quickstart,Default ruleset... pmd -AvoidLogicInTrigger apex Best Practices Style,quickstart,Default ruleset... pmd -DebugsShouldUseLoggingLevel apex Best Practices quickstart pmd -UnusedLocalVariable apex Best Practices pmd -AvoidDebugStatements apex Performance pmd -AvoidDmlStatementsInLoops apex Performance Default ruleset...,Performance pmd -AvoidSoqlInLoops apex Performance Default ruleset...,Performance pmd -AvoidSoslInLoops apex Performance Default ruleset...,Performance pmd -EagerlyLoadedDescribeSObjectResult apex Performance pmd -OperationWithLimitsInLoop apex Performance quickstart pmd -ApexBadCrypto apex Security Security,quickstart,Default ruleset... pmd -ApexCRUDViolation apex Security Security,quickstart,Default ruleset... pmd -ApexCSRF apex Security Security pmd -ApexDangerousMethods apex Security Security,quickstart,Default ruleset... pmd -ApexInsecureEndpoint apex Security Security,quickstart,Default ruleset... pmd -ApexOpenRedirect apex Security Security,quickstart,Default ruleset... pmd -ApexSharingViolations apex Security Security,quickstart,Default ruleset... pmd -ApexSOQLInjection apex Security Security,quickstart,Default ruleset... pmd -ApexSuggestUsingNamedCred apex Security Security,quickstart,Default ruleset... pmd -ApexXSSFromEscapeFalse apex Security Security,quickstart,Default ruleset... pmd -ApexXSSFromURLParam apex Security Security,quickstart,Default ruleset... pmd -ClassNamingConventions apex Code Style Style,quickstart,Default ruleset... pmd -IfElseStmtsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd -IfStmtsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd -FieldDeclarationsShouldBeAtStart apex Code Style pmd -FieldNamingConventions apex Code Style quickstart pmd -ForLoopsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd -FormalParameterNamingConventions apex Code Style quickstart pmd -LocalVariableNamingConventions apex Code Style quickstart pmd -MethodNamingConventions apex Code Style Style,quickstart,Default ruleset... pmd -OneDeclarationPerLine apex Code Style quickstart,Default ruleset... pmd -PropertyNamingConventions apex Code Style quickstart pmd -VariableNamingConventions apex Code Style Style,Default ruleset... pmd -WhileLoopsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd -AvoidDeeplyNestedIfStmts apex Design quickstart,Default ruleset...,Complexity pmd -CyclomaticComplexity apex Design Metrics tempora...,quickstart,Default ruleset... pmd -CognitiveComplexity apex Design pmd -ExcessiveClassLength apex Design quickstart,Default ruleset...,Complexity pmd -ExcessiveParameterList apex Design quickstart,Default ruleset...,Complexity pmd -ExcessivePublicCount apex Design quickstart,Default ruleset...,Complexity pmd -NcssConstructorCount apex Design quickstart,Default ruleset...,Complexity pmd -NcssMethodCount apex Design quickstart,Default ruleset...,Complexity pmd -NcssTypeCount apex Design quickstart,Default ruleset...,Complexity pmd -StdCyclomaticComplexity apex Design quickstart,Default ruleset...,Complexity pmd -TooManyFields apex Design quickstart,Default ruleset...,Complexity pmd -ApexDoc apex Documentation quickstart,Default ruleset... pmd -ApexCSRF apex Error Prone quickstart,Default ruleset... pmd -AvoidDirectAccessTriggerMap apex Error Prone Style,quickstart,Default ruleset... pmd -AvoidHardcodingId apex Error Prone Style,quickstart,Default ruleset... pmd -AvoidNonExistentAnnotations apex Error Prone quickstart,Default ruleset... pmd -EmptyCatchBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd -EmptyIfStmt apex Error Prone quickstart,Default ruleset...,Empty Code pmd -EmptyStatementBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd -EmptyTryOrFinallyBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd -EmptyWhileStmt apex Error Prone quickstart,Default ruleset...,Empty Code pmd -InaccessibleAuraEnabledGetter apex Error Prone pmd -MethodWithSameNameAsEnclosingClass apex Error Prone Style,quickstart,Default ruleset... pmd -OverrideBothEqualsAndHashcode apex Error Prone pmd -TestMethodsMustBeInTestClasses apex Error Prone pmd -constructor-super javascript ECMAScript 6 ECMAScript 6 eslint -for-direction javascript Possible Errors Possible Errors eslint -getter-return javascript Possible Errors Possible Errors eslint -no-async-promise-executor javascript Possible Errors Possible Errors eslint -no-case-declarations javascript Best Practices Best Practices eslint -no-class-assign javascript ECMAScript 6 ECMAScript 6 eslint -no-compare-neg-zero javascript Possible Errors Possible Errors eslint -no-cond-assign javascript Possible Errors Possible Errors eslint -no-const-assign javascript ECMAScript 6 ECMAScript 6 eslint -no-constant-condition javascript Possible Errors Possible Errors eslint -no-control-regex javascript Possible Errors Possible Errors eslint -no-debugger javascript Possible Errors Possible Errors eslint -no-delete-var javascript Variables Variables eslint -no-dupe-args javascript Possible Errors Possible Errors eslint -no-dupe-class-members javascript ECMAScript 6 ECMAScript 6 eslint -no-dupe-keys javascript Possible Errors Possible Errors eslint -no-duplicate-case javascript Possible Errors Possible Errors eslint -no-empty javascript Possible Errors Possible Errors eslint -no-empty-character-class javascript Possible Errors Possible Errors eslint -no-empty-pattern javascript Best Practices Best Practices eslint -no-ex-assign javascript Possible Errors Possible Errors eslint -no-extra-boolean-cast javascript Possible Errors Possible Errors eslint -no-extra-semi javascript Possible Errors Possible Errors eslint -no-fallthrough javascript Best Practices Best Practices eslint -no-func-assign javascript Possible Errors Possible Errors eslint -no-global-assign javascript Best Practices Best Practices eslint -no-inner-declarations javascript Possible Errors Possible Errors eslint -no-invalid-regexp javascript Possible Errors Possible Errors eslint -no-irregular-whitespace javascript Possible Errors Possible Errors eslint -no-misleading-character-class javascript Possible Errors Possible Errors eslint -no-mixed-spaces-and-tabs javascript Stylistic Issues Stylistic Issues eslint -no-new-symbol javascript ECMAScript 6 ECMAScript 6 eslint -no-obj-calls javascript Possible Errors Possible Errors eslint -no-octal javascript Best Practices Best Practices eslint -no-prototype-builtins javascript Possible Errors Possible Errors eslint -no-redeclare javascript Best Practices Best Practices eslint -no-regex-spaces javascript Possible Errors Possible Errors eslint -no-self-assign javascript Best Practices Best Practices eslint -no-shadow-restricted-names javascript Variables Variables eslint -no-sparse-arrays javascript Possible Errors Possible Errors eslint -no-this-before-super javascript ECMAScript 6 ECMAScript 6 eslint -no-undef javascript Variables Variables eslint -no-unexpected-multiline javascript Possible Errors Possible Errors eslint -no-unreachable javascript Possible Errors Possible Errors eslint -no-unsafe-finally javascript Possible Errors Possible Errors eslint -no-unsafe-negation javascript Possible Errors Possible Errors eslint -no-unused-labels javascript Best Practices Best Practices eslint -no-unused-vars javascript Variables Variables eslint -no-useless-catch javascript Best Practices Best Practices eslint -no-useless-escape javascript Best Practices Best Practices eslint -no-with javascript Best Practices Best Practices eslint -require-yield javascript ECMAScript 6 ECMAScript 6 eslint -use-isnan javascript Possible Errors Possible Errors eslint -valid-typeof javascript Possible Errors Possible Errors eslint -constructor-super typescript ECMAScript 6 ECMAScript 6 eslint-typescript -for-direction typescript Possible Errors Possible Errors eslint-typescript -no-async-promise-executor typescript Possible Errors Possible Errors eslint-typescript -no-case-declarations typescript Best Practices Best Practices eslint-typescript -no-class-assign typescript ECMAScript 6 ECMAScript 6 eslint-typescript -no-compare-neg-zero typescript Possible Errors Possible Errors eslint-typescript -no-cond-assign typescript Possible Errors Possible Errors eslint-typescript -no-constant-condition typescript Possible Errors Possible Errors eslint-typescript -no-control-regex typescript Possible Errors Possible Errors eslint-typescript -no-debugger typescript Possible Errors Possible Errors eslint-typescript -no-delete-var typescript Variables Variables eslint-typescript -no-duplicate-case typescript Possible Errors Possible Errors eslint-typescript -no-empty typescript Possible Errors Possible Errors eslint-typescript -no-empty-character-class typescript Possible Errors Possible Errors eslint-typescript -no-empty-pattern typescript Best Practices Best Practices eslint-typescript -no-ex-assign typescript Possible Errors Possible Errors eslint-typescript -no-extra-boolean-cast typescript Possible Errors Possible Errors eslint-typescript -no-fallthrough typescript Best Practices Best Practices eslint-typescript -no-func-assign typescript Possible Errors Possible Errors eslint-typescript -no-global-assign typescript Best Practices Best Practices eslint-typescript -no-inner-declarations typescript Possible Errors Possible Errors eslint-typescript -no-invalid-regexp typescript Possible Errors Possible Errors eslint-typescript -no-irregular-whitespace typescript Possible Errors Possible Errors eslint-typescript -no-misleading-character-class typescript Possible Errors Possible Errors eslint-typescript -no-mixed-spaces-and-tabs typescript Stylistic Issues Stylistic Issues eslint-typescript -no-obj-calls typescript Possible Errors Possible Errors eslint-typescript -no-octal typescript Best Practices Best Practices eslint-typescript -no-prototype-builtins typescript Possible Errors Possible Errors eslint-typescript -no-regex-spaces typescript Possible Errors Possible Errors eslint-typescript -no-self-assign typescript Best Practices Best Practices eslint-typescript -no-shadow-restricted-names typescript Variables Variables eslint-typescript -no-sparse-arrays typescript Possible Errors Possible Errors eslint-typescript -no-unexpected-multiline typescript Possible Errors Possible Errors eslint-typescript -no-unsafe-finally typescript Possible Errors Possible Errors eslint-typescript -no-unsafe-negation typescript Possible Errors Possible Errors eslint-typescript -no-unused-labels typescript Best Practices Best Practices eslint-typescript -no-useless-catch typescript Best Practices Best Practices eslint-typescript -no-useless-escape typescript Best Practices Best Practices eslint-typescript -no-var typescript ECMAScript 6 ECMAScript 6 eslint-typescript -no-with typescript Best Practices Best Practices eslint-typescript -prefer-const typescript ECMAScript 6 ECMAScript 6 eslint-typescript -prefer-rest-params typescript ECMAScript 6 ECMAScript 6 eslint-typescript -prefer-spread typescript ECMAScript 6 ECMAScript 6 eslint-typescript -require-yield typescript ECMAScript 6 ECMAScript 6 eslint-typescript -use-isnan typescript Possible Errors Possible Errors eslint-typescript -@typescript-eslint/adjacent-overload-signatures typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/await-thenable typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/ban-types typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/consistent-type-assertions typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/explicit-function-return-type typescript Stylistic Issues Stylistic Issues eslint-typescript -@typescript-eslint/member-delimiter-style typescript Stylistic Issues Stylistic Issues eslint-typescript -@typescript-eslint/no-array-constructor typescript Stylistic Issues Stylistic Issues eslint-typescript -@typescript-eslint/no-empty-function typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/no-empty-interface typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/no-explicit-any typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/no-for-in-array typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/no-inferrable-types typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/no-misused-new typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/no-misused-promises typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/no-namespace typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/no-non-null-assertion typescript Stylistic Issues Stylistic Issues eslint-typescript -@typescript-eslint/no-this-alias typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/no-unnecessary-type-assertion typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/no-unused-vars typescript Variables Variables eslint-typescript -@typescript-eslint/no-use-before-define typescript Variables Variables eslint-typescript -@typescript-eslint/no-var-requires typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/prefer-includes typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/prefer-namespace-keyword typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/prefer-regexp-exec typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/prefer-string-starts-ends-with typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/require-await typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/triple-slash-reference typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/type-annotation-spacing typescript Stylistic Issues Stylistic Issues eslint-typescript -@typescript-eslint/unbound-method typescript Best Practices Best Practices eslint-typescript + › Error: Command scanner:run not found. + › Warning: scanner:rule:list is not a sfdx command. +Did you mean force:auth:list? [y/n]: ``` ### Installation on mega-linter Docker image diff --git a/docs/descriptors/salesforce_sfdx_scanner_lwc.md b/docs/descriptors/salesforce_sfdx_scanner_lwc.md index 294bf5eed3d..69f1243e677 100644 --- a/docs/descriptors/salesforce_sfdx_scanner_lwc.md +++ b/docs/descriptors/salesforce_sfdx_scanner_lwc.md @@ -81,315 +81,9 @@ sfdx scanner:run ### Help content ```shell -evaluate a selection of rules against a codebase - -USAGE - $ sfdx scanner:run -t [-c ] [-r ] [-e ] - [-f csv|html|json|junit|sarif|table|xml] [-o ] [--tsconfig ] - [--eslintconfig ] [--pmdconfig ] [--env ] [-s - | undefined | [-v | --json]] [--normalize-severity] [--verbose] - [--loglevel - trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL] - -FLAGS - -c, --category= - categor(ies) of rules to run - - -e, --engine= - engine(s) to run - - -f, --format=(csv|html|json|junit|sarif|table|xml) - format of results - - -o, --outfile= - location of output file - - -r, --ruleset= - [deprecated] ruleset(s) of rules to run - - -s, --severity-threshold= - throws an error when violations of specific severity (or more severe) are - detected, invokes --normalize-severity - - -t, --target= - (required) location of source code - - -v, --violations-cause-error - [deprecated] throws an error when violations are detected - - --env= - JSON-formatted string, overrides ESLint's default environment variables - - --eslintconfig= - location of eslintrc config to customize eslint engine - - --json - format output as json - - --loglevel=(trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATA - L) - [default: warn] logging level for this command invocation - - --normalize-severity - A normalized severity 1 (high), 2 (moderate), and 3 (low) is returned in - addition to the engine specific severity - - --pmdconfig= - location of PMD rule reference XML file to customize rule selection - - --tsconfig= - location of tsconfig.json file - - --verbose - emit additional command output to stdout - -DESCRIPTION - evaluate a selection of rules against a codebase - -EXAMPLES - Invoking without specifying any rules causes all rules to be run. - E.g., $ sfdx scanner:run --format xml --target "somefile.js" - Evaluates all rules against somefile.js. - Specifying multiple categories is treated as a logical OR. - E.g., $ sfdx scanner:run --format xml --target "somefile.js" --category "Design,Best Practices" - Evaluates all rules in the Design or Best Practices categories. - Categories can be excluded by specifying the negation operator, the values must be enclosed in single quotes. - E.g., $ sfdx scanner:run --format xml --target "somefile.js" --category '!Design,!Best Practices' - Evaluates all rules except those in the Design or Best Practices categories. - Wrap globs in quotes. - Unix example: $ sfdx scanner:run --target './**/*.js,!./**/IgnoreMe.js' ... - Windows example: > sfdx scanner:run --target ".\**\*.js,!.\**\IgnoreMe.js" ... - Evaluate rules against all .js files below the current directory, except for IgnoreMe.js. - Specify tsconfig.json if the current working directory does not contain the tsconfig.json that corresponds to the TypeScript files being scanned. - E.g., sfdx scanner:run --target "/my-project/**/*.ts" --tsconfig "/my-project/tsconfig.json" - Scans the project contained in '/my-project' if the current working directory is another directory. - Use --env to override the default ESLint environment variables to add frameworks. - E.g., $ sfdx scanner:run --target "somefile.js" --env '{"jasmine": true}' - Evaluates rules against somefile.js, including Jasmine in the environment variables. - Use --violations-cause-error to throw exit with a non-zero code when violations are found. - E.g., $ sfdx scanner:run --target "somefile.js" --violations-cause-error - Evaluates rules against somefile.js. If any rules are violated, the exit code will be the severity of the most severe violation. - Use --engine to include or exclude engines. Any engine listed will be run, regardless of its current 'disabled' attribute. - E.g., $ sfdx scanner:run --target "somefile.js" --engine "eslint-lwc,pmd" - Evaluates rules against somefile.js, using eslint-lwc and pmd engines. - Use --engine to invoke engines that are not enabled by default. - E.g, $ sfdx scanner:run --target "/some/dir" --engine cpd - Executes CPD engine against known file extensions in "/some/dir". CPD helps detect blocks of code duplication in selected languages. - To use PMD with your own rule reference file, use --pmdconfig. Note that rule filters are not applied. - E.g, $ sfdx scanner:run --target "src" --pmdconfig "pmd_rule_ref.xml" - To use Eslint with your own .eslintrc.json file, use --eslintconfig. Make sure that the directory you run the command from has all the NPM dependencies installed. - E.g., $ sfdx scanner:run --target "src" --eslintconfig "/home/my/setup/.eslintrc.json" - Use --normalize-severity to output a normalized (across all engines) severity (1 [high], 2 [moderate], and 3 [low]) in addition to the engine specific severity (when shown). - E.g., $ sfdx scanner:run --target "/some-project/" --format csv --normalize-severity - Use --severity-threshold to throw a non-zero exit code when rule violations of a specific severity (or greater) are found. For this example, if there are any rule violations with a severity of 2 or more (which includes 1-high and 2-moderate), the exit code will be equal to the severity of the most severe violation. - E.g., $ sfdx scanner:run --target "/some-project/" --severity-threshold 2 - - -WARNING: We're constantly improving Salesforce Code Analyzer. Tell us what you think! Give feedback at https://research.net/r/SalesforceCA. -WARNING: v2.x's End Of Life is approaching. - In October 2022, v3.x of the Salesforce Code Analyzer will become the default version, - and older versions, including your currently installed version, will no longer be supported. - You can manually update to v3.x earlier for a smoother transition. -WARNING: As of April 27, 2022, v3.x of the Salesforce Code Analyzer is available as an open pilot. - To update to v3.x and try out our pilot features, run these commands: - > sfdx plugins:uninstall @salesforce/sfdx-scanner - > sfdx plugins:install @salesforce/sfdx-scanner@latest-pilot -NAME LANGUAGES CATEGORIES RULESETS [DEP] ENGINE -───────────────────────────────────────────────── ─────────── ──────────────── ──────────────────────────────────────────────── ───────────────── -VfCsrf visualforce Security Basic VF pmd -VfHtmlStyleTagXss visualforce Security pmd -VfUnescapeEl visualforce Security Basic VF pmd -ApexAssertionsShouldIncludeMessage apex Best Practices pmd -ApexUnitTestClassShouldHaveAsserts apex Best Practices quickstart,Default ruleset...,ApexUnit pmd -ApexUnitTestMethodShouldHaveIsTestAnnotation apex Best Practices pmd -ApexUnitTestShouldNotUseSeeAllDataTrue apex Best Practices quickstart,Default ruleset...,ApexUnit pmd -AvoidGlobalModifier apex Best Practices Style,quickstart,Default ruleset... pmd -AvoidLogicInTrigger apex Best Practices Style,quickstart,Default ruleset... pmd -DebugsShouldUseLoggingLevel apex Best Practices quickstart pmd -UnusedLocalVariable apex Best Practices pmd -AvoidDebugStatements apex Performance pmd -AvoidDmlStatementsInLoops apex Performance Default ruleset...,Performance pmd -AvoidSoqlInLoops apex Performance Default ruleset...,Performance pmd -AvoidSoslInLoops apex Performance Default ruleset...,Performance pmd -EagerlyLoadedDescribeSObjectResult apex Performance pmd -OperationWithLimitsInLoop apex Performance quickstart pmd -ApexBadCrypto apex Security Security,quickstart,Default ruleset... pmd -ApexCRUDViolation apex Security Security,quickstart,Default ruleset... pmd -ApexCSRF apex Security Security pmd -ApexDangerousMethods apex Security Security,quickstart,Default ruleset... pmd -ApexInsecureEndpoint apex Security Security,quickstart,Default ruleset... pmd -ApexOpenRedirect apex Security Security,quickstart,Default ruleset... pmd -ApexSharingViolations apex Security Security,quickstart,Default ruleset... pmd -ApexSOQLInjection apex Security Security,quickstart,Default ruleset... pmd -ApexSuggestUsingNamedCred apex Security Security,quickstart,Default ruleset... pmd -ApexXSSFromEscapeFalse apex Security Security,quickstart,Default ruleset... pmd -ApexXSSFromURLParam apex Security Security,quickstart,Default ruleset... pmd -ClassNamingConventions apex Code Style Style,quickstart,Default ruleset... pmd -IfElseStmtsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd -IfStmtsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd -FieldDeclarationsShouldBeAtStart apex Code Style pmd -FieldNamingConventions apex Code Style quickstart pmd -ForLoopsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd -FormalParameterNamingConventions apex Code Style quickstart pmd -LocalVariableNamingConventions apex Code Style quickstart pmd -MethodNamingConventions apex Code Style Style,quickstart,Default ruleset... pmd -OneDeclarationPerLine apex Code Style quickstart,Default ruleset... pmd -PropertyNamingConventions apex Code Style quickstart pmd -VariableNamingConventions apex Code Style Style,Default ruleset... pmd -WhileLoopsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd -AvoidDeeplyNestedIfStmts apex Design quickstart,Default ruleset...,Complexity pmd -CyclomaticComplexity apex Design Metrics tempora...,quickstart,Default ruleset... pmd -CognitiveComplexity apex Design pmd -ExcessiveClassLength apex Design quickstart,Default ruleset...,Complexity pmd -ExcessiveParameterList apex Design quickstart,Default ruleset...,Complexity pmd -ExcessivePublicCount apex Design quickstart,Default ruleset...,Complexity pmd -NcssConstructorCount apex Design quickstart,Default ruleset...,Complexity pmd -NcssMethodCount apex Design quickstart,Default ruleset...,Complexity pmd -NcssTypeCount apex Design quickstart,Default ruleset...,Complexity pmd -StdCyclomaticComplexity apex Design quickstart,Default ruleset...,Complexity pmd -TooManyFields apex Design quickstart,Default ruleset...,Complexity pmd -ApexDoc apex Documentation quickstart,Default ruleset... pmd -ApexCSRF apex Error Prone quickstart,Default ruleset... pmd -AvoidDirectAccessTriggerMap apex Error Prone Style,quickstart,Default ruleset... pmd -AvoidHardcodingId apex Error Prone Style,quickstart,Default ruleset... pmd -AvoidNonExistentAnnotations apex Error Prone quickstart,Default ruleset... pmd -EmptyCatchBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd -EmptyIfStmt apex Error Prone quickstart,Default ruleset...,Empty Code pmd -EmptyStatementBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd -EmptyTryOrFinallyBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd -EmptyWhileStmt apex Error Prone quickstart,Default ruleset...,Empty Code pmd -InaccessibleAuraEnabledGetter apex Error Prone pmd -MethodWithSameNameAsEnclosingClass apex Error Prone Style,quickstart,Default ruleset... pmd -OverrideBothEqualsAndHashcode apex Error Prone pmd -TestMethodsMustBeInTestClasses apex Error Prone pmd -constructor-super javascript ECMAScript 6 ECMAScript 6 eslint -for-direction javascript Possible Errors Possible Errors eslint -getter-return javascript Possible Errors Possible Errors eslint -no-async-promise-executor javascript Possible Errors Possible Errors eslint -no-case-declarations javascript Best Practices Best Practices eslint -no-class-assign javascript ECMAScript 6 ECMAScript 6 eslint -no-compare-neg-zero javascript Possible Errors Possible Errors eslint -no-cond-assign javascript Possible Errors Possible Errors eslint -no-const-assign javascript ECMAScript 6 ECMAScript 6 eslint -no-constant-condition javascript Possible Errors Possible Errors eslint -no-control-regex javascript Possible Errors Possible Errors eslint -no-debugger javascript Possible Errors Possible Errors eslint -no-delete-var javascript Variables Variables eslint -no-dupe-args javascript Possible Errors Possible Errors eslint -no-dupe-class-members javascript ECMAScript 6 ECMAScript 6 eslint -no-dupe-keys javascript Possible Errors Possible Errors eslint -no-duplicate-case javascript Possible Errors Possible Errors eslint -no-empty javascript Possible Errors Possible Errors eslint -no-empty-character-class javascript Possible Errors Possible Errors eslint -no-empty-pattern javascript Best Practices Best Practices eslint -no-ex-assign javascript Possible Errors Possible Errors eslint -no-extra-boolean-cast javascript Possible Errors Possible Errors eslint -no-extra-semi javascript Possible Errors Possible Errors eslint -no-fallthrough javascript Best Practices Best Practices eslint -no-func-assign javascript Possible Errors Possible Errors eslint -no-global-assign javascript Best Practices Best Practices eslint -no-inner-declarations javascript Possible Errors Possible Errors eslint -no-invalid-regexp javascript Possible Errors Possible Errors eslint -no-irregular-whitespace javascript Possible Errors Possible Errors eslint -no-misleading-character-class javascript Possible Errors Possible Errors eslint -no-mixed-spaces-and-tabs javascript Stylistic Issues Stylistic Issues eslint -no-new-symbol javascript ECMAScript 6 ECMAScript 6 eslint -no-obj-calls javascript Possible Errors Possible Errors eslint -no-octal javascript Best Practices Best Practices eslint -no-prototype-builtins javascript Possible Errors Possible Errors eslint -no-redeclare javascript Best Practices Best Practices eslint -no-regex-spaces javascript Possible Errors Possible Errors eslint -no-self-assign javascript Best Practices Best Practices eslint -no-shadow-restricted-names javascript Variables Variables eslint -no-sparse-arrays javascript Possible Errors Possible Errors eslint -no-this-before-super javascript ECMAScript 6 ECMAScript 6 eslint -no-undef javascript Variables Variables eslint -no-unexpected-multiline javascript Possible Errors Possible Errors eslint -no-unreachable javascript Possible Errors Possible Errors eslint -no-unsafe-finally javascript Possible Errors Possible Errors eslint -no-unsafe-negation javascript Possible Errors Possible Errors eslint -no-unused-labels javascript Best Practices Best Practices eslint -no-unused-vars javascript Variables Variables eslint -no-useless-catch javascript Best Practices Best Practices eslint -no-useless-escape javascript Best Practices Best Practices eslint -no-with javascript Best Practices Best Practices eslint -require-yield javascript ECMAScript 6 ECMAScript 6 eslint -use-isnan javascript Possible Errors Possible Errors eslint -valid-typeof javascript Possible Errors Possible Errors eslint -constructor-super typescript ECMAScript 6 ECMAScript 6 eslint-typescript -for-direction typescript Possible Errors Possible Errors eslint-typescript -no-async-promise-executor typescript Possible Errors Possible Errors eslint-typescript -no-case-declarations typescript Best Practices Best Practices eslint-typescript -no-class-assign typescript ECMAScript 6 ECMAScript 6 eslint-typescript -no-compare-neg-zero typescript Possible Errors Possible Errors eslint-typescript -no-cond-assign typescript Possible Errors Possible Errors eslint-typescript -no-constant-condition typescript Possible Errors Possible Errors eslint-typescript -no-control-regex typescript Possible Errors Possible Errors eslint-typescript -no-debugger typescript Possible Errors Possible Errors eslint-typescript -no-delete-var typescript Variables Variables eslint-typescript -no-duplicate-case typescript Possible Errors Possible Errors eslint-typescript -no-empty typescript Possible Errors Possible Errors eslint-typescript -no-empty-character-class typescript Possible Errors Possible Errors eslint-typescript -no-empty-pattern typescript Best Practices Best Practices eslint-typescript -no-ex-assign typescript Possible Errors Possible Errors eslint-typescript -no-extra-boolean-cast typescript Possible Errors Possible Errors eslint-typescript -no-fallthrough typescript Best Practices Best Practices eslint-typescript -no-func-assign typescript Possible Errors Possible Errors eslint-typescript -no-global-assign typescript Best Practices Best Practices eslint-typescript -no-inner-declarations typescript Possible Errors Possible Errors eslint-typescript -no-invalid-regexp typescript Possible Errors Possible Errors eslint-typescript -no-irregular-whitespace typescript Possible Errors Possible Errors eslint-typescript -no-misleading-character-class typescript Possible Errors Possible Errors eslint-typescript -no-mixed-spaces-and-tabs typescript Stylistic Issues Stylistic Issues eslint-typescript -no-obj-calls typescript Possible Errors Possible Errors eslint-typescript -no-octal typescript Best Practices Best Practices eslint-typescript -no-prototype-builtins typescript Possible Errors Possible Errors eslint-typescript -no-regex-spaces typescript Possible Errors Possible Errors eslint-typescript -no-self-assign typescript Best Practices Best Practices eslint-typescript -no-shadow-restricted-names typescript Variables Variables eslint-typescript -no-sparse-arrays typescript Possible Errors Possible Errors eslint-typescript -no-unexpected-multiline typescript Possible Errors Possible Errors eslint-typescript -no-unsafe-finally typescript Possible Errors Possible Errors eslint-typescript -no-unsafe-negation typescript Possible Errors Possible Errors eslint-typescript -no-unused-labels typescript Best Practices Best Practices eslint-typescript -no-useless-catch typescript Best Practices Best Practices eslint-typescript -no-useless-escape typescript Best Practices Best Practices eslint-typescript -no-var typescript ECMAScript 6 ECMAScript 6 eslint-typescript -no-with typescript Best Practices Best Practices eslint-typescript -prefer-const typescript ECMAScript 6 ECMAScript 6 eslint-typescript -prefer-rest-params typescript ECMAScript 6 ECMAScript 6 eslint-typescript -prefer-spread typescript ECMAScript 6 ECMAScript 6 eslint-typescript -require-yield typescript ECMAScript 6 ECMAScript 6 eslint-typescript -use-isnan typescript Possible Errors Possible Errors eslint-typescript -@typescript-eslint/adjacent-overload-signatures typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/await-thenable typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/ban-types typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/consistent-type-assertions typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/explicit-function-return-type typescript Stylistic Issues Stylistic Issues eslint-typescript -@typescript-eslint/member-delimiter-style typescript Stylistic Issues Stylistic Issues eslint-typescript -@typescript-eslint/no-array-constructor typescript Stylistic Issues Stylistic Issues eslint-typescript -@typescript-eslint/no-empty-function typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/no-empty-interface typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/no-explicit-any typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/no-for-in-array typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/no-inferrable-types typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/no-misused-new typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/no-misused-promises typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/no-namespace typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/no-non-null-assertion typescript Stylistic Issues Stylistic Issues eslint-typescript -@typescript-eslint/no-this-alias typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/no-unnecessary-type-assertion typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/no-unused-vars typescript Variables Variables eslint-typescript -@typescript-eslint/no-use-before-define typescript Variables Variables eslint-typescript -@typescript-eslint/no-var-requires typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/prefer-includes typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/prefer-namespace-keyword typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/prefer-regexp-exec typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/prefer-string-starts-ends-with typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/require-await typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/triple-slash-reference typescript Best Practices Best Practices eslint-typescript -@typescript-eslint/type-annotation-spacing typescript Stylistic Issues Stylistic Issues eslint-typescript -@typescript-eslint/unbound-method typescript Best Practices Best Practices eslint-typescript + › Error: Command scanner:run not found. + › Warning: scanner:rule:list is not a sfdx command. +Did you mean force:auth:list? [y/n]: ``` ### Installation on mega-linter Docker image diff --git a/docs/descriptors/snakemake_snakemake.md b/docs/descriptors/snakemake_snakemake.md index 3d525a6481a..a08eb72921a 100644 --- a/docs/descriptors/snakemake_snakemake.md +++ b/docs/descriptors/snakemake_snakemake.md @@ -11,7 +11,7 @@ ## snakemake documentation -- Version in MegaLinter: **7.16.0** +- Version in MegaLinter: **7.16.1** - Visit [Official Web Site](https://snakemake.readthedocs.io/en/stable/){target=_blank} [![snakemake - GitHub](https://gh-card.dev/repos/snakemake/snakemake.svg?fullname=)](https://github.com/snakemake/snakemake){target=_blank} diff --git a/docs/descriptors/terraform_checkov.md b/docs/descriptors/terraform_checkov.md index 17861466648..89cd149465e 100644 --- a/docs/descriptors/terraform_checkov.md +++ b/docs/descriptors/terraform_checkov.md @@ -110,7 +110,7 @@ usage: checkov [-h] [-v] [-d DIRECTORY] [--add-check] [-f FILE] [--secrets-scan-file-type SECRETS_SCAN_FILE_TYPE] [--enable-secret-scan-all-files] [--block-list-secret-scan BLOCK_LIST_SECRET_SCAN] - [--summary-position {bottom,top}] + [--summary-position {top,bottom}] [--skip-resources-without-violations] Infrastructure as code static analysis @@ -361,7 +361,7 @@ options: --block-list-secret-scan BLOCK_LIST_SECRET_SCAN List of files to filter out from the secret scanner [env var: CKV_SECRETS_SCAN_BLOCK_LIST] - --summary-position {bottom,top} + --summary-position {top,bottom} Chose whether the summary will be appended on top (before the checks results) or on bottom (after check results), default is on top. diff --git a/docs/descriptors/terraform_terraform_fmt.md b/docs/descriptors/terraform_terraform_fmt.md index 0875830f8c0..adaa0f62a11 100644 --- a/docs/descriptors/terraform_terraform_fmt.md +++ b/docs/descriptors/terraform_terraform_fmt.md @@ -11,7 +11,7 @@ ## terraform-fmt documentation -- Version in MegaLinter: **1.3.2** +- Version in MegaLinter: **1.3.3** - Visit [Official Web Site](https://www.terraform.io/docs/cli/commands/fmt.html){target=_blank} [![terraform - GitHub](https://gh-card.dev/repos/hashicorp/terraform.svg?fullname=)](https://github.com/hashicorp/terraform){target=_blank} diff --git a/docs/descriptors/terraform_terrascan.md b/docs/descriptors/terraform_terrascan.md index c90a78e2d8b..2b3b949224e 100644 --- a/docs/descriptors/terraform_terrascan.md +++ b/docs/descriptors/terraform_terrascan.md @@ -11,7 +11,7 @@ ## terrascan documentation -- Version in MegaLinter: **1.15.2** +- Version in MegaLinter: **1.16.0** - Visit [Official Web Site](https://www.accurics.com/products/terrascan/){target=_blank} - See [How to configure terrascan rules](https://docs.accurics.com/projects/accurics-terrascan/en/latest/policies/){target=_blank} - See [Index of problems detected by terrascan](https://docs.accurics.com/projects/accurics-terrascan/en/latest/policies/){target=_blank} diff --git a/docs/descriptors/tsx_eslint.md b/docs/descriptors/tsx_eslint.md index 6ec8f226754..02d0bbc23c2 100644 --- a/docs/descriptors/tsx_eslint.md +++ b/docs/descriptors/tsx_eslint.md @@ -15,7 +15,7 @@ You can create it by typing `npx eslint --init` in the root of your repository ## eslint documentation -- Version in MegaLinter: **8.25.0** +- Version in MegaLinter: **8.26.0** - Visit [Official Web Site](https://github.com/yannickcr/eslint-plugin-react#readme){target=_blank} - See [How to configure eslint rules](https://github.com/yannickcr/eslint-plugin-react#configuration){target=_blank} - See [How to disable eslint rules in files](https://eslint.org/docs/user-guide/configuring#disabling-rules-with-inline-comments){target=_blank} diff --git a/docs/descriptors/typescript_eslint.md b/docs/descriptors/typescript_eslint.md index cd3d8d551ae..8d1c43297b7 100644 --- a/docs/descriptors/typescript_eslint.md +++ b/docs/descriptors/typescript_eslint.md @@ -15,7 +15,7 @@ You can create it by typing `npx eslint --init` in the root of your repository ## eslint documentation -- Version in MegaLinter: **8.25.0** +- Version in MegaLinter: **8.26.0** - Visit [Official Web Site](https://eslint.org){target=_blank} - See [How to configure eslint rules](https://eslint.org/docs/user-guide/configuring){target=_blank} - See [How to disable eslint rules in files](https://eslint.org/docs/user-guide/configuring#disabling-rules-with-inline-comments){target=_blank} diff --git a/flavors/security/Dockerfile b/flavors/security/Dockerfile index 8881bf31db6..3378034629d 100644 --- a/flavors/security/Dockerfile +++ b/flavors/security/Dockerfile @@ -216,7 +216,7 @@ RUN printf '#!/bin/bash \n\nif [[ -x "$1" ]]; then exit 0; else echo "Error: Fil && ./dotnet-install.sh --install-dir /usr/share/dotnet -channel 5.0 -version latest ENV PATH="${PATH}:/root/.dotnet/tools:/usr/share/dotnet" -RUN dotnet tool install --global Microsoft.CST.DevSkim.CLI \ +RUN dotnet tool install --global Microsoft.CST.DevSkim.CLI --version 0.6.9 \ # dustilock installation && ML_THIRD_PARTY_DIR=/download/dustilock && \ diff --git a/linters/repository_devskim/Dockerfile b/linters/repository_devskim/Dockerfile index 79dbc107e08..a06ff96a1d7 100644 --- a/linters/repository_devskim/Dockerfile +++ b/linters/repository_devskim/Dockerfile @@ -135,7 +135,7 @@ RUN wget --tries=5 -q -O dotnet-install.sh https://dot.net/v1/dotnet-install.sh && ./dotnet-install.sh --install-dir /usr/share/dotnet -channel 5.0 -version latest ENV PATH="${PATH}:/root/.dotnet/tools:/usr/share/dotnet" -RUN dotnet tool install --global Microsoft.CST.DevSkim.CLI +RUN dotnet tool install --global Microsoft.CST.DevSkim.CLI --version 0.6.9 #OTHER__END diff --git a/mega-linter-runner/.trivyignore b/mega-linter-runner/.trivyignore index 444cc7cd845..a2d265756c4 100644 --- a/mega-linter-runner/.trivyignore +++ b/mega-linter-runner/.trivyignore @@ -1,5 +1,6 @@ CVE-2021-23566 CVE-2021-35065 +CVE-2022-3517 CVE-2021-3807 CVE-2021-43138 CVE-2021-44906 diff --git a/megalinter/descriptors/repository.megalinter-descriptor.yml b/megalinter/descriptors/repository.megalinter-descriptor.yml index 4a94eeef514..55037e56cd9 100644 --- a/megalinter/descriptors/repository.megalinter-descriptor.yml +++ b/megalinter/descriptors/repository.megalinter-descriptor.yml @@ -76,6 +76,7 @@ linters: examples: - "devskim analyze ." - "devskim analyze --file-format sarif ." + downgraded_version: true install: apk: - icu-libs @@ -92,7 +93,7 @@ linters: && chmod +x dotnet-install.sh \ && ./dotnet-install.sh --install-dir /usr/share/dotnet -channel 5.0 -version latest - ENV PATH="${PATH}:/root/.dotnet/tools:/usr/share/dotnet" - - RUN dotnet tool install --global Microsoft.CST.DevSkim.CLI + - RUN dotnet tool install --global Microsoft.CST.DevSkim.CLI --version 0.6.9 ide: vscode: - name: VsCode DevSkim From 79fe208cb54ecb10f90e65b1bb8cc04065273832 Mon Sep 17 00:00:00 2001 From: Nicolas Vuillamy Date: Sat, 22 Oct 2022 13:11:12 +0200 Subject: [PATCH 2/3] New cupcake flavor (#1988) * [automation] Auto-update linters version, help and documentation * trvy * Downgrade devskim * New cupcake flavor :) * fix * [MegaLinter] Apply linters fixes Co-authored-by: nvuillam --- .automation/build.py | 1 + .automation/generated/flavors-stats.json | 56 +- .automation/generated/megalinter-users.json | 116 ++--- .github/workflows/deploy-BETA-flavors.yml | 1 + .github/workflows/deploy-RELEASE-flavors.yml | 1 + README.md | 1 + docs/assets/icons/cupcake.ico | Bin 0 -> 258782 bytes docs/assets/icons/cupcake.png | Bin 0 -> 266262 bytes docs/descriptors/action_actionlint.md | 1 + docs/descriptors/ansible_ansible_lint.md | 1 + docs/descriptors/bash_bash_exec.md | 1 + docs/descriptors/bash_shellcheck.md | 1 + docs/descriptors/bash_shfmt.md | 1 + docs/descriptors/c_cpplint.md | 9 +- docs/descriptors/clojure_clj_kondo.md | 9 +- docs/descriptors/cloudformation_cfn_lint.md | 9 +- docs/descriptors/copypaste_jscpd.md | 1 + docs/descriptors/cpp_cpplint.md | 9 +- docs/descriptors/css_scss_lint.md | 1 + docs/descriptors/css_stylelint.md | 1 + docs/descriptors/dockerfile_hadolint.md | 1 + .../editorconfig_editorconfig_checker.md | 1 + docs/descriptors/env_dotenv_linter.md | 1 + docs/descriptors/go_golangci_lint.md | 9 +- docs/descriptors/go_revive.md | 9 +- .../graphql_graphql_schema_linter.md | 1 + docs/descriptors/groovy_npm_groovy_lint.md | 1 + docs/descriptors/html_djlint.md | 1 + docs/descriptors/html_htmlhint.md | 1 + docs/descriptors/java_checkstyle.md | 9 +- docs/descriptors/java_pmd.md | 9 +- docs/descriptors/javascript_eslint.md | 1 + docs/descriptors/javascript_prettier.md | 1 + docs/descriptors/javascript_standard.md | 1 + docs/descriptors/json_eslint_plugin_jsonc.md | 1 + docs/descriptors/json_jsonlint.md | 1 + docs/descriptors/json_prettier.md | 1 + docs/descriptors/json_v8r.md | 1 + docs/descriptors/jsx_eslint.md | 1 + docs/descriptors/kotlin_ktlint.md | 1 + docs/descriptors/kubernetes_kubeconform.md | 1 + docs/descriptors/kubernetes_kubeval.md | 1 + docs/descriptors/makefile_checkmake.md | 1 + .../markdown_markdown_link_check.md | 1 + .../markdown_markdown_table_formatter.md | 1 + docs/descriptors/markdown_markdownlint.md | 1 + docs/descriptors/php_phpcs.md | 9 +- docs/descriptors/php_phplint.md | 9 +- docs/descriptors/php_phpstan.md | 9 +- docs/descriptors/php_psalm.md | 9 +- docs/descriptors/python_black.md | 9 +- docs/descriptors/python_flake8.md | 9 +- docs/descriptors/python_isort.md | 9 +- docs/descriptors/python_mypy.md | 9 +- docs/descriptors/python_pylint.md | 9 +- docs/descriptors/python_pyright.md | 9 +- docs/descriptors/repository_checkov.md | 1 + docs/descriptors/repository_devskim.md | 2 +- docs/descriptors/repository_git_diff.md | 1 + docs/descriptors/repository_gitleaks.md | 1 + docs/descriptors/repository_goodcheck.md | 1 + docs/descriptors/repository_secretlint.md | 1 + docs/descriptors/repository_semgrep.md | 1 + docs/descriptors/repository_trivy.md | 1 + docs/descriptors/rst_rst_lint.md | 9 +- docs/descriptors/rst_rstcheck.md | 9 +- docs/descriptors/ruby_rubocop.md | 9 +- docs/descriptors/rust_clippy.md | 9 +- docs/descriptors/spell_cspell.md | 1 + docs/descriptors/spell_misspell.md | 1 + docs/descriptors/spell_proselint.md | 1 + docs/descriptors/sql_sql_lint.md | 1 + docs/descriptors/sql_sqlfluff.md | 1 + docs/descriptors/swift_swiftlint.md | 9 +- docs/descriptors/terraform_kics.md | 11 +- docs/descriptors/terraform_terraform_fmt.md | 9 +- docs/descriptors/terraform_terragrunt.md | 11 +- docs/descriptors/terraform_terrascan.md | 11 +- docs/descriptors/terraform_tflint.md | 11 +- docs/descriptors/tsx_eslint.md | 1 + docs/descriptors/typescript_eslint.md | 1 + docs/descriptors/typescript_prettier.md | 1 + docs/descriptors/typescript_standard.md | 1 + docs/descriptors/xml_xmllint.md | 1 + docs/descriptors/yaml_prettier.md | 1 + docs/descriptors/yaml_v8r.md | 1 + docs/descriptors/yaml_yamllint.md | 1 + docs/flavors.md | 1 + docs/flavors/cupcake.md | 115 +++++ flavors/cupcake/Dockerfile | 481 ++++++++++++++++++ flavors/cupcake/action.yml | 16 + flavors/cupcake/flavor.json | 92 ++++ .../action.megalinter-descriptor.yml | 1 + megalinter/descriptors/all_flavors.json | 92 ++++ .../ansible.megalinter-descriptor.yml | 1 + .../bash.megalinter-descriptor.yml | 3 + .../descriptors/c.megalinter-descriptor.yml | 1 + .../clojure.megalinter-descriptor.yml | 1 + .../cloudformation.megalinter-descriptor.yml | 1 + .../copypaste.megalinter-descriptor.yml | 1 + .../descriptors/cpp.megalinter-descriptor.yml | 1 + .../descriptors/css.megalinter-descriptor.yml | 1 + .../dockerfile.megalinter-descriptor.yml | 2 + .../editorconfig.megalinter-descriptor.yml | 1 + .../descriptors/env.megalinter-descriptor.yml | 1 + .../descriptors/go.megalinter-descriptor.yml | 1 + .../graphql.megalinter-descriptor.yml | 1 + .../groovy.megalinter-descriptor.yml | 1 + .../html.megalinter-descriptor.yml | 1 + .../java.megalinter-descriptor.yml | 1 + .../javascript.megalinter-descriptor.yml | 1 + .../json.megalinter-descriptor.yml | 1 + .../descriptors/jsx.megalinter-descriptor.yml | 1 + .../kotlin.megalinter-descriptor.yml | 1 + .../kubernetes.megalinter-descriptor.yml | 1 + .../makefile.megalinter-descriptor.yml | 1 + .../markdown.megalinter-descriptor.yml | 1 + .../descriptors/php.megalinter-descriptor.yml | 1 + .../python.megalinter-descriptor.yml | 1 + .../repository.megalinter-descriptor.yml | 7 + .../descriptors/rst.megalinter-descriptor.yml | 1 + .../ruby.megalinter-descriptor.yml | 1 + .../rust.megalinter-descriptor.yml | 1 + .../megalinter-descriptor.jsonschema.json | 1 + .../spell.megalinter-descriptor.yml | 1 + .../descriptors/sql.megalinter-descriptor.yml | 1 + .../swift.megalinter-descriptor.yml | 1 + .../terraform.megalinter-descriptor.yml | 5 + .../descriptors/tsx.megalinter-descriptor.yml | 1 + .../typescript.megalinter-descriptor.yml | 1 + .../descriptors/xml.megalinter-descriptor.yml | 1 + .../yaml.megalinter-descriptor.yml | 1 + megalinter/flavor_factory.py | 1 + mkdocs.yml | 1 + 134 files changed, 1139 insertions(+), 200 deletions(-) create mode 100644 docs/assets/icons/cupcake.ico create mode 100644 docs/assets/icons/cupcake.png create mode 100644 docs/flavors/cupcake.md create mode 100644 flavors/cupcake/Dockerfile create mode 100644 flavors/cupcake/action.yml create mode 100644 flavors/cupcake/flavor.json diff --git a/.automation/build.py b/.automation/build.py index b0260e0bc43..2a88b83efdd 100644 --- a/.automation/build.py +++ b/.automation/build.py @@ -520,6 +520,7 @@ def match_flavor(item, flavor, flavor_info): if flavor in item["descriptor_flavors"] or ( "all_flavors" in item["descriptor_flavors"] and not flavor.endswith("_light") + and "cupcake" not in flavor and not is_strict ): return True diff --git a/.automation/generated/flavors-stats.json b/.automation/generated/flavors-stats.json index 87bb120f2de..f8a0300127e 100644 --- a/.automation/generated/flavors-stats.json +++ b/.automation/generated/flavors-stats.json @@ -1021,8 +1021,8 @@ 2626933 ], [ - "2022-10-22T01:19:20", - 2632995 + "2022-10-22T12:16:42", + 2633233 ] ], "ci_light": [ @@ -2047,8 +2047,14 @@ 28838 ], [ - "2022-10-22T01:19:20", - 29332 + "2022-10-22T12:16:42", + 29340 + ] + ], + "cupcake": [ + [ + "2022-10-22T12:16:42", + 0 ] ], "dart": [ @@ -3983,8 +3989,8 @@ 78557 ], [ - "2022-10-22T01:19:20", - 79779 + "2022-10-22T12:16:42", + 79788 ] ], "dotnet": [ @@ -5009,7 +5015,7 @@ 316688 ], [ - "2022-10-22T01:19:20", + "2022-10-22T12:16:42", 317452 ] ], @@ -6035,7 +6041,7 @@ 14338 ], [ - "2022-10-22T01:19:20", + "2022-10-22T12:16:42", 14450 ] ], @@ -7061,8 +7067,8 @@ 96074 ], [ - "2022-10-22T01:19:20", - 96590 + "2022-10-22T12:16:42", + 96614 ] ], "javascript": [ @@ -8087,8 +8093,8 @@ 157500 ], [ - "2022-10-22T01:19:20", - 158646 + "2022-10-22T12:16:42", + 158692 ] ], "php": [ @@ -9113,8 +9119,8 @@ 23473 ], [ - "2022-10-22T01:19:20", - 24403 + "2022-10-22T12:16:42", + 24408 ] ], "python": [ @@ -10139,8 +10145,8 @@ 112995 ], [ - "2022-10-22T01:19:20", - 114683 + "2022-10-22T12:16:42", + 114712 ] ], "ruby": [ @@ -11161,8 +11167,8 @@ 2661 ], [ - "2022-10-22T01:19:20", - 2666 + "2022-10-22T12:16:42", + 2667 ] ], "rust": [ @@ -12183,7 +12189,7 @@ 4035 ], [ - "2022-10-22T01:19:20", + "2022-10-22T12:16:42", 4073 ] ], @@ -13209,8 +13215,8 @@ 14494 ], [ - "2022-10-22T01:19:20", - 14617 + "2022-10-22T12:16:42", + 14625 ] ], "scala": [ @@ -14233,7 +14239,7 @@ 1341 ], [ - "2022-10-22T01:19:20", + "2022-10-22T12:16:42", 1343 ] ], @@ -15255,7 +15261,7 @@ 2596 ], [ - "2022-10-22T01:19:20", + "2022-10-22T12:16:42", 2627 ] ], @@ -16281,8 +16287,8 @@ 122680 ], [ - "2022-10-22T01:19:20", - 124667 + "2022-10-22T12:16:42", + 124734 ] ] } \ No newline at end of file diff --git a/.automation/generated/megalinter-users.json b/.automation/generated/megalinter-users.json index 8e09a90df67..48c4964c6f3 100644 --- a/.automation/generated/megalinter-users.json +++ b/.automation/generated/megalinter-users.json @@ -110,7 +110,7 @@ "releases_url": "https://api.github.com/repos/nektos/act/releases{/id}", "size": 6347, "ssh_url": "git@github.com:nektos/act.git", - "stargazers_count": 28780, + "stargazers_count": 28786, "stargazers_url": "https://api.github.com/repos/nektos/act/stargazers", "statuses_url": "https://api.github.com/repos/nektos/act/statuses/{sha}", "subscribers_count": 120, @@ -127,15 +127,15 @@ "golang" ], "trees_url": "https://api.github.com/repos/nektos/act/git/trees{/sha}", - "updated_at": "2022-10-22T01:09:09Z", + "updated_at": "2022-10-22T06:04:14Z", "url": "https://api.github.com/repos/nektos/act", "visibility": "public", - "watchers": 28780, - "watchers_count": 28780, + "watchers": 28786, + "watchers_count": 28786, "web_commit_signoff_required": false }, "repo_url": "https://github.com/nektos/act", - "stargazers": 28780 + "stargazers": 28786 }, { "info": { @@ -343,7 +343,7 @@ "releases_url": "https://api.github.com/repos/IlanCosman/tide/releases{/id}", "size": 6422, "ssh_url": "git@github.com:IlanCosman/tide.git", - "stargazers_count": 1600, + "stargazers_count": 1602, "stargazers_url": "https://api.github.com/repos/IlanCosman/tide/stargazers", "statuses_url": "https://api.github.com/repos/IlanCosman/tide/statuses/{sha}", "subscribers_count": 11, @@ -360,15 +360,15 @@ "prompt" ], "trees_url": "https://api.github.com/repos/IlanCosman/tide/git/trees{/sha}", - "updated_at": "2022-10-21T23:37:34Z", + "updated_at": "2022-10-22T06:04:13Z", "url": "https://api.github.com/repos/IlanCosman/tide", "visibility": "public", - "watchers": 1600, - "watchers_count": 1600, + "watchers": 1602, + "watchers_count": 1602, "web_commit_signoff_required": false }, "repo_url": "https://github.com/IlanCosman/tide", - "stargazers": 1600 + "stargazers": 1602 }, { "info": { @@ -480,7 +480,7 @@ "releases_url": "https://api.github.com/repos/microsoft/code-with-engineering-playbook/releases{/id}", "size": 48608, "ssh_url": "git@github.com:microsoft/code-with-engineering-playbook.git", - "stargazers_count": 1421, + "stargazers_count": 1422, "stargazers_url": "https://api.github.com/repos/microsoft/code-with-engineering-playbook/stargazers", "statuses_url": "https://api.github.com/repos/microsoft/code-with-engineering-playbook/statuses/{sha}", "subscribers_count": 2355, @@ -492,15 +492,15 @@ "temp_clone_token": null, "topics": [], "trees_url": "https://api.github.com/repos/microsoft/code-with-engineering-playbook/git/trees{/sha}", - "updated_at": "2022-10-20T17:20:40Z", + "updated_at": "2022-10-22T06:27:08Z", "url": "https://api.github.com/repos/microsoft/code-with-engineering-playbook", "visibility": "public", - "watchers": 1421, - "watchers_count": 1421, + "watchers": 1422, + "watchers_count": 1422, "web_commit_signoff_required": false }, "repo_url": "https://github.com/microsoft/code-with-engineering-playbook", - "stargazers": 1421 + "stargazers": 1422 }, { "info": { @@ -592,7 +592,7 @@ "releases_url": "https://api.github.com/repos/dorssel/usbipd-win/releases{/id}", "size": 1529, "ssh_url": "git@github.com:dorssel/usbipd-win.git", - "stargazers_count": 1306, + "stargazers_count": 1307, "stargazers_url": "https://api.github.com/repos/dorssel/usbipd-win/stargazers", "statuses_url": "https://api.github.com/repos/dorssel/usbipd-win/statuses/{sha}", "subscribers_count": 32, @@ -613,15 +613,15 @@ "wsl2" ], "trees_url": "https://api.github.com/repos/dorssel/usbipd-win/git/trees{/sha}", - "updated_at": "2022-10-21T13:21:04Z", + "updated_at": "2022-10-22T01:40:13Z", "url": "https://api.github.com/repos/dorssel/usbipd-win", "visibility": "public", - "watchers": 1306, - "watchers_count": 1306, + "watchers": 1307, + "watchers_count": 1307, "web_commit_signoff_required": false }, "repo_url": "https://github.com/dorssel/usbipd-win", - "stargazers": 1306 + "stargazers": 1307 }, { "info": { @@ -848,9 +848,9 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/oxsecurity/megalinter/pulls{/number}", - "pushed_at": "2022-10-22T01:03:52Z", + "pushed_at": "2022-10-22T10:15:30Z", "releases_url": "https://api.github.com/repos/oxsecurity/megalinter/releases{/id}", - "size": 259268, + "size": 260032, "ssh_url": "git@github.com:oxsecurity/megalinter.git", "stargazers_count": 891, "stargazers_url": "https://api.github.com/repos/oxsecurity/megalinter/stargazers", @@ -1107,7 +1107,7 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/onedr0p/flux-cluster-template/pulls{/number}", - "pushed_at": "2022-10-21T23:26:38Z", + "pushed_at": "2022-10-22T07:38:46Z", "releases_url": "https://api.github.com/repos/onedr0p/flux-cluster-template/releases{/id}", "size": 1017, "ssh_url": "git@github.com:onedr0p/flux-cluster-template.git", @@ -1232,11 +1232,11 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/onedr0p/home-ops/pulls{/number}", - "pushed_at": "2022-10-22T00:14:19Z", + "pushed_at": "2022-10-22T01:32:15Z", "releases_url": "https://api.github.com/repos/onedr0p/home-ops/releases{/id}", "size": 27327, "ssh_url": "git@github.com:onedr0p/home-ops.git", - "stargazers_count": 647, + "stargazers_count": 648, "stargazers_url": "https://api.github.com/repos/onedr0p/home-ops/stargazers", "statuses_url": "https://api.github.com/repos/onedr0p/home-ops/statuses/{sha}", "subscribers_count": 9, @@ -1258,15 +1258,15 @@ "terraform" ], "trees_url": "https://api.github.com/repos/onedr0p/home-ops/git/trees{/sha}", - "updated_at": "2022-10-21T14:39:34Z", + "updated_at": "2022-10-22T10:15:48Z", "url": "https://api.github.com/repos/onedr0p/home-ops", "visibility": "public", - "watchers": 647, - "watchers_count": 647, + "watchers": 648, + "watchers_count": 648, "web_commit_signoff_required": false }, "repo_url": "https://github.com/onedr0p/home-ops", - "stargazers": 647 + "stargazers": 648 }, { "info": { @@ -2004,7 +2004,7 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/llaville/php-compatinfo/pulls{/number}", - "pushed_at": "2022-10-18T14:47:23Z", + "pushed_at": "2022-10-22T06:24:27Z", "releases_url": "https://api.github.com/repos/llaville/php-compatinfo/releases{/id}", "size": 10585, "ssh_url": "git@github.com:llaville/php-compatinfo.git", @@ -2388,9 +2388,9 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/xUnholy/k8s-gitops/pulls{/number}", - "pushed_at": "2022-10-22T00:34:54Z", + "pushed_at": "2022-10-22T01:36:24Z", "releases_url": "https://api.github.com/repos/xUnholy/k8s-gitops/releases{/id}", - "size": 6907, + "size": 6904, "ssh_url": "git@github.com:xUnholy/k8s-gitops.git", "stargazers_count": 264, "stargazers_url": "https://api.github.com/repos/xUnholy/k8s-gitops/stargazers", @@ -2616,8 +2616,8 @@ "network_count": 26, "node_id": "MDEwOlJlcG9zaXRvcnkyODc1MDA0NTY=", "notifications_url": "https://api.github.com/repos/bjw-s/home-ops/notifications{?since,all,participating}", - "open_issues": 8, - "open_issues_count": 8, + "open_issues": 5, + "open_issues_count": 5, "owner": { "avatar_url": "https://avatars.githubusercontent.com/u/6213398?v=4", "events_url": "https://api.github.com/users/bjw-s/events{/privacy}", @@ -2640,9 +2640,9 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/bjw-s/home-ops/pulls{/number}", - "pushed_at": "2022-10-22T00:32:49Z", + "pushed_at": "2022-10-22T05:46:44Z", "releases_url": "https://api.github.com/repos/bjw-s/home-ops/releases{/id}", - "size": 32379, + "size": 32411, "ssh_url": "git@github.com:bjw-s/home-ops.git", "stargazers_count": 191, "stargazers_url": "https://api.github.com/repos/bjw-s/home-ops/stargazers", @@ -2881,9 +2881,9 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/toboshii/home-ops/pulls{/number}", - "pushed_at": "2022-10-21T16:34:38Z", + "pushed_at": "2022-10-22T01:54:52Z", "releases_url": "https://api.github.com/repos/toboshii/home-ops/releases{/id}", - "size": 2726, + "size": 2729, "ssh_url": "git@github.com:toboshii/home-ops.git", "stargazers_count": 136, "stargazers_url": "https://api.github.com/repos/toboshii/home-ops/stargazers", @@ -3264,7 +3264,7 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/carpenike/k8s-gitops/pulls{/number}", - "pushed_at": "2022-10-22T00:12:03Z", + "pushed_at": "2022-10-22T03:11:05Z", "releases_url": "https://api.github.com/repos/carpenike/k8s-gitops/releases{/id}", "size": 123963, "ssh_url": "git@github.com:carpenike/k8s-gitops.git", @@ -3619,9 +3619,9 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/T145/black-mirror/pulls{/number}", - "pushed_at": "2022-10-21T13:54:09Z", + "pushed_at": "2022-10-22T07:08:04Z", "releases_url": "https://api.github.com/repos/T145/black-mirror/releases{/id}", - "size": 86820, + "size": 86860, "ssh_url": "git@github.com:T145/black-mirror.git", "stargazers_count": 99, "stargazers_url": "https://api.github.com/repos/T145/black-mirror/stargazers", @@ -4690,7 +4690,7 @@ "releases_url": "https://api.github.com/repos/unixorn/lima-xbar-plugin/releases{/id}", "size": 260, "ssh_url": "git@github.com:unixorn/lima-xbar-plugin.git", - "stargazers_count": 61, + "stargazers_count": 62, "stargazers_url": "https://api.github.com/repos/unixorn/lima-xbar-plugin/stargazers", "statuses_url": "https://api.github.com/repos/unixorn/lima-xbar-plugin/statuses/{sha}", "subscribers_count": 2, @@ -4711,15 +4711,15 @@ "xbar-plugin" ], "trees_url": "https://api.github.com/repos/unixorn/lima-xbar-plugin/git/trees{/sha}", - "updated_at": "2022-10-14T05:31:13Z", + "updated_at": "2022-10-22T09:45:25Z", "url": "https://api.github.com/repos/unixorn/lima-xbar-plugin", "visibility": "public", - "watchers": 61, - "watchers_count": 61, + "watchers": 62, + "watchers_count": 62, "web_commit_signoff_required": false }, "repo_url": "https://github.com/unixorn/lima-xbar-plugin", - "stargazers": 61 + "stargazers": 62 }, { "info": { @@ -4920,8 +4920,8 @@ "network_count": 4, "node_id": "MDEwOlJlcG9zaXRvcnkzMTQxODEwODI=", "notifications_url": "https://api.github.com/repos/auricom/home-ops/notifications{?since,all,participating}", - "open_issues": 9, - "open_issues_count": 9, + "open_issues": 2, + "open_issues_count": 2, "owner": { "avatar_url": "https://avatars.githubusercontent.com/u/27022259?v=4", "events_url": "https://api.github.com/users/auricom/events{/privacy}", @@ -4944,9 +4944,9 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/auricom/home-ops/pulls{/number}", - "pushed_at": "2022-10-21T20:27:14Z", + "pushed_at": "2022-10-22T08:30:42Z", "releases_url": "https://api.github.com/repos/auricom/home-ops/releases{/id}", - "size": 6543, + "size": 6547, "ssh_url": "git@github.com:auricom/home-ops.git", "stargazers_count": 56, "stargazers_url": "https://api.github.com/repos/auricom/home-ops/stargazers", @@ -5888,9 +5888,9 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/jr0dd/home-ops/pulls{/number}", - "pushed_at": "2022-10-22T01:03:11Z", + "pushed_at": "2022-10-22T03:51:22Z", "releases_url": "https://api.github.com/repos/jr0dd/home-ops/releases{/id}", - "size": 5722, + "size": 5727, "ssh_url": "git@github.com:jr0dd/home-ops.git", "stargazers_count": 34, "stargazers_url": "https://api.github.com/repos/jr0dd/home-ops/stargazers", @@ -6747,9 +6747,9 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/0dragosh/homelab/pulls{/number}", - "pushed_at": "2022-10-16T17:31:37Z", + "pushed_at": "2022-10-22T02:22:44Z", "releases_url": "https://api.github.com/repos/0dragosh/homelab/releases{/id}", - "size": 4038, + "size": 4096, "ssh_url": "git@github.com:0dragosh/homelab.git", "stargazers_count": 25, "stargazers_url": "https://api.github.com/repos/0dragosh/homelab/stargazers", @@ -6849,8 +6849,8 @@ "network_count": 0, "node_id": "MDEwOlJlcG9zaXRvcnkzNzYxOTIyODE=", "notifications_url": "https://api.github.com/repos/rwaltr/home-ops/notifications{?since,all,participating}", - "open_issues": 1, - "open_issues_count": 1, + "open_issues": 2, + "open_issues_count": 2, "owner": { "avatar_url": "https://avatars.githubusercontent.com/u/11428125?v=4", "events_url": "https://api.github.com/users/rwaltr/events{/privacy}", @@ -6873,9 +6873,9 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/rwaltr/home-ops/pulls{/number}", - "pushed_at": "2022-10-16T17:13:50Z", + "pushed_at": "2022-10-19T03:25:40Z", "releases_url": "https://api.github.com/repos/rwaltr/home-ops/releases{/id}", - "size": 1778, + "size": 1788, "ssh_url": "git@github.com:rwaltr/home-ops.git", "stargazers_count": 23, "stargazers_url": "https://api.github.com/repos/rwaltr/home-ops/stargazers", diff --git a/.github/workflows/deploy-BETA-flavors.yml b/.github/workflows/deploy-BETA-flavors.yml index 9eeda3c0823..0bd56d91d1b 100644 --- a/.github/workflows/deploy-BETA-flavors.yml +++ b/.github/workflows/deploy-BETA-flavors.yml @@ -54,6 +54,7 @@ jobs: flavor: [ "ci_light", + "cupcake", "documentation", "dotnet", "go", diff --git a/.github/workflows/deploy-RELEASE-flavors.yml b/.github/workflows/deploy-RELEASE-flavors.yml index d4617cf39c6..c36fdb64c40 100644 --- a/.github/workflows/deploy-RELEASE-flavors.yml +++ b/.github/workflows/deploy-RELEASE-flavors.yml @@ -44,6 +44,7 @@ jobs: flavor: [ "ci_light", + "cupcake", "documentation", "dotnet", "go", diff --git a/README.md b/README.md index 0d7ad2a7a32..7525960a8e4 100644 --- a/README.md +++ b/README.md @@ -884,6 +884,7 @@ _The following table does not display docker pulls from [MegaLinter v4 & v5 imag |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:---------------------------------------------------------------------------------------------------------|:-----------------------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | | | [ci_light](https://github.com/oxsecurity/megalinter/tree/main/docs/flavors/ci_light.md#readme) | Optimized for CI items (Dockerfile, Jenkinsfile, JSON/YAML schemas,XML | 20 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-ci_light/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-ci_light) | +| | [cupcake](https://github.com/oxsecurity/megalinter/tree/main/docs/flavors/cupcake.md#readme) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://github.com/oxsecurity/megalinter/tree/main/docs/flavors/documentation.md#readme) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://github.com/oxsecurity/megalinter/tree/main/docs/flavors/dotnet.md#readme) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://github.com/oxsecurity/megalinter/tree/main/docs/flavors/go.md#readme) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/assets/icons/cupcake.ico b/docs/assets/icons/cupcake.ico new file mode 100644 index 0000000000000000000000000000000000000000..f0a1d5576a46d2df1e2dfebd304be1666ccb613b GIT binary patch literal 258782 zcmZs^XLOwBk*!M-IdnJBKzAcY5)1&5QwL;#1OXxtfka}?R2G$Uq9T{WWd1Q0;?uG+P$>g`RNHuL{Y|L-RL zTeIoC|0iuzbkn9yJ1|}TzcF2R|NC9qrklc>oOu^EZCZQbzf5-c#s6(f&-^c2xcu*S z=;^=P;*)=Mrfah0XaC_$_hdTP_4z0MVl$8Y!KNSny|bxHzq@ii`^X<{?y*llT3b z?YrmK9RJSdANh+Nxb!ERd60kif#2K2J^yCocm3KX@BNLtHuvzK-Ti%c|Es&V|GwYa z-aCKgp3$>iw&OT>(2eq2F|?W&QmA9Z%HhrXO4Zxl1IN~eaF6K{l~v;{aUf1li#($ z6W?*ieMi5+`pql%`i_3nWCJI@#WQ;T8&L9;&_}Ho>psZ3^a;N1bJn~37GJ0Dt*`yGbuWF&x(Z39QX?5ywb+x$H^KK@l_Dg8dH{7kF-j?TWs*Szhl@9>wc{|LY5(XZMd ze<$Atj_^D4cOE{@-;{NPzw4ee-?I^3)8SL!bvAVJJ8soA-`qW(8^(rC^O~LF8CKo* zU&8@jSG|@p9qaYg>f7M@{Q=$AbG-ILr}+AH^YOj<{C_%33;)8tR@p|}AAAbjf_<&J zH~09T9p)z<_&3{oFYovJ|JC+C^jqf>W*-InkN?FMz_Rea^z=U*rhS|X;|Ct*8St-F zChW^c=$@XFe-QpB?&bTkPCxiN?`y!f@GDI3x#O2^6^>^g`lG|Mj%A~_{oLKtv%W9z zaWCv|^dCAG&gU-SpC12*TjdWX?*6Uqx&7BReDlw3?6zOo4E|u6=Y;?1`|v%t{i}`N z%+GPtFKqP2pV(Dhnv7u{!Z2ecgW2tlC_39rv+>c!Mp7me&A@|?o z{O26MYYAT0Ufu^uR$;&IEYF{R$A+*0juYTo7S{^Cg>~Ux)_?j3mc%DG<6hEXAB-RO zUU&I`)RAvE>*KxYTZ;E)|8ek+>00veS1rEwWpMsg@cw0R&+##EkM$k@8oos49S@x3 z`<&nyTnqdCC%^1)-wSqo55Hx?e~Np_qi^E}zQFhYJb3>CICu*TeBMS+%06o&CqH9@ z$3AJP)i*7^Ec||i^`n+p`8eyFU>qECJ+Z=lte5l7`8TZnz$>h;S?AoV);9eCYoB@1 zTBe?}j@cJDe!*I%S-ICS_aW?~*0Jyr@cv;|8OICq5uf1S!*?uw){-lqx5P5G@|N|j z;R}TCl`rr&!zbXwWby?m?sYGIhVS_a{LJU9?=ZjTD!(7s`#B!KM-1`zlMUiC2k{9* zN55vn$G(2$`p|KX@$vtRdtqMJWP{uvI0>fZhp|3hBllYITK3`B-+w(lpY8j1`GR5a zz0rhwAN#|ndEfAi-V;9FSDyP1lMmP!+vOX?4Rqbdyzd(hJoYD3tRKJc*S6=LUphaa zd-@tZJN*b)0{_DPK`_1g+<*Ny{EG(&=fbQJ1PMknrzxXKp1oL@-aId&Oc=4wW`|<_C|0En? zFTP;UZNIdU8-HrU*T3g%h`2s-?Rz$M!_QodAGnIRyl#V6|Ja0i#eT(k`Gx)q#QSUc z-Z%ULtb<>0FH_8y3ID>qZ;JiGf0DQ#SA3Tb;8;9Bz90_fdyag|;#lJ7x52XFfL{0S zxc5r(@Yh+_u@8>>c@O#~TnpcW0$O9=ziOQZ6CbXY7@6vS=aSe zu)2Daef(Lz--~>|m+%ps!L?z0=*Wq$`|((!Y{}16U234omemI3-2j>Lh2-bL+4<=XYCu#dJlgSJnOyWal$08 zwXi<`2OT&r&QBaCKBahXCc%At?QJ;lm%!>5t%sQRK8D5V;s3;PT}$xZPJ#Cn=e@k= zyTM2|e7t83{(h8LDeixS>&wK)Lm!8mf7o_Uzhn(#mu=@>a69slm37=;Ikjt+QNC!I z6$_SGwP-nY%a&KaVxjHFtZ*0jZ9Z!y?N?bz$JJKSd7Z^NZ?IU$_3pU5>spJpoV8ff z87pf&YvnCxtfcvb6*nEV+`2{E6q~T@>II86pRr1OLPgh2R?~ZjRi*B+^8S0Rdgx*N zz>~IpFMePgKd|p*c*7g`0XP9Xp>yG5#P^R|*TToGWBy~-hINr&^pGbgSLnqjh%2Pz z6XYjW$yJ1T{ysy;$ZPof4B{h&e?O1tR~|ubF$8xSR_qs-(%)Y>6_ya^f_sUBiIXJ{ zdlpyjrE_sM`2q4V#eE<5UaS{q@N&9A_@3^`KWO!zQ$FBxK*fOs?+4kTr~eApiO$*0F7U1GI zK49%x_yqX(u`m3~6#K;il*pW-cN-_49|6<-HxQd|0>i|1`GNi5T|9q3*jLU! z&h@d2KlkFjVmWc&$Gl>@ur2EYzcN3k7yfnM$GzhKTpKw51M>WDk?()^N{sJ^_xtf) zm>2eCec}f41L6npw-m2ug4bAUk~Pk2Du3R)`c-E-*84=UBDu!;2JF!hMPjOD~b-nj{mp%zDJ^{wT3Tp?LX`lb7 zwamOmjD5lChc8?Gz$NT{tLwYdw)Wp@W$kAyt76KwM8_;WHfmY15p3A9OGhoYe2?W; z?6aJT2@BL7u!4qz7T&R9k*32IX+GlC=mFe1vLjOR5N2mTj#8xcE)n6 z_FHb{lod7{vWm7-R@rvWsynZ?vYu-#7RMi?ZnN5f`)n(`V8_U1+dllH?HqgBn)W?! zyC=yZ_P+!tA#a$08%({<`eBRDf65XI;C_KT;m~I-g@5Z?{TzQs{Y^fLWC5#NM;5BLA+ z)|KbP`Q-=xFUJ8C@BJJ>_!rh4-thw)?+M=r9)?51`B$D+93_nvu|Ub!aI*9-4H{x|Y{@c{V&;eHyMAm%I1`#OM& z`N{{lH}??Q1=^kByW+htuT^ng*JYE6`FD{Yfc;VO|AFg%Yy;Q)$Og&hh5fxZqdk!4 zd%66(S7N@fFO18?|9$-HxbK2|12Oz8`PntPM=U=>E_WKgjn3m+A3BdL1xNHvTp*>q z4IeM;$HBK&`E%jEd-==Gx|ZH{YcKDc-eulH;9T#eK5(ymv=8hjxfVY}`~v@qOVYgD zsyGF{h4&;}*5RHQ*Teh02hFT^`P002;ls#Ox)wiTZ3kYr*4fu=*ThSsmRYt3ypLE;$&lrh4P!$b4_Ib&z|tfA z*nn+`47um>!E@oZdA@GmincFsJZHh$X$#g&;V;H5BQng_@x99ST3*Fo3)f9scAMUe;!An**@Q~FF zK0*%iH2KI2);#e6e88&~UwqS20fSj~q+dg7O7neh}=7C;0eJ@|<2TSwgG)waeQ)tyUb)%MrXdpX7B;;UD_o z3++TS1H2vQ?-yr`WQ@kI)`&Z5f=)Qb} ze|_OGFV_1xfbg&QE*`MaC+s7q7v5zP+}Cr{JTvF8559^2<6vKT{P^v^b|$PV*8A~Z zTwgKYVgGtGyldWd`1gH)^u94PKH*;&_p$Ef_sZ=(A22F?fa3(QUDkJjoc%mH?sf0- zb;R;>VEinv% zyAFK`jT<`%pI_2@?QPzp#B$aI?>*_^2~6k0z4R+Tk5zu#$@{z$U91D%+rfLk9lfmO zz#G=Oj`iJBAA~zU2d{q`ygzPL{SRAt@&PMP++!7R?ecD7eb+^+=)Q)S5AJuaT7K=U zWt9>4BYoh#-*RJpmd7f~Egi5NEHl<`S*3%P7VQWB_=cKs3)M}6=_xCyo3Q*UdIN1z+D^ZWMjyZ6k!VZHMo zu^w`S9{w)LG$g~ zUL2m98g}pr>IdWiTEz?I9wFv}ZSj1?am9LH*B8G196;Dt%-4P2CusF~g7S80c7E>f zpF50mPr1JCYxOySu)m*cllX$Yx1-hH@-tV<6ZVDk{p;A*x$=A8FN_fP`>#dE!$xj^ z!(T_qBDwFqumpd)maSQqR&E)GhlDA)HrEOPRjJ!O&YuN%@4_G$X z%mTN8s!~Z=uHVnskCQ))SbpUg-(!I9F<^O>d+-Sp7OdV6AK-fV2tH-M z742BIvSxTd%Xzee^H$n&m6f$!XJwr?p)p_`H{ri-wThnGttNhtHIT>bSV-?fjwt21=Messltbc23)gYN_S@W1`|V&w($ z!7}9s^3zw0+`!cw;0Gym8pjF936#$X^Rhl^2R^66*C+4;DXu5iEroyR7e9a}=vo4P znB={oXO^BtgU93t=AHm=kE6*wAzZ_=FDvdVzyF)l2c!|`eC~18_R#d6RIN}P;SV-( zuWIwZaXEmvzMluIkPG$pdf9n4CF|ByN zmuG~3#r%!<_jNuW_sR!m$qRhk@1Z8R=XUJYUpU;WmM4Di<6W_S7`0Gi7^7hu*4_Wi{Yu2>?727@aGF<*S zaQ+ziGF-m@l2r@yefL>q>Rziz+-2oGx4Af9+9ljyv>3QAX}iklZqcR_7HwK12cNdA zO89vN7~i@FtPWeKJZXWF9t%Xfux`sQO<1^g1PqT6>*4KXeU=eR@-_X$@RV&1wcDn= zW=kt*x6E)CKA;=^kRa|4TLFHfuy%~Rf86rGcW(KR^C4-)3EN!MOI|SO?uDxNT8{4F zAA;b&c>6&sK`$)beF`1%6hG@3i|syd(cKsDTWAIRF6HQyAg(u0$u>+4&d&3SsP5t{BPZJa$IK;U)fpkKdjy=CXO^#ea zeqs);AiN9bv+w{<>%)J*`K1X=(H}5*9~>RNFU-3fp7^hLt~jrFuNwd4eZO&aJ#l$y z`@*)4RqK-p_rkZXDZXnJ_I2Gio$G6bdsiFOvwW>$zOX-j+b_uJ@m2SDx&6L7;rPUS z;eG_|PbTaS3hTuDL23Nb1#bZ79Q(2UpSixSEAN-?FFzoj-z&`?{Ku)qs;5VKe(%X| zSsS=*T>P}vga7Ez^H#p+gI2fyRjZqP#cKDxYSo-qj*&}qzlHZrC-04J-Ums1f$H!{ zY4+rVs@Hk?kTfDsyHD_(%+>M0eHUNf1()x}$8^*0qFQ&?;>W0qD{p@T+=Kb4S8V&9 z=WW}_Ggd!zncV$RF#nL1_TFbDJ@;5yFS>azco(k+^JU$)5F2l{Qt(mQe!a!o(A8S6 z!Onx7vta4CMRp!`7z@_#19OAmxR2PJLhI`U!!4E;Y_zoeot75ZW!aHVE36qp%iCi` z4f`xmgBHlw2Zn16sciL`hmTi;ISm)GBKzSNIoIZmdd`ZtiV!}brH`*cHhsVj5 z-XbrdCWB7dv#95&SK1;W03g0K1eykEJ!O!)VF0J=Z;Ra_UgWx}s zYw`g)R*cuVe1ZIft~qTG?CY65V1DdY^h4HhzK3u>a}PBNXMAsPzXz`GbbatYtQe0e z?vE(`gL{X0>3;YE_3#MW;`Hk6ae5w@_hY~6eZsp|FW2{uyT}ll-kixFwDc zpaG;#f780qdwQs+^^pe*o`dI8Ywsj~>?B9*B3^eNhVLCGrVIC&`fpUX*P0+U#EA#p zygxeClR}K?uC_ak%wi3pXrV zfy=wm_{Hf<;qb)#^x`&4FWhZgLc45>kN;>VF?x`^UHSS18XtUJn64j3+vn?}3ENWG zg&*j)>{tRk55OZvxxd$n&;*Ln`yyCj4Zfp-90L4j6!ln6te3R|eIafkI7My=hJOfD zj`Drc6>28n5c@5<K1el7XIC2OC2+FJShwokog9dLp!w3AMJuB?mx#BTD1Ug{-rd~pIz zHHoGw{UEhMErFateFyRpuD^hDcg*YBgD>wUZpeCgt$XnWar}Vi7nHy8HC&UAkPncL zkjCrr0{qH~v_}~{L$x5Z;HBrl^s|cj#B=h1<>%1&IhGF)-i2*H&TsSqOO6|Od_cTF z@n4vqeo)%I7w^Rd6#sQibv@zU*Zlmr@AH2zxA$uL!n5!`aj)0UGYOW3XW?DGK{!`z z_p$GD0>|~azYm-X@B8kgjwj<>{NKm^q^{kD=1;8O1Mc^s@#)y-_#@zc6#VO4`0u|K zZh!SV;N8pj{W{)8E+8M^51(;_@?W3 zlSZ$emu=+m!hC7`ek&!umvr4_(RQ$om37_$m%o*K{vy5rUf+4qBCXWl!F-u;-*OFc z@@jbV1!CnHiwgJD>x*`tw8EXosn=1zZxHWa0sr&F{!vROpHBnB>2Uq@;tp_3{4Z#- z^k9?Y0=eZq7OEvi*YB|c;lBZ`uO3`)n*`hY9A?vt`1;~F8eu=ag18U%3+nbc>_@2& zMC)fQTs`6H2|4JBIphzy(O!)2U6!zdvZNJ|PZXjz1j^7D#ScR8gD}1UO&|h)kQJaG z2B;(Cp;P9nMo~I!`4wXp**1+In8j~UpXB)rY8Pp-0ZXG^u_ZESn~FwkOUWes=N$b= zciFCyhv5WIks~~Bt<%&LXI`?lIckavufxMW0=CH$@CCipPJ4Nc;`jmigC6xGuGduM zyL%SlZ2!%`{sKJ+8}f^8=NIG~Jd+=AT)^c3UhKc3Cv4OfI9`4ZtUvQ7TYcg0cI@T< zO)Y>L0DeH{EBFF0zEjI1?k{6YK^@{t#zj(hiziFNk{wHoH z*SMA5+*{xTx6scE=4HbA5P80^?q759UVZ!EK1JT%&+!nozX5RWOu4@_f5rcG^ZR!d z?|ZKIa4E2hi|T%hT$PwGzvF(RjLv=iSQD!F3lrup8@u8+J=Ch6ALi z6$$^+@Z!?!c{ah?yQ~`B=fFJifquIl`t7>tziFQ*hgipbgJL~eeL1zR5^7%2&fDm# zxz)w^So_W7@5Fg5)^?*66W_zl7p$=99Q`^x-=dUcAnAGPqd zBUZ5Oum$T^Ex2{rLiL9@KFB&p9Ur`)`DK^G%fVoJL~**P;v5 z5&yw_Ay^C5qUqOjOkS_rplSwL@b^6QzEB;UpS(htEZs40#q|f!57GZBs12yLfUn6f zMLz`lg%wF>`DhKf_?{dri+?|>u+6fIx-0}QDZn4dg7AY3X^RD2PG9s^^oB?rZD9aE zFi8Hw?|>i5hSP+|J;L~>Li|vmcE9CSQ+tFjRCb<2E4axTQg_>~QFOzxM{N7pqx3DJ z_23U$W~eD1c$r=!dJB{*%zcPH=8w>WsJ>=;kT5SlgEycjbj_pDENt)v;9ow#_XFx# zbR1w&oS*!{={;U;SDLTl{Xd(yfb8f8sQ*3xS3CC7KkUQ@sRO?7H+QV_ReZzR^Jstg zfx|ESFFW$$KUn{6N9Ye&Cg#sSM$P^a@QwL3e&zh)0*hz?GsOK_Yys|n06(A@?{j|T z`!Z>QjuVh4Oppusn4Kc_&wz8)>$K{+V!61y%*AtXJr55MzID%Od(!tXo$GrD|5JCN z50Li@_hUD`N3Z^SHV*#x-UR1|+Yen!j?X$qFYlg<_yctQK52E}RvcfkeNcGE200#< z=Fh4g{UliT`*jlFJx*=bH}&txHrDc0&l@~T4N$Qk%=dtKt>X2{=i}t=%IUk&>AQt- zu$~0->eCxkA1*v0flufG?|wgy>c}bTOi8rE9(r;*sY`W`-?vP^N}uer)U%(U7XL6g z`+dauJHYl$*hP!BU36M^49z}D4j)1Hije0^q|3>KG&*N4EsJT*QrUo&g@GV1igb7aS~6|n|u|ANVMK zK)%5D2lQW{=fuH&g4{0&=4C0>bm5EroH)}tb)!@zVcso;^qHz zm_PF3-5#NG7Z zgY7BeyN`LT!o2)};=Xvm9&A$A!L0Bs%pZX7Yt=R3-Enzv?XbUoU-+Kjn)3XSo53|P zUiba$!n|U>O!0pb+b0e{+#jJXFRaTC2=^n`qw`~f^yMVc>4krv>kIpeKpJ#x+9@X%>(davbb6y+2|F%cDJoTe4UQ6}g ztM^_rc3RaJrkF46cPZE7wT*-MI9y-W>2!SJ{md)8uU??X?FlQ7KZHhqKb-z9c>Epo z&E9I^-8ax5e?8|nVApdE>^EO!#pvIW-RH2goS(6x-OB0V_Pb8N>xuIXz0Ur#Q54paJ>M2=ZSyny_=$DC);n?mHY4maCB+_#oJZC-|KLmTTXp18mDiE9334$ z2h8SE`wLd9R;L>N_!ayYRPjB^)f)&8CvPtV|B^^zsxj9)luge-PP7lK4_ORN zu%r$?U#;3=f*4P(5kO}|ZxH^o!p)W!?XY|_hn%7|+nnEo4gnVlv|AQ&Kcg7z^Rr1q z$RzFy|LJgoEb0mBQwZ^M1o(GUcMQR6g8WRfP^Et6eei@m@C4-ullZ@RIMWHM?Y-W% zs^^e-gi89M%GG0#ywlZF)N8bDg!u+~44UXimLF)@|3UhZUv@Q^=IK|w83k%H?Xw?t ze8A%Z^kI?fC3!DMGuUXtys*E~5A+iw2H=Y7MI0uV98|wD=f{cpiuJ;~Ovf^D0-5~7 zsaO9G&oLtm2M`xnArBDd7wHpNq8=a<=9Tvg|Iz?;EZmRZNi4qW7tGZBhFGmwE-o%! zP7Uu4YH-x?bS~39AM-xm#p8Vw&V_5=C-|Da&kf`s-2HpW4Z!*E4btv^34Z|h ziv6-NIKO&#$8RQI0RQ3un$s2bWjY?9S5L8ij5_`ZH9fy4zn2&J=5+Jg_kw*l#|rM1f*yH=uWIL(ij!PM8nYETWq&fLCID)d6rx ztgoB~$6&sU-up5%e=MsMJsv!Sw}Sr$^f@?vkUE^OlMCi^N~Onvef0T2H8=wQ`DpmU ze~3I>7Odo)_#ULDFT97z2a4d^MKyaYgw_`z7JK~!Ll&(WwitOtxB~t!osrtYmb?br zBK!w;Sq2bmQBphBX7tfAILyA*v$E+f==54{xjeK;{U2O z6vIz~RU=N5$inByve5x@ONRM<&;=s&9bj9E$yw-c4%8h$7d&Nkz1LYqCvywb5H!b7 zk)XFAako_^m|g07fZpg!wrzkpC3+`!;0t!qTh)j!XvPn;%)AN@0Q!(>oFAB_)<1PG{sL?Z z_rmiSSRE#wE2azQy624h;`4in_oEkof`0!~lb$zqH+ep~{*=D{4tn;uC+v&&ySyJB zFv9uJwd&1%hx$DCz`bk;y!X?SJB$w)B@dA4Sl85}KjeG?8o)Zvd(rP?{lYp}mZk6q zDe&GeKcH*e*Y#fXe%GTb{5#_w*zW@O-RssxT}HT19ER&l)5FB`2dD$2c#Wj*3G?mr z1xVKy_Pds-=h1`Pg?`k|JgfMkw7sox%S!rkTz=ncBcNK1hrYR0-=d#K38C@hLdD`fw+S zcN=j}uTSYXdOtcEJ-Eg6;KjC+r=!t})2mJwfXnB?*K^6Eg(qQOoL~Jq`NUH1IcahD z1@yNN*M|h-(kR9uT zn+##9Ip}vGzrhb^&Bt%$@%x18W?j9Yvi%%A1oRcq7gg4AomHU^RH*-$o`RbAT~O)Gw54?Q9TL-y6a{O%@Jwg93IsVeqe{x)3xIgpy|8YJ*xR*bW9w6My z#QkMUPkGp1koLE(0eBj}r}g=IpYT7g8UTDiK45}aFZ|2)(t{(+ixbR}3yj}M4saX! zIX+=8>p1uKDbIJT>!0;CvEuu^pU?z4WWvArds49-6OZpd#flA| zW&TQiyUcc~N2izie6Q+!SVBI4`d^Rw@zs|jQ@mdjw!Jk@YU9lAofQ-7i{ST#^@{cI`g(Xhb2x$OSr6;rJeT;M1GaO(b~f=ni=J9p zCi6Tx&ne>`vEMzzT2M1hj=o?e4U6b?bL8$b3Q2NE4b5g3L1&)O_mGi z55ziL&YxX`77%Ko{)nFd`x(UeoCxuq9>W~)ulhoOT%?HlLWDYGq=A|Mn9l|Cs$*tT zKMc}?9D&nB;WWkQ5Fz-A>H_LPELNRh#{uew{I2}I#mq3pc2H9!m#S*Jidm#y0S@mj$5#%( z-U%zz5m&T+8s5)r67|G>cz{ekVelwD$S1yNqo`hT`VPyO-# zhkxN-enIzq?2G#g|1S2^|L5a>?orkDyuKf401KF_1FGleUbsFs<&M$fT%1>or{@O~ z|Cc`)g%b$-6CCeH3z#N9nBiI3ex4bFFN|DNJooZ=ae!HPzK?zR1jTw^>vK83Vm??G z_6M*27mkH_IKWlxt3hAwD0=<~y}X0qf0){yj7st$K`*ZGuf1+M*w3bG32l$PZJOEpVi)mY+ny)E{XU70$`{Er($jcA&K3zr2TgH~a=0SMwJU#$T zoqqjbwfgG!6XR5eQ-2LJdZnIam5kDV59f_CgTtB`)jS_s96lgWISF591`kajj20*# z5Zi_ifD07Wi3fn2Dl|d*@dNmPd@wKkEB4ErKM?lGu?yk)Mdba$erzjoSbafg2bl$} zwmEMn9DWRYtun6&b(ps5=LLq&Lw;R z2KGzni74l9Ux~I_+3MlH3j9}g(ObxjL{&Hah16QBdHw2>^coLcvc|oa=`CdbX#WSm z{j2m5fqghYoIEcjyu<%w3H1?BM@%k#937B8Zj=`{tO)8b2iE>;wZhPqbFHU zc{XzLEq6S2`in09iv#$&zhb`feqHm;kNYd?6MhPO!}-Pi{~7r-Q`yF>?D6@GguGYHuEFKo}>ki_1H$ z&c{4lUicp-A5agzW^Xi)JwR`6pLF??7X{>fkrFq zT%wi-=3Olx4YnJ8=8QPswdnWgX}=8m!&a&1@EWUk$MO96H>_n2Z4cbnjy!6W{mk3Y zj~XL>M5N(^{UY9DMf9{6W6@UlJvv^b=_GanzK@aD7wrJ=+nJqhSR(EpB5pBPR|n?N z?hA?ap(^Tcs;7ZZX<7Nq(d5BtbD7aqj+s@^W$jCnrsX3qy`_3-a{e2MqP)DMcPsRb0# z59r7H-0hZ@x5LuaOT;S6RO|=)`Q-V9WxW=zOu2sJEMk8~SUtoYU?1K9_A}@acG?~} zd;$Mn0kJ)Vc{K-qC-{6GKT{CCQq&+Wzd%3WA**g*wc5_Z4)cZE4v;sI<1{YOJ4oNq zPWp!E7mBKn2<$8NyM97mlk(Q9m`T0{4uBu%ydLadL?67_wkB@3dbnFXdlWPbUxNQX z&b|cROmh2->H@FPTg>bcxn2)7-EQ=NUi5$ju^~=gkfPR`!Uy!j0fvu!h8bjG|8utI z#9OupypIX{9BbbtZ|^0p;S+r9`}&`cdH-Ci;{P%|L5r8^;iFg3%lkLrpS?bW{Rv|H zzI%x4tghczdH~mD)9C#Bz_#MMOvl3WB*(L0{{X&0*MxUrUB_C5{k?Dl@c=zHfgb49 z?|L_xo{t%})BAi~IP2 zB-*`ldOzlCF9yxqc>A(w29LfRa(2ait-WY3!hE~>afEND=b`Dr>80&;!^wIu)$h8L z(_`JjKRy4Ny;1*1oH~AjJg*zB*G}!HdFFNE{R_5j?~_(J@SsKDi(&fGi{Xz^_Qr_7 zDT~N0qaD=m+QEIRG<@`X^ylJ6`29|=CnvOxTHV%p>TJx)qfHeM<25rcp00Qutk_RH zX3h>gss|i^-T`(-%(;t*itxot&4>eQA+YRQ)?}_;tU_N65 z{xj55>|%chT40>IK+59_;9l6z#D8Q``fNe^g$n^SL!5lMrY|S zKF7S_dGh}Y%oX4RI^hEBO;X+C;lG}`KrMBFS~S6W{Q6e*DA_jhICIF)P!FJAfE=%# zx=x4m0P4E!%xQE{50DQ?q5lmMD+brV{ZSwDpSLlvK6U~>aDqM7Sci|xbj&QGJO8ZH z`4sP!2ONCz4=xW72aw4Zc)5Y@ODCWokoDkY&j&0pE9B?@6Zevf-$!hA*e8CI@6Tf5 z{o(=RchGYKj)iIAU)UF>{Wz~!uX}oC?B<`iV_j1oAl!TR`FeCe@qFQ4{d|i5%JF6W z*Dxoi*|`hsZwSX92K$2-zRwIDH9F3qy6Ir^l;}-VWivm)B9&rF?(>O{e#2w!V?M`t7RYGmBc?kG98rYEk<|3zORy!}V3W zkHYn}XHGHw>&48p6cg`@i1o$14~xNm7%o}>2M^VGdt?ajnu7^d^Zu@)e$9J02=;>T z`w+O#r{41f^}z`Har$M{pUXWsfP6<7e-dUt4#j?9UgqZl z8}Tncq383~u`jNnW6kj@rw+ltL(=+){WIKRI^D>8h>3hU}@%{jFiK;CWs5asH{xnm>j9|TT`2~3V zB7MpH4&*IC^otO=e~8|Le4feW?^i_saHNraN*cA-fbdUl#r#8*RdWSpEzA_)k1IMa zfO)K&S%MyB378?M>b?=)f1}d_E4y#DDttf3`EKfQU5C9`u6W+H3dXS>G?^s#-rqL^+%IYVj@%woZ`Q zJx{nN$CtH(|K?fgdav3p_N0-fUqei&jNeY5zWVgg_0aE&;rcOfA8Vm6k3M|$;ucB6 z+rEZ*9AEstXxjocIJmv??pp9(O>QfF4PG0P{zi{$K>agV2p$|j*Um-z&SkzfmtMC# z;RMUYa=*tO_r?GHJizAyIuBK%EmVT}bM&nVI?V54n9+uw|BA>S9~)8GS}qydl{WS|XX)B7*n z=f&t7R*#Qn2l<(O&hL78$m@lD%?^b4dlb+^EZj#Mi1%1AR)mGnEQ9s%fSu$q^c==^ zqU-HCL=PmI278)lmMDtF@B=Ys1S0rc`GK;Q6L9{MaDMh7V*isW8U2A(o#(;6=7^{T zVAc47O8EnFf$AjtrS#nm{^=DOeVEznr);1<&2W5oV9 zZJ6^>@a_!Edp-c%yL^DSe+&cvBPZYs$3E^%*!T7SjlN*@xxYI6d-tRVypR7w$^pm) z7T57F9&k`Sz?X>k_Y{nGp!UcXcrQO7ybs@q)_w!nWp(&p$G4Ad zFaBX_&><`80TZ~ff0OxR@pGuhjbqw(SL@T-6`TZ zn3g4($Cc??-)VAr?)NF5R~-)Q59xVw`(C)dIDH3o*Di4HVV)iwYA@OYuNxlLizU!p z6I_e4YPMc`#%Tu6>G*Jb>3Q97eAV%^Z*(WCjt|DA-N&$q@V||o zKJ>lv=4JHzHL$#b?zhN{&>?1lmYfeLVUL5Dxc^Sy2dvU3eS}}|?CQ8RPK-SaOI@87V2l{ew~A7_sd z>@XNU{3daQ{C^cLz_kH?=&+BzhaNclu;%iV1HkPc@aq0E z_<{rQfjMaaaCvcj<@mz8pWBNITruwNUB|jGJ}Pbi-ktuBpBTY>e=u+@`)FN7|1DS- z{;wD~7w%=kx-dTgH;@gTe;@mrw@cAmBkRZF#BEvfID02xeJAk?tO@pW)T(<+rIfA5EtXT~|GO zZLZIQ+57!35c40UH{@#N5g|(hSBi~(C|WAsnMg^XMv|IVsI85 zJ_Bt&1MMn}+;%hX_buRhb5S>Zot|6u-I4=mDHlcu&qNQ;L>Kohqkx_{)yA-NFqg5x zbeX)*!Q#sG)5o)_yXkv+RsNm zAk6H5dTuh&=hH&?9QyNw;q(H2F4gez=-qQBEkOCeE{FXs(gnc3I6#(WhVcRNZ$59y z#^(w90qqSye}V8Hh0{9|-q-Q3_#ff8oSeV9b=CQRV$S6gJRd<_6YlT)0Qh%40AC~~?xt3b{5ZB*;6TCs}e*<3dnvE>K zWFt#2TF*3ln+;HJBo~P>_bj~o^*^8g`+mUp1;V_1fK1r;&G!NF1DXL6{%0Q4obIog zzo(av{ee~gn?e(ugbR$_BrN}Eoxjt!bH~rg>zM%}&))vrO-^ah=`NsI30^9wkiS1{|=TEVJ z+DR~ef|-aDZxino^Vu`yl=M9I$|0^Rws);~F<%^C8lQAOFXl6&wM;KIwO3g;H5lQ$ z3+rLdtAqNC_R~>ceiu1gH}$*DMfRM=+U8y()_;&bFYPr)Klm72pScmo@u}4pxqiH3 zo^B833(@UETh(j7KyU4wspmGYiXNPbN%qVD_w0w4&fa-j(Brlgv3Ewemp(T2vUOne zyN1;J2HsgS$fq@f=L|h9jbru5ZeccmGyO4}^XZehf-zx@bFQgx&fQo44Bs~&E>TSG z93yr{;K{}KfCv_b3kdH%2XJ_&haiCY_*V@efcBtzVQ}3Fs?iV8-PBjF9-*{Ca(_5R z27UNh%G<$oIzRvB^`9+`{@t`(`uK?Z;{IFs`CNYweSPv{@)?fbD5qh5IFBA5VPE}& zVYGhr6Ka;A9ByAutS{LP$KQT{+<)FmbZakzy&T?T@Tpry+|Lx9n20rWGxey z(fOWd-!ZT|{{d=zuh8fBsjTR#T4J8PiYD+O!?)Yc z6#a+I=)h>dMGfBX5ktQe#(fj+{o0?dDff5zKbT)*-ba4m5OIDZ{&no||ETusCFY|6 zOh3phK6${@Jz!e8-))Nb^w!<@u1(zfo=x3JjSsx<2k$x`zZpJ%k+_a;@MFF(uG~PT zYvTRF{=hZr%cmX>=G{t6Pbg1^yC;PI_56Q~=M?J)&QhbpG+XQQ`~=wVr7qf|SWRC< zioS?GdLk0Xn3LdolC_`nB=;28yQsHzt-#Zz#Y>xq*C*fs>c8)T(|0d1ivjL?;qq>F z6Rc~Gjc(1|&QYsz$Lu3b|Au-wTZ#28PS1Ub{p_D1&wC8McNek#dMj$Ce%Gk|^4J5L z+EJKXz5u)jYZu|k^WYpSpQXn}{kBu|qo6^Rs|RmCdi);x)`rowwLcy{AWZC+Hdi3+ zjF~p(UAF|OfeRO4M%dnzqaIl>6A-3lU>^*LM{mldw!XnO>sa-6#aZRz@*&jF1H@AG z<;CcKiJ+Ai%kTqX)&ly13&{h-0et-D(?fK{2dD;!X5b7T7UEpFLm|0DA$(l*hIBN> zE&S~AHR3Lr#a;~{jh{D-pF^vk|2uyrzoq^@hkw=kx;;I^;h*^(&F+EyLV62|@LQTE zD5GbmiW+`pBX|b?G4%ct;=i!&cmTD(2ytJr{|f%O=Wzx32l@fPe<}DEA1G;D_XGHX zDAyu8S)~og*lQrhp2ksfgOXM_LFZZO09RB0yMZ}@n`~R(?aUD0!yZGImw1>?fI@_*@m@&P(uyv&|{kN=iE{Qd;@CpRGHUt+%y zogZRddXm1Or^N?2e~i619#)^PW^d@lyB!_xR`7faxWAeF{-z)Dd00QO$=lHI)-f;K zkKq%Bu0@x-{s+wBNXMf$cU{jLBxm0X_aCPRcXW;cG;qjQ(#BuGfp_s3HA8r09F`QaS9E=O^eaF{v5B^hJ6P|m}R(q(Ys`lOi zhPBVN=Ii?S+CF%JYV=+3dhHY6&DzQQrsnR{qtyYYm$jkSYQK#xber~BW;!OHBhEhq zuVdfo5%$zd(684{-JX0tz}$R*KAeJW%-6U&-61q^;ynHJx#iQuLiVvNq2?5uq1FcW zWhGPO%;fs?;b${{o>8p&6&8UDFq58E$n1Rxtv)0SF?Xjp>U;n*xOpw~&7i605YuzP z{uKlNS8{7&s*asM@N(-dXl>44fd6cGbpiW(MTpf=bTh^MVpf^<;`KTIM&2*%`}kK~ zpg^?(Od5gD7hHc(B{Kxn8Z)UgWD@sX&ca?n>CEp*|93S&aTfSWIzB56f0hRJ(*xo) z%2T8hsOHy=2B7@_G{b{V$^1^Zn)yBU4UCXul+913jia#ikFKB`f$Qre>kBGQ{as%RiMb~+&0sC8% z*I9kydhABq-haC_j^0n~e}sD9Q{bNXKmQE9KF?xLTi?<%-!wW#s8PVyD+a~ z#r#8<@W1%P?}+< zZ0{{U^o;mEdV}!oVO__AV1M9hKDUHxV~Y36+rj<#4fqUv!5(~pt|j63vVO($bM)ez zWiAH1YaO}3=N+9>58gN3I;4B>_dYPM&!W>h2-hDz`!#et?V$yCKY}&~juV(ZqbA9D z;xPTuN13?;+g%HAb?_c1{%g-HeO8pXyR6swgpYaq;a-{1^m6!?^?uFPDa~+wz|(D~ zo<+Mw!<}HxYwSVx!oMA@mzq784>3zy$bLB?G~|4GV*+kwo_<^E=K*4-=4yof>{8;r z!#_BW&C+WpAK+cjuRP#-^YvU#j5+jDI6;Z9gAWMPqf^j_QKN?oq~im`qtn4f8Z&Qc z`Q-9>t(Z6gF_V4v#PPR?2PoD{Pot++y>;*FZQ=pojd+~L{7x8+KCF3t>S2Xorm&Xy zEhCO^#J%wCH2-z{htL4jCs0TqLYNxiMt#uL2B}A8vA0H6L^J)w?GlXnoNPFNG>S}_ zav0&ApE*O=59%76pS=R5UpRdN?IXVg&JXVoGRG5Q{wR#*FZ`Em-A`%rO5yy< zU!-FS`(f4gIF>(zKUV zTK8V$8Tts?R_II6-g54ReqMWnI*H+L@E+U~Q$w zv)jVuZS?bj>vi+v{Q?+w*azbWg>!tt+@)VRTarKET z6zhM?=Un0gZi2(#sF@pT@Yhgt1M_3@1MBC5TpPp(jBs6f`vkFm5*qpkHKLiID;QGKx@^@l<3M}ihXtWN(0d%bo>`RyLS@m*yK z?4Pjg&Cu$z95i3m&7KRIx9Y|Rbm9xzG>1*^RrewB0A}ln>rK-yTN5?eX1IJSv0Zz- z?4Ev+JszH;Zub=WJ)bKv{senu-_KsT+DqqJYW3%=0Btyb8*_Bq79HmEh&6faJ(CTG z&c$!%!+X^SqaOO~Qm&WIV8s5id5pCjtC&O6X9fGYRoZ8Rynx=lK!tcVeglkUOAk;k z5N1z(_2{r)c1GcP-Hx1C_)TNxJ&nEf(gV`@G&_T7CASx^-jYYG&rxsPE*E3d#kHBA zkq)oDxB|@X6=)VuHAS%E;x?EL3j6ClKv!~o@b2SZIe?CZ`67ItEX;mdMf4#0{Q?2? z0?~7rPtRdKwaK7rb-c%w%jZSl^yrz{^zmiFXEKTPS@4l8w2f>uP0jOX(c3T0FJCdA zy+eYf%T02lMYzT&@hOqs(z_5V`ge;XKQjY$I(FA(RE zc1V5@!%FZWC44XG1*KqLeZpnRDZqb4%Nl)yN35>vgw^+)w%V>!R^N5jw)LK~9f|X{ zD|NLs4P0kUgV$phZTHB{wrlVv_7J$%w#Cm{O$Rzc(=2s}IrbQ!9$A&-_eof^w$E8% zMGt!(^zeJJ_d!iBysVSIT?@Z|3;Ue3&;#9qA84i@iu1DF?pSf(#r$=wyPSXhSUx~J zKyiQJk$-h~Kdg8U?_c8D!N-0>UoU(6J;+|&VEzDce-R(Bfc`gg_s?wlj`wU*vHwPT z?XMHQzr#x39a`Qf+WioGei+=3alGexVm;T#>Dk*u{2yd5{6W?8$?ZKKu#SIf@9uM` zj)7(7mr|JY`4suRK4Uh?+><_|O*Ob4>T9a8X)m1k8Z|id_#X6lox8jqj^Bw^*P%Qe z?ylOK@^$UMqWrxReZE7y9gSZ4eCw<}Z}N4wcT4k>W;0)e)3eXpEHm5F&ydUO^Xm9a z8Df0>z@6+NPpuv;x1jNu1<~nq>9NhB_N6$V&-*HXUM9R}QJ2dkAKgN(n}%iae$V24 zp9zo8EFlLj75`_xzCyVGKBIaOyi4;(6JRDUzlPbode!~t?{WRR@8drcEieNuFr$cl zH`qffGn^oYX7*k>n)+YW2MZU_-WM6{v#Z$YbbqkqY5$6+(%Q-Q;n%`fF8l9FN6TgQ zR{MDe@muPb@$>iqoIW25Vt&l`eLx648@);leeTt}EDra@G2j~LQ z218Zs2}ZAAn3_P5{0y~*0KOnV?@lhiPj*2Z>{A=i&kydU4@#F%?AKmE0eptyV~D*! z3yA%~ej)MS(<~;5``}-CA9#*X2b5`lkrMnt2{_mFGS)KiT~53&feT!z7l3`?-|a!j z^YR1I4u$>lrX_H?VpT1xR@qGbU^lCLK-*EP?Koz&ZAY-9R^M?1J8X6BYgR*ju^fLP zZ7%AJe-q4CG~Qk{TCErhl{8|zc)rP9KS=C81kM-1vv0b#1n!sN1zHvFS2;dR-oL8+|8c(NQLz6o zG5-N(`|o)V`-v?+^h-MkPgq0)SWpe{PBeg3Ay8>gSQrdd8e7HqeH z?N(3rH_*#LPfiOnb@YGaGdG(h{$9Zx zEAL&^xm4@U)yn%gAKYZ~UKZxl$a6PKuOnaIQp{)HFiR&rFC)q`E^hONDiC97D&5(Q^<(6I5;>i?QF3Z&8j*@C~JUR@hg~gY!rO+<|>gBHQ5ryQm{D z3slJ*P!(3OdkGGJ762!Ze&{}!A_p+amW((0J*~6rC`yQ)p8MpdY z_f{`W*7B_+CCi*sZz=yV5eq^UR55^kZv99a5khot^y4&3g z;1@#ph(gX6h~dKjMjs&j%NOX{3jE+Gy5JhvUwTZRo%Jhc!v5kV#d`Yp@BJyf|EIR_ zkot1prN`&T==(oH-+z}J;2rosy#9vo+Qd!Yvwaug{^9}Gd>bQYzknuphW!bswe_9U z{+H-$P!yp_1!zDO)*|HYQMm+7x#KgI(u5zqOoH}I{`mEE#(JvYq3!e6sB zE641N=4UiJlTEK(CVldm`s^#sx>xZ`8GA<-sb1G_o526(BHah~#QrQ9I=}GmuwN_e zllN_10W0_de1J@Qa%e{1eHI?L^6{S)fm;-zq4B-59RAsZ8$B%p+&jFiud1=7%NMMh z+w%(DEZz0V;}_T$CyRYC@*Ia|A1?juV93KhxOe`IK6o_zK&9d~_y+3*(kAdY_Un5A*OHS{oRo;K{b0{x8i zIOXH#R72E^QWkzR+wJkKJ;2#t1b!k@4KYuAfxmr_{@xJ#i4@QiB_B{st|cE3gU3e| z_c38TNq}AH>+Nw7gL7M0rNjV3v^f_4@alMte-aPjzv$E9JXW;0>^xeep9s8c(b8H^ubF0{c34B*4 zZnAQ6^O$Dln3oGPCl^GQ3v644r!QD8u_&87HHTVu4!v!;)TeWZL0RBDhxbq(b7OgE z;QG88abm?AeV$dGjQ5@Ep{EZgGopQ|$-}{6reZSv@@~e2*qNhQ`WRe**uM$%0f_&F#QzZZSN@-i56O!1nKzCDfC>K1On5*hdYbmr z-2w+lqqe5wG)!v-z9Aiskj`9>JEsR&pR=QVdbIC_=JnM(99riynvV%l=NI=E_WwKn z)%VNi^*QX*Pgj2k-$m}izCl_e;9dAH2LJK_zD40q{&9>Mx>C*2G*UZfE!(|rO`2U^ zqQ_DFxy&%a5%S>!0dfU#t6ce~YJ9JF3Vl$rJZ5_G;R^wJqk^UQ0s5p0@zcfVd{O26 z(*5uUp0RJC)6k`(|94Z~plc=UX;{wQh84SJuxVfx@ldC=X&`Yb>dU`9E56gx{5Y@Bv`L(hqrfJiQ5G(XD8k}{IADz zbUYX9UHorw`1f({@E>k)zQD)7?;Ctyp&VZ3>w7x(bv^0+D{uf|e?hSxlMh(Hg!^T3 z0QrD}oFBMXef!_F$y@)$rojHb8@~_6zsHOn^*HJC(&?`H8rO*V=jokaecg7>Ubd={ zdn~|AbY2ttA*A@Mc0OCF2_Mjo?$##VjriTpXGn{`s|KgfVs6FSIBp?7Z={~ye1Mv| z`e>&0dG0T=Z`$*=op|0b{y6(AKFsIPK7jtlXS*eCVLt9!3+_5?`OLltb}UnKgGZ}} z4x9(+r;+BKi!PN-Tu}^nbLcKkE8c-~=EU;IC53VM@m%dI&%UPpFeJ;2ktc{FgOw0DzV_QH z1pnH5uLvt9{ufg#4C4dB#Q#EPaAbT{0UCh#weX)4V}@P(a`5luupd)Elo{T>LxWu+Fi1d}{Dh#Nd$hKK_0M zXdH#kr0MZ2yMJu1{ z-KNj$ImR3g-&3=8SQs9r{6YJU2WrU^s6l8i5w|A~+$#_4=fQ{a@reO^t^9!eK>^&M zh~G>i5=CKCK&?({X+3@&W;&7lGJXf{Bm74h;#BX?hZghu* z#MQB2j2O>(ZZUXf4RT*N7mh>92a2~_UU(aG8Vwwi^JDIuYe6&s-}Ia;w{R8pW5slKeE}|-nE%q-?4qy ze%r<_5bvqojWTyDtv+?~3)Jk;-|0iHhGU25cP^s-Sw#PHW$IQwGx{;`{35t#Uu3j) zeRe|o9D5%vyarFl4!lMV{)*Gvo6*{ppEpjSwNJv`(cZR$b@fcwq;6+ld-yuvzmWYa zgTi{l3VQn?boK>4iw->4E$DvYo2@t;EtFs~Ht z0WKiDT{*Mnb2Gqp8d&%A27OkJ=J&}txbEio-R$c)&+2)t>iijjwT$9zAygZ4Kl#HUAg;MeIZ z(C?88@6VD>P|TkG_yC!-gB-2}$k7Vmaz6I82Y~8>#mpW@`CPJ6K9@ii_YYZ8_#WZreptHYcSH_EP(Iu@8yN- z!GE2L^}@ZY?XUZQE4Y97*YxxJ(&1m&Unc+G$oUobm+%D#!T-_&X#aQr#Kx{7pFhcd zLnrB>JN9`SJ@<8tew$n*F7hz$zzi09R?AHVKui#(%_JBRb+5&Qh0GeBFDO{NEEv$On zoO5_h4)6CYxPaFqsJ->Ie;t1duDe-Wel}s-GvVCJ=ap9k@l`IbhhwN`N9VdO-Vx#F zjVYe=9V~*>=d`xoIJC#V7i3-OZQ55pQK){ zeY5Co;q|R**Nlve**Sc>KEE@@v-;ewGBlY|e0>RD6T_F3;5RgfA4V?-@^k9*!856a zW`lcaBI#jiqU>iteMGOn_89f%|Ip*WewbXYi2S^Wy+aDvL!=O_2TH{2s4cRGU{(=z z5%v_+zQXD3H0UhgFwoKSw&&gGn3ztiu zZ}PCM7)|WX4R6KjUA*@FfFHy2z;<5I`&bvI|0nbOLOs}*ZFQCxuH$>wxR@{e%ftgz z=bH!j$_Hj2MBBrJ`xR;a#C+xY;{S8^|J>&9`Nl`7feTzgbB z?757-&b%V?hyD12#7TN&53A0`zGnL$w{6TJ6wt4fzn#xd!YX>sQY*jHnkO$=8~58L zALp}_9(H>rN60ZzY@>YiwBo?=J4%dypa5;kbI;73-hxo-ivEUb0~sWl@i;_@x3L)^ceX`bgTML z`MfOl7mTszSm`c46I7oO#2$lM_1T+|oy<01CE!dh+U$5`Yz8jjUDQRSXGjameB-Ia*69xZhEXuv4hiG4u z95kAIbOOcwAR34Ig!0)-RG$-|Jw&sD+EWN@hnO?wJR=0&IZg|*=UBdn_iW;Q7TC_> zT1H?iR>$#HYLoZ@ET<4Z5C;3KIdA}7Q+{43-cLTCub574PCP#dch4tp&negnzKPR? zbr{%oSoipQ{(8I*aNm#n!hSB#ZZyvycv#O1*Ya$g^8;FSE`INuus^qsec}JWC3ron za4+*~ebW06$f)_vX}z0$`7VCd8tGBaW3S0FJ`b^G=pL&Zxu4wpIqG&FrPr1@m{n zo>|C#7OEkGf92@vkWlt==EazX(ikjTn8Apt_GA0>pzyy0dV|(oJ z*nT~>$1|RH=K8+(&)MI7?^8=EH29tGhjr~!r%qLMSDk0AXNA318-BmJ^)~$ecJ{_~ zP{Y=Nz3u2DegM{TFATW8v8y(4**-$N&fdCk<_b1cT=#XY*fZuxx z{;RxJfBS^bov}*ZK)a2u$$9`CAP0z8UBv6M?+)(G#}{Ir3IXF8-{9T&T^*iLgV(#( z@l)#HzL(mA27k*SJbpyZj=wd)tbl%Es159VgSGE0Fb*yo@O66>h<&jg`1i5+SHyli zpZ)$>^v;;A5CfQn{>LAf$U3aAfDbW(y&uo zZwK3LV7m=$j|1DIyC(7cB>4W66EY5;yG_3vKCd5Nf|vJBATK{*CVUgTYtK2~3C7ONnEm-|`_%(H*HxLss!Zm3^Z;v#a~)pG>f_>^kA3|_uH*W;*Zcg$Z0qIt zO4$1i92Y{a5BzKM_4#w04_mLVzk!_pRjkSe@W1iCe^RZ_tSRO$y6KA*9q(Yr$g`77u5)Q-QyAkmqeD-z)C3UyGg} z4fh^po(9NB-D-&?2GT=kRf z1y;2VPu(i+vo7Ghtjpo=l8b~i_}m6O#lO#UeZ*G=r?J-+{13|K<@a#=hWuVVz}knM zw;!IEFYG!!NqMZa;y;c@u=C0=_!sws%+yha!1?$V{11zN_Og!Wx$*Sd8JZ6M(Ie`K zA@|r2PwXXEpgyxl(P_k9t%)4PZ$GX9Cu`!rY_BnTi#nTp4ErF*bb{S3@ZSagx>?JU zu?LgT4U@6^9#012lhFZ_;RgzM=lLQ&09DZqs`D%3Zq|1(^b64F3_lGA?^VFDO z-G}}-Jd8aW=9$aHSGt)KKbF~T?GvcoVx~j)M0_=3?0J4GG1{Up8@VU!yfb6F(cQj> z{p8!pyZM_sm%;rbxmTTew_F3uJn38u5AL!1*2Ir0H}}R^2a|Dc-dl{r1$z0LnmI6! z+sG@oQA@6jLrUb9yNHk5FUuN}5}(<@J=KYCVZK>u$G7eP|7GI)*=Hs;ZhcFhn***o z`F?tcks0GtFKhGXGMmKs!=|Tr6Ij1P@<@n&; z9)Pa)skbMfyvqD~5B9!-ZTCHWZ)5j;#_8qv*m+}l4S0UmLFgfm2Z`AYf&T&YfYc|93U{f1NpG&I~N|Qs1mC2lL~=@L2H= zuC?pm>Ojx|-|m77Xy-d8pex416DFLHF*bz`E}C-=-_>_)WUv_P*-dTSZE4b_ z`_s3GJ)g$@)Y15(-zF#3#XgtGoIia&@!MJ0E^4p4>G4ov&O#@1+wAYyK5!BFIBezw z;&I@I!0x%-6u$L`|~I44@0-=Y2h`vv}~b%}g?&S!&hc>O5yU8BH!vBohy z>^v{;=i0Gge5`SPg_!?X@Z1KLkG-YUw;2T;J?nkf}BGDyM9jKzf}hW?#(w; z$dy@tYmcz637kIki`Z|FuM_uTJL8*UAM2;o5%I51D6rqeKi9V6Ke&F_dwG7~zlZ@~ z+u`lvU(xO>#`KKm4Uq>N;ocJeIljmH7r6ubYZC|5_b`V5_B|d(XNdpt#E1$#!2ZgK zYpJa?{<#c)u;7OF`s||Dr+GhTi&U5|E(d6@&A@J-fsHS)FaF1%3r+*`r(y3$b36ua zkg+e`Tkt=+a|FFG%=06Nx?nspKXI-d51+l@;o`pyo85-(Zm)pdZ_o#==Q75dSogeo zqE(NygY9;(eNy;b_(ute*nql7on+ik|3An5z`D3!hn-&wzh4jL&FyV$+Ws|n{XVUu zrf&nbU;LZvTYKy`Y0a@;r^}E21pG5&l6`H%=M$s7fIaN&cN#b8iZs@oI()KiBDJt^ z_93|agp255b2b=Yerkz%3*x_HIF#MzxVw9c}+c@Ncc8J({Z2 zTskYVi~Ov!Wyg_^SFFEL2aJVFSO{bNyesy* zCT3`^z&f|0*2Q|47V$heM5WufKGHQJ*GHO7fgZ@%y=c zj=4fHuZVvi7kR_N{)Y}2r2mEA^*Fd#o=-*$)PCjd)BzQJ2i4KU|FI`kW{GtX_isZ7 zj4GdAU>&@VgL{tyzhklEW6Rig@h#55dzR98Vg?hyKKSn%!Vlm%WGphSdnDsr%yx=d zeDG2YY{J9aD`HqL+HhI&)XWe(-N=D+0bN`Blt7tckmtSkHXMIDU3{)reH^?RN4>#**< zh{^Lk5LfSlhbwY%aVhr2oFe8=#r-$whEuQgHS%_If!5bX{gCJ4J--S2z0}Z!IJY8j zUvU1yuJ!J zdE&R`K6O4(jrpP#bU-(AL#*W)L+o!fdcYW8XU@&(?~j0gaIJKLb#=fA{11Wu!7O9C zhqzW5&iEGZU9Gss?vE=M&x!w5DP^0}SiwayN$Gq{0-H&QrOJMZW)fiqUdcnAwIk3o$ z=h+$h+UDA@`R3nCP5i3^I<4j9zUwj$$9tTLe=!=E4!p-2_-$QJ)fa(#v7hS(tp_p| z*wiiJy2@u*cNg{c*4&>eQGaVKZl89)iSIgbz6N^0Sbje^Hr8&u&D@^id2{@|;JmJI zEauD9D|JrfbDQTpA8`R!^@KV>yRWDdT;&73>Kg35*w+VWh<&8~4fyx(R41sHa@>!Y z#Q?fv!kk@c;(2?s-%ufT>HY#^FwQS5nHxo4D>)8o-oySy#FVSl|8%p*wvBke7;^aS zwR5PsKL@)_jt`$d^ZOF`FP*giqdMRK>I3k9sZMS?0Rh~b=6boTS*OV#}IWF=wD-S#SGSY=;B4W)_Q0?`Fwmo6~hP2IP3qQ<^+PSN;Rvj(qKEh!>Hx)KpO0hpK=6V%)+ew&Nc@X^egBMq@_yOJKnDa55%Y?Vv%azx z5Z&e;g7Mh?Nf#JTgioN){2%?E^u^pW9X*K5dlWW+{e1M+Xkcg50iDbcu&%eO?>y>s z*oS9rZ_e?9DQteo=#CM35$gM&ivI!P0|Oc3rOHUge|MeOJv_k2e+&O@a18y1>^tNY zUqZgYaXdGM7~|;wLCi(8N?f10zV;sG-U}jdkgGke3-ZZy7xkK_Z;R)PurBH zUb;7(e>uI*hyx7I+=wqI{;0iXw&Q8$*YMr7-^SU;kYlq~yFJ?m*>BNLzosfZ8}qzq z>a?BDbYgB4wW@hW9eMxQpJp#f^MzIR+}Ebi!;O8U^{HT+m{*mxf{!96&LZZ)e+6k! zFWfH|#z(fktwJtM{I}-Q{}%oO=ef2o>w$s~#Cccsgs;z>A^Yj-0QHZtH$IcKRa))- zsmGxsg71e85dWc5LSIyg*H_IO>aSzZvowA88s~kkj_xk-75+UdSQY!?yFos`A&+m0 zc|B`-d|c=Gniy~Le!0I`ZMn#CR;)SC2Dn__>!9`3y|bwO49 z)E;U9d-~}uzzl-6E^2zH^BaTDZ~U*||8fESfv?NB&Oxp(IJGn)=}sJ#mBJ*HyGRG38RQfo(6wet(^z!VfzF7QR5@$Uv>O< z*nj*2?EmUx^x&no|Kc6YuA|?z{WCA7cizR@?YUvE9D8JZm%cgQVZY9E?AIapzxKg& z#!}{;&!;wE9=+>lVNYh>l%~z!pQc?x9~9yNgE>NHu<(u;NN_nF?jRvW6=Sf z`0{=D{rzWBFV8&4lJ&dbydB@&*_2VcnteIqab3pb*wa-e?pP%TVO~4;KlL|e9&LkM zL@)KB#=Z)?71;M!Y2Xw0=@lb{#$pxAm;H1s}?>KM8d>qI1WpeUapJ<2B z0qUUm{F6LH{;r(l0v^{CY<`V>FY#Q)y?h_s=WFuw#Wh|puZTEZ#OmtK|2%+KkPlzQ_j?fLeltBZnLTvj zjqJbQL_hoWucmX>yui#7`edwrf*x5<&|BjP_T5qsypq{Q3y-FO^LF3^fG_&0J5ynV znW@fN=!Bo!3uhFuxzX&q8P~UvSRKdI<=MlwjdOMPViW(9%UjRemS<8L!{xDcZTRHb zH#e?^AMdQY3i+)nzi$o9*T8#?JaE-K8MtuoK?!|BA=%Yb$hs zHM05va{VUHC)Zh0tmkiXe{mkir>-aMKRM7A{GY_V7!K?gzCqaYVx{IEJex06+*f12 z&@%OTKF&S_dBmbV2<}b&kaY%CuwBh|AD;~V?6K!+VBNKn`9X26s&1e!sk6b0Iv(rk z^s&J>zJNAfTYmzt+Wi*%2et#}!2w!zK==mYUi^EF?-$p4Y#-zrIw%WvzlLuj&a<6w z;Q``4@&bN0@_geLasX=qtr;9oj$nj!2u?9L4Sqmxh%W?nJJ8nD-+70%_nBiNVwn}-m~dCj`O^Y|r5)(hk-$01|jC!_FH zzTKhDKxeTZY5l$S;{H=w1HRYa^XC&dUyX0S?l`{waeDFHMsJ>*>Cw0EALzmPlV;z1 z`fb7ci+LCH$J|IyJoeyDU-t_8@m{3&-80Bj?8|!sd5nE}%rsv2AT`1E(%4RJfc!MQ zlC0;g!pV)5+bd%nzWZ2k?;h2*-1~7suG{$*H9F(S(PbZ=z1Q8=^;64XZryqF?wQT; zG;F>7@a>ClPZ{@rRI&4}HCCn0exsW8U|_!r&Rz8r-Fs7TWbGx_HE}QY8|Vwg+F1Ke z6nkF^-(CN`lbk@uko(N|yPDW{Jr(~&Jh0FYt@tmWg8y&k0Ajki&nL(C?fKE{{nK2n zC&;}(><7}69`*{@GepV#1HgL)e((GcaTNB{wZd~{bcWa~H*IyRJ+8ye-E)`m&c2@9 zi-a}veQ^qgD@c#hV%tLxh;^?~;+%1Tj`8Fx_`IgW7WY=ZgD&dS*B14OSyQRVQy{ zpRXFdf*SY(L-h6NBVOe^V)p>L|IhmWHZWHr)^3ho?2j!G4`?4wqucS}bA13f^*nqa zW1g7bxSSh^96@s>4mef;@7b>q_h5IF?+5-fug9j3M)U_p;alWKY>%sshsfOA%}riv>cYuHF6*j+z@3eEoJ!$4*smTEQqv_)^7OcB3Yb<)e{psJPZpU-ZhP3CD z{brm?Zw;%s7yqRkzXhB4@ICyN6>a_ryr0Cr`0ph*>AW`kF}r$h(3uU`1M^=wAKt`& zVBfWum_haxu@mY6#oBpe$6~(~|Kj^p{Hqg!AGG5CRQn(JcRk4g3jBu-=s^dZ=>65i ze;4t;z`f5oH^9CjITlAet|I=#J`&h3R{UY`p$>3*+w+$QHO(HjG2(PNMOV%mPWe;>A?0XOuwZN>k9v;MSE+J13wZ$Iu?`vs2B z>!+VwRAUPD0@SVKy@A!~d5=%Gy?3hA41ihf?P*{?=LCom_;?gtU=%q6xqYr5V3psG zX0>K$6mnXY;<{1j3a>w{G{kw%Ved!5;lIuG-|85m9+_h>|E&&JYZK1q@0pYO=nH!K ztkr4G{2S7Ob%)cM8}3OPcRi7AI`m@Na^#h? zxQlul^+h+i_-^uZ*0_of@ne0f{&NF9*9)e@<~w^qd>6RqIUb)XePDlRIyS;tE$RjJ zfPP_92gv>HP3b*S+$Y)!u&Iwh{$38C4rs0Q349yl3tbRvaDyWLcar}b|MP$Fe+nJ& zP54&_6ny{d_CN4%Pp};40|zxQXxz@&eN|g6mj*v#z3{2^tBV+W)&V>x&cv#i47>(5 zPuO7Wur@w09oLKdPIQhE&-or6E9L>?J$W%onf)8ZfXFavwgEf>~*PpS^9#ZuC3EpoUsEPgjyQ%|-3HOn&cE(TU{~7o60fnn7 z_WyUDMuS*Xojg>HT(dl&%e*x`etPK3x9~PsO-64jmAf z_OB`(lQj?j9vKJtWh_Ng@N z1>Z+SEAxZ{Jg_1OF9fcMk(+ds^+c-Gy`KA#8Z^K<`yq_yaRmA5c+V_z{xXW0RI z_8zuJFFiXC(686?^z(4WhBGx55CfP`4DiD1n2~d}eevJG_R}}_O8R1Npl9xtFEYRM z>Ffi{KnI+?;(;{&;+s=-#!d9%VLuiaA0zhho$a|b&YDbkbl#7SJ?+BIcfzkb6tG{i zCWknAH+J7XvHJKY@D8uDKBc0c4yV(`YuAI{``F_K+^?|z+yh|!gdWhgb5A(GZ4kd; z7(Orp9|)ePe`sA$;6HSLYpxe^PYr*kHa#S8@7gM%BjUQ?|3!^%!D+s(1B!UQxDPSL z=lz{=Z){Inmvj5p_!RuN75_!e&dGXPF%}}8)dB9eao>#`Uwn(xz+7Nbj2Z_}^!1Gs zbZgsLPdou4U#HLF|K|Vc8Z|%S-|wN5 zUZW-EBd7!7I`>P<=k()p%)iO|{XG@+Kp(YgVqb~lUiknsw4$f~5ZqPW;Q0pm0d+%z z-oK4zPp~qzEA7+@jlt%-AFz#hfU!6C0Vvi6Yxk`c(6<-=r>QHD(Y(g}!=?H(dIQX+ zzt}=%_N+`Z=50!stk{(n!Q)q4eS2DuZNGNc)9L!X&!($)KAW!F_aeOhds(*L{94+6 z>)UDDQSAK9Z>4RwypwJ^R>-#F@22f{ypJCEFzvka2h{aa^M5ZhJJ11_-_E>UW^yc3 z4$;dK5&ui|0l@tU0so8l{C!%q^QURyHgf;;=DqN`A_nNJtC?3||LM&Y_@BA%8T#w8 z512UMnM?1bM)(l+-&t4o!(WH}#|I#e-a$=f8}ajY;^`$G+Y=|($+>?(0beERGrGWi zH@GkJ8&&wd>P=rh&s8%&L_A-=UyS!phtH#H0{ijUa|1Jo|A2F^RgZ|b?DwlX;QsyC z{_qpk0g7`T74H=>->L(=hs+`8S|R)qu^k*Buzxatcv2sDU9K^L_vadfCjUQ~mo)ZY z)b*I(E5yeIzb*XS0`ocNMZC*B3=oS3|eE^@2&uQfro)`bEI>0z(U|$|!9w2Ie z#J@3+cIG4o{wwU6uA(dLk5=?A;J1c5_WHYXKY5(F0s3Fu%MC(87dY$JSswl9f*Sec zy17EGb@pFBu>xxatWE8qcTiV@ISKgT?e_ek&&N3W0JsO(c)WJ~v=aV62m6ZQ37x&? zP*k-V|hC7vTM@(6Bd8^;@7`{!13Ys%9f+=q;1FEO;t4847`=#@b=^DU>|(RdA9sM zCHhw6$MnSMq~=EPTz;N9`7VAlXXo_r-Bv#cGbQ=$Ubn(D91=lxkm;GR3`r^UkkXHV0-A>>>))ROZyWm;e zhc6JdxMEmLx*xBo$%X%e^E$Qp70!2yck#=6_*&niz;nSLe0^XzbVIzS=hX*_=lmPO z{`($rzV$r<|LOq$-{AhP>b<~!@T2aDe3$Yg^g<0iko%VqKkce8$9swmShtiA3Ga{2*Q&!NxM4EDE8 z$6ud~pKx&+IcsS;bM6)C{6#mV#p@2>vmZ@suRESLY`H&Ox%s|y)z$}*N77Z>A4?m- z{na~=ozG;^2KfF>@chk3-(*DxVE?z=_DS(>p=On|vO&e~cG z{+I0dNm{ay5-=T|+&#MVeXws$8T*tP(~3T{^6H`nK?Hr$s8Ix5g0U>!E8r7Vm*&-?J6#p7$Ehxr+VF7tjOh0-w*K zpBFI>j*I`b_(JioB=*WznZ8Qbhco_em2Ae>XR37?Xom!)>`K8Zb)+$ z-bC(ge_FcnSXy!IooUr|cN3exKdsyH5b{V`i(Ikwv9v)uzx%0l&7Nn#`E%eMo4@C| zbPYcKHSqmw_P?C2J@DOh9kIO|j(jg|zU4J=5B~A>w}5+X{LZ`HPkSE#>yLktZhrbF z>DUWDPj|fht90KRze|t4_a|m<{|?(v4L?|4co1wi@xSySygv)}9{ax((e^LhhmOej z|A(}A=g$!4YN7)!r55nQ>zJc;H9dQ;ejDto1L*U&{snyhC$anYr@;$vVP6oo9~;!o z{aN(nMeoxaq>JC71jgIIMu+%EIy2_MJ^G;xHoMW$-C#oOSBT%#z+f-my`m3LLqEG3 z`)}y?BOceqKjN{{uRlNxpiaD?5Bw_){E=SxeI3qU1$!0rk~Kos3)xfJee&iS?3dxb zfSfDl?>JFI2w%v11^3=`v|KJ}VL+NE7 zfPMUWIc}g|iq9)PSIh?&2>h!b#CwSN_ni3eoM3DN{L2r_HClIIKN%h?b@YioPF4P) z@LU<6q6?qGndz>b#2CBA^If73D(D8+9_FYOeN|o2333U(cYj;!LW^Vd0rsDJtDk#I zy+4f27w<~OKQq3x|IY2w4{-ihpLOcw2#02DNE7F5qR#cEbis;!=@N483)kP0mT$T% zEkTxFcQ0~Zy8On6(i(8TX3L}LN^Jd=JD*DHwmp&7?|3|2z5D633H)!w*H^AN_(Hn= z=I^BIkAVB5`24qm`(tn5&%cxQ-1B}q@X!y_(I>x1$DjXMy63yUOb@;B+w{bT|C*ls z!C%rdKm3pM+^7GQUi|U@n_l|j|1g_}`JA^pYxkeQeleSKDL#Pyzp@nmzvLj;N0y-v zazF3A=mzF@EyV{|yc->`>+jOS?Vsm5fH~9w%m)9nn7c6(A7Gljd*|!(A4~Pw2Z;MI z=bHPii#T)#y1bM6vMzqV68LWi@7eZ)_Y(JhCpNbW%;$O(>T~i;Y;1Bx+iyNkJcIEX z*!HpFahz|!?R(|-T<2@D&QK4i7nA?@QmO%d?;*H@e6#U#; zJMb=6U6Hcb|G$XW=wDc$5IM@IQSzLhmuFz9Z^S=hyt9+q!%qC5%!&A}vOeT{(;mvZ z12bW3zqXmBv4^@1 z;shKw&ZYmVGGi~_8Jv#SRnEjG;5f@!?(eskhkd@(1;!qVyn(n6@$c4OkYk*RfB&~G z^M&+2E~5ux22y_PEHutrhv0sro=HW0lQ~Y$cXNH$2>q3s(hc5?ndDgsaDZ+&fpZng zo<}ECCUK8&zq#ka-&V=~AisxkVe>;dH`K(w++T6F--KDji<$G~+`m5Z1byca517Fm zuvwefcX&PXJ-4RwmLEtLuQ{3)ZaAJ+g8Ajw-kVn5@IYF1i z{QLhaJ^kUI(la0ZB|ZP6zor*H{g3oK^4uqXMg9Zq|0nWaocmAa@-dtD=x@_9eg2!B z(+T%K%zoY`{<97s_MiO$bis0B0?YQZ!UL8Q6I^b7kXYbCe1Lhx0q0)x0d)ZM`2_#x zFb8+i!iTB%J4S!+gQ<&qpqqQ36E0eUW0tTrV!s={Rw6#r!FQi+zxdZDkn6+ADqz2g zzmV%xt<^PVe+qsx);TBE6(9GXi;q8(cmNW5!so=g=X~B{uZ`;mXK`;Mp7+|Sx z4`|{w*A>ADyf?&hU_Fkl<8RI5=e#8PA=dEo1N+7w6(5J5u}?+r3(~~D`XHZc`b1d= z@O^a${+m2n47G}Q3LEQrxw-xFYy1WkY<7s45B$59vHw-pUa&0w#eFY2Al8ODfq6*- z=z*cR^nBu2y-?)>DgBKC*ieewqP2=&T6@I|cUjlZoG|DN;jRxjk(0P#X` z-!&f0$_3N~&BvbeIBFY1ANbg7L-KXtyzDFz{Q$nVllWH$6k-pSsQ(WC%T+$mz`mFp z>c{UKL>C19hq3LpJ1746h0I@{yZ-0xynVaZceqB0a-j+0H8Th~A*0gBT-QfPg z0{h^9jo9Cc-3RYifqg~XU%UVL6L{Zp`|BC&N1ymK-TvHH>E7@DJU#UKuhV1i{4PE5 z-oJqNe@)N-@UQ7RpZ!;Q30%MMBk=z5zoP^GEj^v>{=Z}Y{}mqa=k(Oa|CV{clOO$i zfp@U44p3HjEdHC4^8ok;E6@jp{3fkH2dqFBtS~o-Pq1Pi^#SOB`NRUxzwTq^^XLP- zmGM7*!9%I<{M%EN89!BQMFrld4(L%2r~}|?1@@hfOMfLA4)^M-n7-? zH!$qEcpT?khi20oZVr1>!L%3;o*=f>3BJzfyw2me-q(iCkPiet#eU#F?8Dc6^rC)8 zU6AekDY*Au3JLrhn`nLi&;i=~R{O6GD2sV*Ki|{W?El}uznK3T55WFwhsB~IKGgx* z`VjHor4Im>i*s;Y8C@CyvbCj~_xTfzQu8AnSkv=VCoX{EPe0T|N5#r{F*AyYrC6wvR({U1AgezAmoq z)(;>iAnvQw1c>=g=BO(k+sm*)U4gyM^4>tWX7GU4wGUlA(DVfg9Z)Bl~G{phdY zADko4`~b{1<*5(;lAd}W-v8d8)8p^|DLwrCKct7=`9pf-`+wy4U($nb{jY5Iwf&0N zUvYCGfq&OkoNJZKea!il=!BK%f|cY7j14X%CU^v$Zi z_>J>JvkQEO9>{hb%!zMb@A;9r*eG;>x*%Q~*J=L)_hMG@e$YQW75icLTd^N_Z@q`~ z`Ne(2C0%`AKPR|VS#dju04tv>Z`@b3c`rzT8o8vQ|XT6X7JY*+$ zXU^#v{7$Fit4$`pKZVy#LuZ_e4={ZnecSiZ&t(rf0B(Qoe!j&F?XF712J&M$0RP|L!hi4q?Y-A1t^D8f!38>*pWZP* zE@=?G3OA^5ZMXV^^F18fuiU<+#a=LCgYZsuL9r*Kh|f5$IPiZ`2b{!zp#ylYW}VO= zIf3EX*QZGrZcXPdJDlcixGOEZ{-Lx4++U8pzgkXz8+`umchk*}W80tqX}ag-U!+Ig z!e@W?58(Gt*z&(-oWCe{N5uTg@b`H9%*TICkG%WGbpM;bOZVdIKLoBHeftmTVb+J= z{5}5v@6!FR{xh+FU#B}?`b9ea!Y^3=F^l|PSxNqHA}hMa==z`xiJQ3oh;frY!Q z2V{=`vB3FTKBW%u%`|z@6WIPcQ{~(vseAeX?EWtDeog)lzwE$I>p*X}aP^I*I=wdN>TtCjQjq?&4bvi&sVLd(PwF@IH=nVtf)aMien0x*}}8 z=RA)0_r2u{v6mpQ?;4m6{I}YBpYyzHU|zgu%&Rv%rUtdv#DC}j-#6@i@cpQB3Y}2K zFY0OTYpal>C}Xq4OK|4EytXus#gQDq$MXMvV|PuvFGugwjw52UAN$^Sj(u{l)!@8# z)~>7z)B_$X8UNGwGH(eTa5giS&;bMJc3;x~_u@Yb`lG_@de9v;ux=b6ctJ0Z%|XZo z!tVQbdhGvGpViu`&749cg@Ah$jniC%2_iNPw=7b|IXl|gNxfI3&hR(e%O*nr` znz`a=T5{uKY0cgj(z*jLr7d9o2!8v~XTM5!zxt2qvG@O&o`j!2`@?_7XaC>n#n155 zSzlt6)9cGW$8(Cl{gWU3DLwukw*2jXN%w&7+h6=ex{dh$o!|LYy8C6Z4#vUy@#lY@ zZhQ9ci4puP-TcH?>G0#qPm!Ob)wiJ_C>D z1H^dXJoG`}J@bPm<^%h!YmV{zzD)`HA9h|n;AgpyQ7O0pu?FrxYy5J*F78S9#Rgvv z&Mbxk@2-J=v2Q=U0eWf>>ji{E}Q-2neJa9s!Eeb{?#eGOd836#1z zfNSgL?BjP*Czu<61Dt!1*TM~^?I9kIe=vpjZsOmypZ6U=zw}}Qs`?4~6yU$+-URcL z9GipaA)Z&BY>eL+1T}&jcUw2y+@FK^gw}><;aKb!_%}D;^Y{VifC1Ja;{)eyOS4xUOY8R& zwvY%4|Co+F_YYab_JK!#oH2gn$)6PK<6ox3kA0E$Km0lQ z{x8#kM?Ocs;P|U_@R6_J`}q8b*jEQ!j;ua{+{`h!R|5a5@ekG<#XlfVXieZ!{C;Qq zE!p$SZ2!-{{u63|n9IBFRr37s{+YMn?;m2X-~QCW{UH9^r)()?5_O;8zr=6b#c$B5 zjz;%Z!M$@j^UG6_P^ANug`T`x$!|&Za*;?Ff)jMBE*P#OrKJi7`@xVvv$g@99x1tM_J72+e zzxtbW&+G7Ybc6W5^EFI&f|LgfeGjD%F@dH^%nyB>H?3WZZK+#wB^C`g9BJE z_)YkCf6_OJm=940wBldfhpvg3K!JbakH$pg0N_9G<->l8f5kc+*H#Xo9*7V3z?|#l!?9GmJ?$V=a(Y24J4g0>EHXL|4 zT|phsHn_m<2R=^wANe#L2G2*H`YIh2->ioo2d|HQn)W{Qqmx4Ip7ncsdCk82KPKl7 z-kV}g|8``@T_2^LcYmCA-iJOw7woy8_jusPte<5aApR9?zt~?&9B=XdUs3A=mq*O; zxytL8a=xem`~~YTi2MICtzcb_SR3qKz>9DAoO=KFnBV6Npu6bxc{FqW&NFwVPISIf z#>RBRHM`LHU3}N(|FruB_PGzpOUwT&_N73_=DF_1{owCIU^qmq7dD(Z@ZZ1z!WYoy z%k=~E;y-l4MCKDrynz1l*#3z5xhfG47>|A!HXdjU0Ue;I2XZ~3_(#86pHtN7;PYd@ zt=n;i`qGKg?M}t`|1Gk-)if%_XX!K>IAyUCuClLZnQsN_5r|ueOeJS z3;f%oNBf_B0cxz&1BEUy?{18r=k>XX`)T*J|6*TUi~oY-!|BDg_PmMb2KHTi_hR#_ z{HEf+fo|xVhVDRmUD5UZ=Zb&gygaU+g-qqWkY0E~_4Fbhpf6C78%)x+qxIOrK*piPr>J^cY68E z20EvY?QN`m zqW>T=GJ6a6egA9J_&q?6&tq_Zef~Y*erGD3Y2F{-@of69<8K=K@8Uk}<~J$x8&|w9 z$qQHYRlR5FL(!mDQ=k1F>Eo^p(6eoj{%z`j@nBwTE1?HmLoc-Igzyd20qO#IL4F+=)SQEF%G zMh}AXGu=0Mi0|((zact+$F(!|f*JHf#y_?{+kgE6u`dqcePB@hcTPYLs-M7|eFfEN z`ZJyQ{@Q-ycH&+;?qiR|d12R!m|tMu^VSW=`&4tSLBS_-OhMZ-fosqK`W^k~L-UmC zNaG|CH&J&Q6SOa?J;aLr1-vgDtYQ5qcB&t74}tqQqE}?#KkR?TKRjRvnMx1LX$uae zxhsyPC2)Z?+n!4s_Pm@n9e936-6dj2iP-$PHZe>a4^ zd|QuyKur)j0UaRjw}StzcYKt#-}S?^^PW%8BcEp6@4oM|vb6mA87MiWr?=F ziTiB(IbMcNDD1!We?{zXx%{7;|AOsbrFl1elIE;`E1kLIxzvyCug$zU)v+5@VnStn zNaOxJIZjMW$Q-eL9(XV7cOm(Hn_jUh)nNaxu+JAijIY7h!!uPjs(EWt+{ULO~pg9K5nG*nua&dXNwmZ0itBeQ)2#er0)&A9kmg`>t<#;pcn5dart)yIN0E z=muk_Tw{G5_&46~cisce#D6z&xGMTt{EKPvuZ@?#EAoFuE^lm4|K4k=`1cL)JwSY? zm-tQ{siFsJXA=9v->V^YbVD!LZ=5ApfM4()ReZmm$#A`i_e~mt zLl4ArvBvYhU#|0O@_+S!y2kg+dPTlTOeF8~aXrVlc~MiF@egji-{sKxxpT<7<=!4e z9ltrgUTqz}g|@#89?Per6R^v!+WtD+UAy0-&E~ia*2RBC%x4`y{}woX&m`XG46v@9 zKhu~%;Tv>M;XREN8b3r=)a4R6C+PegaaY9mBgU_fukBYdCb9YYFG}7U+>F`l1B88V z<^OR`n{Taeeoh|%o={-Exn~HQFaG^Ju z{p~+M7kr2gP#65LiTfY3g8REa!zbVv*>&$1_yu1U{2y#*9Y7p^$=+g*PhL4*rtBB@ z=!f0z`=bZYE_#3LwC4XS_WsiQn|(hsRy~u(&(rp6_xEDo!9Vt;lkd5cm|qulAl-b2 zW$sIDf8}iKlY7aLyoZeYw8p)h=eofEYt&(c=nKgGN9^C8rHJQ?dF}rA9M6{<6cTzM zVuj*8bV0-dhvyV^1jhYCA_k}q7*LuvUtEiCu_`_T-(p!z`Z#bL*Ts2XD`)WeI2YHp zu0D6F{SW^?$Nie0EAESZi^ll*j?kOI{l$y+QptG$o@>Al`uUCr$ou8}JLLHz_GdkB zgWSD7zxdC*A0NFu1$_;kYuI$x@>F93tP~-@$8>$%V z)8|ufL=Lc73zYX7fI)e`Hebw(eK~;Q-|zpT9xGwX+nV`$ZM$_k;yeq-Ve@@l1>0rc z52>JI#JBJ5=P1S+j5*3b6zdbsLwamo!i3qxFa1u?1;!vF2T{ZZx!%|W@0nu&@&NrS zFrV>{9vC!F4KHvedfwBGKbU($@Z0761Ka~y51<3|116leJ)N`gP}TwZ0n2ZABCXo| zOx6MFfi>HnPiuF+n00{omjhf+PY-p#NkJFf`ab)B;054b5&v6mHxBS4aF5N;xc?m6 z{{^`J5?|mee1I>B4St#Q{oU7R3_m2-@??y&$DeiSZZS`8fBVm}6vtoX-XDv%eV#78 z?)`N3^2gKgMYpF0-(f#>o&&SEPi9~v_#Qj?jytEo<@o*r|LOqo-_IQPer7WCG2^+9 z8P2)J&lwM3UXcr^6EX*Y|2qRpdjy8$UpAVE4`UM~vS!YKO#s z@ct7qzb2;-oQ4k&*cH#AD?%suSn;_yr;Z3c5xOMa!}k>T5&sLm;Pbvl+uz4`($6aY zj~e=_dwQDq*JkG4d&I44*eUVfz^9dKY4^o_7UDDJ?T!6aiT%~!=sl;y-6n0P*UC10 zgF+9e1M1*kIjIB4^PP3D!2i_Z`K&*P4OGbM`#IuYU10r>`9Jp*s+=DEl6?uz1^&Cq zHyd{l^Gbn#V-eJrP|rM`8sR_0~iM| zHkjwD5erZULUhhk4a?&KVZs*yVJ}ix1@{L-J34k@L*bU&12LAKbvLc zjZdc)=!3O8@e2;T1_yW(4)AvN18%tGU37pv;JtL?Ey}wY`zP)H#~J@w2Y`P$|IT|q z2ls{D-^scY`)_P-0T`dZgTB5Y+kcua-Nv5Yrp({U{(kKIyv<*vOSang|4U|le3CA` z@rUV>>px7h*L^pgzTg4+dK_WqFZUAszF`jtdPUTzHOoFfx>n39nftSEyoNOB1(2~1 z{`;93sLwC&m+x!yLwv0NKZ1>)h|O>H|HXdr0PTC&`p^-c3;hr}VFEo!BmN(J-&#L; zf36wC2RPODZ^f*54DRo7E4Bmco(t^9HNHpah}P?TUab3`>VUBMp7*+pee_dsf9Lbn z@ISTx5&IYa(Thv`w^8TrzUscrvH1SczZsX{zee2Ox;<-m&F@v=>GJ&^Y`nN{pFoaw z(vH+Qc_;6|Zz#sk)Ssu$AI|UN8u*t3lqaL-)fM^)@Cf;T54rs+9Kcwi`TuTX{aFVP zgToe7<%8mXL|@(7K6DoNFMvfF#gY#UcYs?Sn^}>OM(1jz^F$OQNKB4yv@&f3yz`r`cIcLriu;-BR zz(R}*Sbv1=N1`sIwFV@PvkoA)Ee9B(Hr;sO>}9v5i`Lwo7Hxba>wu-#KAskDdNeJ$ z?#Z-nCw{=5@1;!#i2)pamwmt3e=x7z-+bE#g$_U$Y(4%Vy*`Nl$^Gxr_Wuwc;78f- z-$4v;XEW}%^8vU3vg^Sw(q%h;mM#J3^R|F-usv_f7tHdYhX1C|$>}3EGT(=NeHS4Y zWce&zK&<})_W4|R?fdlh`Cgj3_%ZhP9;eQ4AN%^@{n(i@@u&)X-qrm+Wh8iiRqTWN zUa^mF+6V6I+ImDgFaBK>Isb(7_hsMTWAQKcBbO(}#rMeEA}83Y2Z95He(-gZFWi@P z#qjJR?icZY?Y?>-_Wru&UIF<35&IK|A!1vsDy9x#GF5ANi0SvAOTHhz zFaE38c`+~kJ0@<=YZtzL&lKW&U|&5@1^?wN=nJ0f=2~&zMPARkAFvP%v1-4tI#N#qNK)h!jz-k?TJQn|*=neCE;=cms z&F_hM{fpohrSazR(ShLI8ic4rP!}lu@StJzp|wff6a5?UNznn~KkESQ?TmlpDd^Ne zV=KmA^uhS9d*NH^fb0Wc>#g}1pwEP2KWXuAow%#^-&mkBVea-cec{dN{8e|P3ogGi zU2?^JY2Mm<^1AGXr_&X?UrFnctM|X2u08yAmR22bJw3jZEw|I#6CJPxG4^lF&)DA{ zV*NYG`Rz95PtI?TwL*{mG#z-Nu=(O%tg8dG@nS#YA3Y%c=iT%pp8JehUq5c@0Oo#S z`{!Q$cAC2E=`?cjz3~29sP)0`$B(MxYgULk_psl*hq!YYU%w~fe(=zm_UK&poHT9! z05ci;zc-Y3;PeB<(@NMUc|Ty?2G@Zc@?;68L1Gr*4OG|zh5u$ zznZ_1^*-2t^L)nkda2=QP^T^SmD;oea0z;~OokIorJiTXo^0pKJg%IMjzAA|<0}{& zkS}!NGjvWO?nk{(#du=Y0sQvpk?x7af5bm}pmTz;fAPX~)Pi=7Z|3%!*l!!yaH2-v zTKzU~?keuxw^LF-c&?vb2u%)<_w?|3^+<34^?<&G*bnKNV2;qw}@na-;;jsaczJ20)6NKeSks-*e`^dK<*v&fVE<= zM@0N*odEXjKN~s0voAZ8&bstKI(P9=a)Y<0`RgA@;(yKdm(qs4uV(u%{>8pLK>L3a zeSD1x++d$SYXI(o_ge>Ww>5x8-rqXkL)81<{M65=HT-$H<$3A}zw;Yv4S&lFpP$0% z3;VC_zj!n8JO!*@yjl5-eZ8OI_kWIjnfLcyviVc$eLhUH;Qf>4KbQv3Kb8jI{x!IN zjr*%ge7VT+aUT$4w&te{@2`XHUVQupSZrYPdwHzwAB5K{{nYmLTib{9f#U&d`8ggI z>%{seFhg`0J3lZ>en5RcIs7RXA3#6wdd~IDz}G$3dLj1;ZNt{19}r`GKJR(2@wM9e ze)yL@fU*D30pxm~Yi5p?mtU8G(OufK_Zw4|(aV1JnbE*tZ9l`)m8quliSYbZ#9#tU+8> zzF&i<)miKC-5%_J4}O0cyI&!WUq9y{J`e)W?*ZG!1B~s}iT8=+&I#M`%Z=ls2jmLG z23*Tinmzi3aIx$M?7|Eh;F{#R~( zE?u?HT;QAOTK#{xe)j!|`)lhJ?f&ljsqv*2_#pNEH$VN;bj!0pOSeA%^K|T`U!^-< z`Axd()!(wufPKH;|8sie{eNel!GD15uhOOX^OuPIn|{nJk58NO2`jSsM?C*&)&ZAp z{fx)>{WpD_&cFK2G;P@v^zyzl4W4&24WD<2dyCvLHpU#EaX)oHnbmrqGWTTFSf2ZN z@bMeQ_^j>0#w!i=0+{cgc~S=9=tJz^5%VMG5!*Lr2i8Z3+YOq#!+wvqeisZEtJf7V zJ!AS)=Iu*UFHt`fwLXDsu`d3N_j#RIkGx;x0oga9Qc%Rs=@Vs&V z?#aXiu;;FxQ}q42xklTs-K$1gn)QCran5YvE-C$j4&IhOiu`WxW*H(}?uVdr;P^9$zp;>RC&_$%-Z)?Z}5z$^ch?qiS8gKz&aJp|St zeed7X;~)K3dh`eXnV$OO|73ae2mh5GeD|-!@a^AA3?H9<9zOl4;#{8#Z~Os#|0C9q z@cZ9S7hU%r^E_Ti!wfzHd^a1?%L2SM{K-(XfcU1={;(r3Q6T{kQaO@hoU?Tf@)CGZaxxD_p zdwkRdu8KB4?0&ZM=m4*6)dM*W06xWP;9J~>4zPy9*o~{aARc>8y%2K+T3;{r1OHXt zyRiFW-&)_I-d7zU{-fp~u&-ZH#QxD+C-DDu?5hj9>7$fm|JJ*}`^Ent`Ix~uhxtwq z^PSs+0UuXAK%Gy88XfUpf%A*~;Phf&yqoV6>q-?q;CYWjC%9(Y&$%9WboWGYrauiI zfMbh&CEI`S-!%a}(6q_+80^MQw}XFezxW^1pdb7IHlCP&=KI;Uvu79Vw~PJ$wcsA? z_wu-bo)G`=hXVih^dUDO_Td#peW8CtA^P*Jx;IO^!0JZ_ZiFF<8y?VKRMI6`_u6G%=YHE zk3LW4{rcEr+Cc0PY29xXUnydIV!r}ck`L(j4_nuRe?O7>{E5Wp#JRRVq`j} z821~%_7BVk|I}pn&agfM9gy)4=9~DhTE~me-vzHX=9lYvz`A%3%(o4jzhfVVTwi?v z?~lixEAWqBjm=jF1onNbF3|q#1L%im9f0l6d;754`u$>mbYm^}XU@wIwq2f|@sGdH zxh#Dr@!!_Oe<$|8E8G17`vw2kmKSmUi1n!l)IZ^abfPO1XB?oxjtuPwBu@KTli8`E5G(gS7t0`)SqQx6`UUZ>Qxu-^{XN*IQ}Dt~b*H zVtw;7_J0KaiSu3aak>EfpRZi=A?pY9^P-L)c3F8ih+9&7v6 z0mcKXeD4kX{{GDU*_%(TZq>SceEiyUa(5hy|197+ka(9Ab3he{}EKG^&>wP-#!4}$L@Q+t+6_dtFyxYGyc^N8UH73e-H03*6l%5>^IgQF&;rJ8u5qHh+^)M z*x-M|KfIK9zuY9p5U4dUhad;YH4A*V&RmX}E6!K77o)RSd+5n#kM@Z17d*eP`~7gb zKH^B(?prs8eo+6{wJV5vKp#N-n-9?bFW5xy{{wHNy>R>8*!vsq{5ais_m9$z_kNc4 zKK}D`_}O2l9S{8^ZM^k^wC>_r8{0rD|Ww~ z)*k#YU2*sa>FQg4ls4V=8L!jkGrRBF0{0hz`3p9F2>#zs=Wl!u>?_|V&i`gQkAB|g zU-eo#Z#_Nz*F2XdUVK-MAN5l+A@8pn4iAgE{`bM<_2b2}BCl7(z7p6M z|Dh*x%^$Dvb@~Fm#M%a$c3o_@`T$|SJr}k=@b0y($JuA#cXghaqOSM%uJPL|Rs8=- z)Bi8xfkj<`_?H7jywS({{DFUc&A`7s(n1GxuvbPMkoN(D|0*$k{2qM$s=mFr*1jWRJuq%PkeGM%d_4A?93b>Sw*O#Vt}p)e0mQw>O2$7N zAb59<&w(xLb`fH)Nn*d-+CuWFO0G+y zS8x}7L`%%9(e8_Vdj{M0wcC1aR)5=G`hWOa2fpLjwXXixzifFv`U`vioH3tXp;z9Y zt^m(h9eyh<+Wc&~lw82#9R;?R?|KcJ{zh5^#xK3$xwLT0OKI88SJJ9|ujlit_Pv$X z9C$aaJM=+XfAbI0#@jwg*B<{YU3bUl>6+WY{%xP42f#iYe;#u(tE!_E)O?XmmfzZLgi_x%eUpshchxSssKAH0fpbwTg~F)yAKaWBSQ z#kS|P@u$WF^bO*=jDPe>!M#t$@x;BqnejSxxA+(D!Tsg^{&s=?6FdRj=lvh7>Ur-C zF)#KNA4eU5I9L2^@gIIbkuNNCfIfh_z*v)WFblt*{sGjXY5R=y@YoZ=df5Cme z@_b``uG;_D_v>TpfUOJA{;LCw{kyj}@9ihPuZs=RNoq72*#yV*KXwGyaKhivM0~llW}yzSwUcf-7PB^+m+LygzKb zJl|Mgu1B`sNG`?q>6&XR=@r^B!sidumkHbN-XCLp#`wFP^T@m^e_wyskkA1>j^8}T zgVY6_Qy+M5bf?{Qb1<=J(QuqaS75i}!18|0G?1=a17h$39K#4}aM71>Q*W@aN}k zd?Q^9)-S#G^)w%>U$XI~H1Dcs(}h<)ndYv0G@Z5d?lg75?P)x7`z9ijE;0I{6L?01><4wTVr*eK~-(U;JzPbKVX7i$UXZIrdKMuZ(TYb-dWq_Q7=-|D$`E z16^O4#`VGlSjU2W@h=BxZ{Qn5{I7|B`M>xt`o(pvXa* zkFX{Xztng?9ADha1FRVsXWoIjq`-czN1i}E@^FFu_F-mGkKns8lSP~Ftjcc0nNJmb zxWKx_f`$ut1En*a{$~YgZP^x>@#gOm$9pv`-}O4W;El9;|66eVx3T@`gd-oOE06vlU3K*1 ztPjNg+5_*U)qB66R_%T#U5s6ychz^&h3lV9b5}o>W-Psj&pish(VJkv8GG$h_8r3cel3vT9bK9qHWdO=$rF~9KfwfW*++a5lE ztGvK-{;xhC{69bDytZ9GKwB=>)dvy7S1*KqP&ar!_Y zpfTfCzQbdz^k;Vk5_5r}Y__qdMo10^6_Ugf3ah6#JcpBSSi4U-hx%SJzK3t&2Y-oIfu>ZmTwg2V@ z&HHEjPtLCgy;C*+2+ngoAAe8a-@nUq=KrieihTg`5N&_2`&65?!d=8A#eEy^E#}3) zdy+b+L2hH7P}`8b8Q>sD7d}9@ydT?N8fIQCl63%nfUzCtMfp2>EcUy=zKc_p{gTX|Vo1{P{Q2!p*P1-JegFB8zT( zIW6Cg4%qoBI^gxJ1J)eS=l_0MbMU>icHevHiUaSb^#}0>4lwugz(@2R`Y>I%?!GjA z$*o`s`*|+*nVGs>Q<%Lw3GOwrG>sWrl-kEH!44o3S8&geqr6Bzo1D3O=%}^pvu+36 zEAjyGuM{;s=Jw%YT+_?Uy*hq%6!FSJO{d;rea6dnT z*VNzu*4bHC*Wi7l7pO5f?Q+IGx%UG9=qhWJ;nAH#aC_#zkF76BqpOR+J}Y`)Tw_I+ zc6|bPfcC%CtpDjGcWBwZN3HtQ6uLGo|O^*+@7 z5v?IAf&WhG2dn7Py7(vN*U9{_cIF3&`_2)tFW-mjXWoz9_wQHK0cHC(i2F&# z1LOnf0i@U$Ol$z`=UH-a0pq zQxC`iwEa1cz~9=(Ooyn|3I5;8`@`nT6VwChfd9q;_#ZR3GgjdL&+o0?5Bz68fOv4$ z0py0v8JRE2IiqF`Y2Gu&-{t*LI|JL1IRM-V|4QB;{j#0km+hDLE^+K$>U?|H+h>hm z75vw!^Y0CtTMZxc1+rVrwXW918z+TL{sjyYtzta}qn$E-iUwGvs>4FW9 zq>HY444?fObOCWcxc@SB!1mYEiXG^IU2nqe!9Owo)qCEd-}pNj`)l@mKd)Epe-AzI z0p~xU_Ink-@ltTVl>25m>oTyv6kWI&j&oTWJ9sg1kjpr?n0+A2z%f0|E(CjXt-mWo z+Z{dna{VrNceQTU{W{k07Il5@Ljn8ff!-#@3Y~zxgolggz`wY+wpUxOgr6_Y#k&$Y zK+k!-zQE+>dM11zYJGwOh;Kz-z;o6Hst3F-?0)zN?g5DSpSX?~pR2sz_+N;R1M^-R z*Jqso-qr2Sj#LLI;=k1g$oGIeh&oZl9Fg_mVm|hcWG>K*1DN}-!};C+S2q?22Z;SY zG0&@n9V-#LE^~id-=BMUpabgU0UGFlD!4C^!|O%|RN?=%EY$jdoi6I+y0MXBzZ=}f zzMi5_2zcijIYA%wgW7!kd_~`1%!S<*dp;Kbt|#;G*5jF@Ge%%tu6ujI6ZkLnVehM# zrP1a2X-s8N8ilkqmV@=nk=5t`xG8l3T|>lSvHRV|@WH9My5jw;KSbB?d5Zc;>}l_FXs>3=eVN2KRramzqoH7!so!>FJb#T{d>WG=KiduQ}Evd z|JT-w|IXpn%p5Bos{=gFx}e1u%rOEU*U1^wrV$HdrgcAa1;vE-`I!rj&_Dd{G#4E( zckKh|{Pm9zyL&P%xc>RH_@?is#W#L8`vCd@OYjSpZN(QrC#>9#J|O2W_D{+?=!v({ z8E=7U?fQaj-@7I*fj=%p7Jzqb{`mRW|9L!~&u_jI9(g(ZUi(k1{d|O;=EKA(2IRrk z)*}u3>^G15XAy%zH(0OVTDNPwK5(x-2-~j?kORo+{h!6Sn3mfsnb(U~?04Z46kNdT zJlDz<#I*KZjBD@3d#fH0@54>~<*E!?&lkt?fTlgy=E~>g`{Q{&YJbFe!~i_b+)a#Y z=g||2$C2}k7_e)^gTnt4^EoFB{;d}i?_%FIYQ|zufN=n8%Bm|Nht2LJCe}keOch?=OMlJ=Tp-8$sp&7fkB7BR{I1~nTi|}+!M!@x%)+JJ z*HVij*<{UfC4D_$d>&n zSyq;iWEtgP`y8Kho$sGn=f2mjcPQrgyS^XRwf5e%ySlq-KhOKTVZAHxAJ=kU5N!ze zG;@zyP&?3$|J^o5yl{fp@-%kC=ZI&n%9?<2IACh)V`*mlnY3W{IXK{{wC1K4)0&$< zjvjb9tvL8%o>$%YN?Lv6$9V1IY38}N5F!fn|7@|yfw$HXq4nFGY>4yDQ}V&==i!E)wh=zO$5FaEIF zzEgY0aUS^5YWp_rAODB8U0dx4TkqV%eK7+6VdIVKd#wG}zYi@SFZe#bXXO5Z2gG^U z_(l%U);r{c3Vj!hvG!*jqu-(aAP!j{o)36zY!FPV^VRm^Tukf#J3NlzYw^0+moozY z=6L*mwf*uzBmO=L5$DZK6`Yw7}uw+zXN`-7vLQ9@hoa(t|3+~ z*5!fO#Lm6uxxRrqK>Hu~&$C(p?U3!RdZTWG&BGV?FMMw8b+i4sjJIFL|DM#;h5c_? zo35I-DqYpQ7W}WL-Uoe({m*eVba)#%!w&v0*Z8++_u&EOLQ@p}zrR0X5Pj&B0{_MV zT-)Q{U99)9uGhG~dA(Wg5f1L{BjO(8V!s{#-~B+c{YUrboF6`aGxlBV&n;`;(Imz$ z)Gu&=e`jm11K7|1hVL)FnX~4{{s#wmEe~EdCYb%eVdfEgz7iwA59ojcx>$drZPMnA ztYwYhrW0uz4p@v9&<|L8-E(Qdo=a(J=lL|V`y$6r=CN?k)8q}Gp+aq zL$4D%_!O}N#?7C?9&F+J1oPDm+0M@zSeNDu>hrJX^JENd;CtSJ&DeuoKM3ZD|AGJh zWng9*wKT*i#fmyW9`JANB97Qc?4o-C&n3s5_%izWVtim(5wG)q2^%hcV}#xj+uD3_ z?|q(&dC#5Y0d2ng;E)IWS+DtXLvTQ7eYwD4j4yP-=vv>$*n(?{j3_a0|mFm_AU{o-C7a3%iL0InCw z>j12s0RP7Sjs3X}#h$g|zmxUWZT4L-W+e~sEayJA;sd*D5B}_jGuw}|=;2FGk9zKY zZW&x*AMFJ$-mfB8t`-pgV*bO_&N$QnIX0MWeqsCV@h|3Ds^or|i+Ed+cT7a+yQarpzv4gg`m>1bH}T%~ z4{(I-xA(X8KC|n2zh-+gg59}gaF1=D$K2%c0RBm7_XjY48RK=Vi+zXJLnC->jL_Pl z91|Sj9yp)_4rs$4Xfrkdj{14tG7fmY<$y(KfE8$fMfd|VyU){u>s*>*jBj~7jcz)V zCdlQ@?7Wl~?0PCK1OMg<*4*+*`gOgQ?f?2iZ)W>HYj6#`zLvbkT5_JuXaIfwW;8(a z&?dg?ZRquV*z_B~FY6QV|HX=KKj7?zcGNU@9Ox^m`4l9 z3t1DO^VRy=d$mC0@S5WT_Fw&9xBss5cU_7-eyy`Eda0WG18-^ov~95-2E2d|ZJ#6e zy-};Xhllk+*y_1p-a5S^_QxJAoT~w}`*MJ~K>T}M9bj)SdwWKYKhImat`DxCZC@Sj zzQ^xlpZGdHdtRT$1XLzf1gKrS)!N2NXlgD58t|8vH4vn*(I0rESVgd6i zo6sS<(UsT1KevDxv8;~{{=rvZOnu_D3Tqdg<*QzDn4zn^CQh}};or+;4sjj6d)V>7 zvp*xA!}s?-U-M_o_30DH6QKuuZ?UeO*YEf53;XYN&vQ*6I;2W&brAjH-{#+`-S>E) zu48(@u6Wk2tNrx>JP#fa`!NblQ1}GF0eyZ3b^M$A3#>Z_{`Cbi{>kfIiGMYK<1!au z|BV4y17Q8X{r__O-{+H>Kl}W4u-<yLe|py%4{)8WF)lHadsyQ4c7jp& z;b=$4>#yq@i(mWni0`?~V%%8{a0D;>RS#=+;Q{$V{M*+*_xzC)7;210{Cl4BZTKPT z5q)jPY-fD>YpD61)lHtSgS=nsn)H`VE7M;v{<I>EtQwyLDQG;mv{ad=_BQT!_>v_XxnoAA;tTOA2ncJzIvd{1Pd;iGWXcX4> z74^RF<9`mElsSO886F6m9&vtWugP8NgTT78ugL-8zEKCX)!;a=-^!f*0QL~g_$MCN zi=EPL)mA^0pZ5jZsSn(DJ}upUDfU_ssW4x82{VEceNS2vWHy6L2!3FwFuya*q=6kz+60Q zcI~fW+^iSdUic}6))r@K7V#(U#I0BsyUuYe2V_oLPu_m*BUuZCU$15eo{$UtS>wSwo{^D=&Z_1ni?kg*dGol0VV+M$2_KehD%;lIK zv3Id77X$~$18M{3&;Z`!o*|(b^1a?;EC4+r-Wx~G4H#D-&lj=2Z0qZOfOX}Uc>w&o zw}|^t<~=~*fvEqT$NuT|0q$b`MJs)&W?|FjGIB2&3;XZ6_*Vm{MP`#{yT(3V z_}sHt+kZ8=y;k{(Fc~8ha4`MXaB=F6&WU%P;c#% z59}lspk6h0C3dXaS-ksfTD0dp{{H!F|J4AC_dZFU@cFdtz;nF*6#M`O)b;=Bn_kWK zU+g1AT?a4HUEW zg|0)X_Z?+!CTG~hb6L~?gLl`ZVe@-gkJStp%qD(a?4_YjC*S6P2h;-dtP#pSb5V=e zfi4#JYX2tke#ZLE|22yxv~=hKXR+>V9sSk4*hO?fz7EEV7$3NT3&gzmclO-4zc$)D zebm?KbI&S+f9(4;z2LulOZrgj+Vq!jz=zt119om?{oi)}UhFG=cPo78{^#oSV!aM= zXL@pV(`#5=uTNv`kMRe6fNtWMS@#p~u;+gpvHmXb-|HH6{3Yx9^4claQL=Wg=;`g} zMEswcMA!3KYthU+$DAMd&oO&yVYTb?%G!3d$$l`;y3O44pP!*#wzaB{uU`OnF}GvW z9dVyOGjCu|{d(jD`5)^)+rr#|ADZg~i38}H8e~3b;P~mw*)8jf!)A-!2@!EdK)but``=so3nNJGXru9bLNf)ocBx@xc>n5 z<$x>jFXoL2%L6SwH^vRXzr#3y^}_S;Lz{^eSpVBHqP?dVF3)q(SDm~ZIYIGnoW0dp zps_a3t!HshEo$$*<|yh0i1C4Uhqhl1(6)>1tntBco5$c^Jd69;=m6K#Wez|mX!`^E z-sdQ6zxg&}^9BCx`#X!i9md>eq3f?9mOhI-`K%H(e)#*^eCIi(o!DA12KHSe(aQcu z{;#dByC=4xO&9yov%84xkavtPS-@RE?wW>->>d>4TW`;ee|d5 zv8D=M&1?JcH>~fU2S>Fqw^^sn_adIfuS2Xi;@Wesi~E8H)c6O`1$>8fe&`0*@gBhy z-Y=IpT76%?cl93MeJl63ga6K48+cd7|H!&Wc;-*CPUs101JD4>;y-HvasvzY68j@B zuwehw?8{AV5bUqG`C}RXYls1^x%E@%RCG)QpTE2s9{~T~Sir#A^kK#|*8L1^<(a+~ zTXrk?^Lx<$V3U}+9H6}xmul*)_2B?{K>Ke^z1PI*saoO=B)mCI_ekin{uO1H^nI{^f-5 z4P5^-mwJ8I;=BIN9>sIW0nR42HX9zWMn1>au(jg88JjQ1ndfj%L%Ga89HC#d`{G|7 z5bI*zI$wR7E@B$Ko@0;b4)-3>{&%DQ-8(@ZEVREq6}%4iJ6KyWhkC?o$mv<%YmJ|^ z{bIiZ&E>v6;=SEa)~##zGH3Af?z`wdA=VCr_4T~g zAM%-)Q|%$Q+D!h{y;o;}`DSbU@zZCQ_V8U$(@Va#3mj_48*P5zx)IOsYkRrk!2gAR z@AW;Lz1Q&p{Il+^i8#Pqezr+2;CHqeJ4OS@0imxa$ptRn^#s2DIo1n<^*tAf30z|B zuDO5kFAoq45dUkz|GGoqAM88&rpQ;4=dPri_So0D;q^w}ztR3jt&n!ey~aDn zj7yr6P`85Hdk$*%u&h%yBQZ*nO_YLf0B65a;u_cNTVSF8yleVOt&kjB7Q_ ziMxKN39Q6u2Wu_p_NF=)ST~?QAf6p!O{_Qe*7H0@#y>dEm?R!=O;9K64|=FM?xXK` zFZ=GLPdmqDnyYil0XqWH-tT_<> z+J0jm)*HCTZ!bM+yXZ+@`2KPYaZ)}j_f_g74r`3>!{B`$pSSj2{*73lewlVYw7ka- zaV#fztbgC=8+aV}_jPT*qlg0*_*W~;!S|5^tRZl25%)E;5FF5CPEgLN#{sMhGGC<* zp4xmeEhYZ9l3IXO*ReL>+GmLWWAATxDRaPr-A@t=cs4DwKJX^$0&o2UYY0D+w%zx6 zIE{LLV*JMYXAe;G&zL<}*!;f5w}Hj`()5m#tU*4WM$y=g(EnmsdtP?!K6nky-Ut3Y zcE|<2aDs6HwSDM?I2YrN{9bFoA{efKM>)ngqrYnyn?8blufaXOF7`wJ>-UTQ@eS4p ze-ymS8~0~?H)?zFEav3~aqm42?+Hy1_CMx$wj zjSZ*`^58i9hpZv$dBDKB&zZw>xgeig7X((_W3m$t=rk8d%|NU6AK%}8Ao{U+J)k`) z8P*27|3M$?FMYGtV-B7WkKM%Mtq1O*?y$sK!~yn;>}Suo{zV_11fc-DYC1`-$%Y(W< zb12=@<(Y(dz5@0mBi`UW_lg?pO^_ws&4oUn=WCUihE=grgw$pLNFj1dbk zziuqsn!rUn&u09ux#4+Y|IbqI$NHcf$pK#f61lN^2k_w0qBqFA z8g-SU`_L3Of{zE_ku&rheKs9@_^ov4?3~Q;m@Y|d(NgIZ1XS}Q~&G#7x-si z4)7m(J^Sy*1i-ymmmkEp=W)$*b-n8Vto@I;zIjbC?)yhwv2}%Bn*`@m*}tb30&Afs z@Es<}{fqzk+fL+Jtx(h-6uy4g`$mm#93XUooDhD$bNB)3e{%u)|AXAGju*$`v=PIe z%MGCmUH<#o41pd2c$S>4m|HgX*@6K_Y>%xpZHPi!i5(m^?8MkTy z)0qbve1XCr&~HZ9*88Wl;@i%xB=iCGVCJ%Pu@1;vc`&wKaE z0oYUH0fBFAYz(m;etz&n;NLu4FME!3Q-{;baX)=X%k(5JFMgC-O7p(V^p_c2#xu4I zow=0wE}T$Z%6-gg_D<|}fq&u)*mC#kjQu+OyRGF7{1^70+ymFl703bl4Z|ysfq&|q z%_HI`$&upUoNAF-udk609OnM| zXse%hk6#b=;ebiL=lW}%qi6uu+_zNW7e?z4wRYU&>rGX12i60?9rA!$parh!fP<`C zQv;O2;v^VYcHmN858#@hHN^Q=g7+2F0W8JtuVFpF*1PB%fZg9u|BsvK2X^Qzdw$*e z9DPGxOV=M~{}B5MKj$7HKTD6i^wae4^FL1aT>K7P@fC6i7t;v-_6YW0yIii<@s6%D zXHP#MFdg<^YzGf`&DYfZ9?J<4&-1tkAHlUia)CcLj2<7umTUjz0P(K|P^1u*!!8xu4 zC&alt;I+Ve_yeBH3F19Q_zun;llTSox&Zx4pD{J3!{g8du|6=?3AdvI+(XFcRt|{S z*tO$wUVz+{`rb8|_D|}h51SnDVb-xZn(SZ2>&5}wSvQpN#NKwD^barA6{5$%nq1HX z{+r07wZaGDS`G-DYi~W)5AeG6M1>75e1Gv6aXM%F?3d^tSHiXzdlQ3cu-KCSA3hiP zh}x!ZbV(0>K+hz;fc^l(^-jj`60^(T= zi+7KM13V93A$C!bi~NTl>>EGFI!FUks}Qs_==!)~NqO1B4F{JP_yd zMc`i@;P)x+1LxZMSQF;8c&!otmurHo7p~U>I_Gr(U|BvW`hyS;Koh9%n@92S!G9m4 zg*C);hKO^i{mE1N|Re_s~Y1 zQ@xV+J$CP7^LpT1zd-!^d*qnh+e7Z+bvd9+ziK(aT*zhqsN>&yYVCiMxrn^Zm%oF* zWp+vYqsxg0bm4QU|HZw2ec1iLzA*r6e>(8j#kV*QdS-`}2$R0<`b<7vO=n z(?NRw9H8gdsvBOxA9yycKlEDe1Naee|Io*OmLB}X&(lXf@r(5EYrjm7eCj>U|0Vqm zTyXzOKS|d=_IGJ|--T4!a5U96uD4csYwNA|nI;~g_BZ}7-o?5#J7T@Mvhe@KxHdoR zyR({KyC1gSbM-)IgGQgAG5;rK&2hw zLPun6L42eQ4P-w8|0c2DByY-(=KkQ~9zI`dHT?YB)ZzH^_U`CK`^y0x*lO{vpRYe) zoS+Nrwh!;mc0V+~yb#*J`^CHZAowEqprfuK+L`46{eT<;gag_cT|QUTxmAdrO>R5Q z`kt5R`|)_-paA!E;qiWB13v zzj?ff=SMzY9#9X&uy2?gAg1MkM*OSy#kcletjhuFfa$HrGZ)Ai;S(6+Gu~&uU;NMC zCKnvZHeZaZ-{k`}fJ3Z%?g%c3Jb!3?XR+Tn2IYqO5ci?)#jwZnfWzas7RQY^Z?yOF zgZJo1gnp1$e2(<RV zDRF*h>}TwmYHYxGVUZK07LVsW?ACY;~5$5_~)*;U(uP`Uude_@p|HHaE?Cb14;@%AV{9MyT{ZA+B06VtO z`;$I^^aH)R2QDBV=eVYCANHBNnCo?jaa#AJFR!LhTVy}Lzc1_l_hSUT>`mFj$oWmU zte^er`p7GGkLz2Y|Iiez)gn+0cY*JIM>I|T!9V<{U4m*xv#}}JJ=WhE$9mKfURl)p9$ofE`)M8U zw!2@a-^b_h0X|QUKzQKMzs>!=?f;r_<$^L2mi+R z0{3!($Kv1m-l)y@o~-lH@Zwu7FTTaJd{Ef`BIYLt-r-u*p82H?9cP?4b(95mpOnkd4(Qg2feJ9a39|eVh#2pXyX5WANz1?eJzIAcNnXQ z@1YZ$-@|wJKK{`I=ry@OJ&d-;DnIqwJiH$L|N zq;r4&-_zNz{(Cy}w|`Ejzx>C{2glz2b^7QVzex9g;z#NB=l>~fe(>|V1fdHW`M~<0u;b3b1%Y+#y4OMn zgb&b&ZST>(i*b+RJl@yWay+MA8_>uB;$9AL&VGP-pN2R=p-K7v>-N9sSEm17=zq0< z*bn^MKfr71{#oeldDzYD3$X91{=Phr?I{?TLm!OjDQK)L?7lj{{(_#1|6cO(_6zBx z$42i$`wAas?GzlqX!m&fNSZhHaGFbxktX|t(|4$Q;iL41kSFXPY(M@3x$pO1wQmLc zn^^a=p20f6PI^(I_pNbkBhO)PDdU62GH2KS#@0F~iSJ%=dd`l#uD>4hmm7>}8v9rG zTmM%j*H9s^P-4BLd-rxw8_|aE-%_vnZ|5`WFy4Uej~;*Ot*FuRd+4MF)42<*i*xP0 z@c@T$fTA8iKfloWjrflofU~gxG4BxT-WRcf%h$nwD?|Jn2NeHJ`U2<<`)mwj7pKAK z1hs(kcU{PNKKK3D^YEAQ*mwAE({}X0o=3itZaMp{bTi|YC%&Byf9}_LJo1_M(&5kk zDjjxy>%H{I8^25+`Q*Flo)^ELwte(-X=K;q+5T7c|HVI;7wfsMUmmFY0@`}7M-0$o zxj`OSu;Uapiqz#|&&9pCZu9}fy0~|Zlf6Xb0X4rvjUe9h&oHY2j0LCx0`uDaz_}dY zIsoVJ_Zxlwz<&4yjku53#PO9_7QbRQ@T*-H+j4^UI$t>g_r9(^@MnWV#DA^_;2CjU zki&JKYJO++K#ZsdP>U9^!ovR-|KeI(A9_DHAhdx#LGikFJnH}OIq(Gv4p6gGBLfDS zwS&37zOeWD0dj!r1jK8^0>qJex|4if2l(&C{@Y8q-93ipA5UHO7hiIkJtEH#qdJ@V zSE3=;oJ)i389li2F}~LmXe|1V63?Fp?mk4n@4sl>!ahK|h=0-#pPbylLVGum3tWxg zx#lp>hw)zP0q{An_kH~Sq6WyAA~gy8o$7xvZ;a0#11-$f`>0urV|L^BSC&!7vJ4ID zdx3xV@ydQaF;O*tv5z0RVhEjG-?!T}n#TV+>bTEbT<7D!zc#;!0T#6ZUhkowU!(ok z#*6zBb#-Fj5n4a&zUSW8%WLWc;{YviL!tliO?)=ci>?VYW~QyIl0P5ac$_`Do=IEp zeUrT2=d-QfjsL%k{Q@>Wz}^7xz)g>TGu?3J8|en-!=L?KI`M@+=W*(b|CUa@^XGJm z^JAa=eR}Yd|B~)}?)zyA_J3r@nN&sp50e8N!vC*=bL;es0Swl2e~rF?e4yr!c;GNU zBkp5F44{z*#Ix~x{rlXX11(^EgU8NdevEt6{^t3w#DCa*ZGYH*`M?-|qqg@rVt(Nd zcrE;b%ok{ez<=Oc9E*2#eQ-e3^Z1(AoyD}rY6I~eSXUpY6};wazK7hA>jAX?3}b!b zJ=TBb+%H^E%sdnNob_ie`~US=pV$ulFV@AqvqSB#->(kv9`QfdoM3(KVo!#i8EhbZ zM7948xxo5(HIjfWOk~)t4I6_{PJ!Gjh(aS#Ef%ecyKBC5pBQtxA&60SWEP;&pnyxzt+uXDF@31@^Mcdh341(M{SRM z&`W+da2*;z{P)lJzVbs62N3g(Lk*BQ!dM}%Y5xQN<^kG#UU+`oD?kny023o<^rhE5 z#r}Wv0ln|7v>W?>-SK}&+a7u+t-0&dX#+8UeaEQjIq|i$@A%)N^M9L;zYYH1{6Q!MP8-=zaAf;wwEt1!f8_u4{lT-N0tc82$gzOB|8ESy zq3t&Z;K=pD+VHxTSI>+6##uavwvXOif&btDxgqfHapnXxzw7=SYJtGNv-nr@UpXQd z=^j-^hkk%QfHt*5+lno2qqe6lbHEW|Qm0b?iVLZ<_UY8W_L)>#^Gxbn zbtw&i|MIFQcvc?+&qrCu@=;>);Macf^pKA+07m<*|3e?Rp1GHtU6s0>%5t7T$I`>O zZopb#a}k}?0puDUe3;NN<}!?B`ag9~6XRFwvnOSF3ETpoRKS0Ek!yim6J%VUcqyN! zx;}cYiuZo@f*7Eut;6HsfqV~opu3L$K63Kr26G;O+<+WV_y7gIwd3Mhj0gTbzY_nU z|3e$}!Vew%Ok?~{pRog5!m1@^^%jsd_0gB%Zl|1vcQa)7uu_U8x=&=)WVkaY?i75=~a-r;#@ ze>ouPdF22#zjznxv36fhaG3Y^x^~}nKI(mE&-DcY*Maev#d_nh=jwp)1ukm^aH`F= z?#DUowmcxN#cm_!1MA}cN)GTfhdCj$S`?@j!BEbff~1_yZFfn6zVj@Z}kfPH(0 zVT*zT+%ME)uLb_CXSJr?npW2fsQI=1;$PeETwsJ)Ik|9g@43g04(fp1Q)mvky4YWI z9=<@%3E)q=zjKHE$BYG1)7Nf);hCeU2i@PZ8oR&#*)+J}h19?LX`Y`a!T-5b2LI)y zN5D9}`RH3De&v7x_Ke7TNw99oJ*9iVeJR%mQ)9O57~jK*G_(xez|R_ch`L1AEf~Lu zJVw#ai_el82DOd)qMNygxkNp*V}RIa+5R=IQ)Bd5hsNg_{g&*%Jh%}4XP=8QeXPZP zKQV~t)sp+Oqo<4si2DKSap(`D7Kj*tbwbAfdnXHfUtR#u)MNjl{~Pfiet*;f_?koe z-!XoU-<5>q2mE=zPwjhfK=}QQwmA|#vwYX5;Bf3edfxq_JIFJ%!!sG5>H)CdO@6MMe0_N- zapy(F7=brxa6oy{Vg7G&4EXuhC5wMGi*?L7e^Iyl>Iv6BILj;UM=^lrFNu3>zt}HR zo9^uX8*-`~Aoi>DwHl$%#SrUGYwSBO5A@?J^r08z0EZkfK<(0smBZ z_E+EXT-tg+djj77CVu~y)9y#u>jS_4IyC>S#QbhM|DALzVN9|%3`0Gn=!zw0X%06P8dz~5QD~5JG;}hE)HoU@qL_@2I53D68 zxB(49k0Q?~(vYdQX{t=3bB2%FE>e?xD}IeGg((xIVyI z=+Yu=`C_m>AMS_KJ?>qAUoeB7<67qw-z&%7TV7JE1r8ojPYlT=@IfEE(G3R#{*Ci{ z+&JWe%nfzy>u+jv%tN~`SnN9%{mBFS_A7LM0{1GNTQOgbrf>~0&$s zz%@!}8|@`AxzGS*@KRnv?`*hX4*Bsp#L9B-0Am5*zZu-QuBe%Mo-ShWJ$YYf_Jk)N z(6bufe=V5b@Kma8K?kfo2mZnSs^fg_N6_KK;o*R8w7Kh(jPZ-pz6Iz2a&)DItPOIF z&eGC7M|14YnB-h~n9Rf1kF~@0Lkj=K+~y#A$`4TQn0wTTU)G@wIAhP< z->pRbx!BL#$!BTrHqQsiVU3_?$5!(UqhH6cX*Hfi;gTbupI~6n3VC=fwEGqYeA7w$}d7-+el5 zzWd{81Dbu?{cn*2{0jU3vF{(g{%z;}Dc$|l_tTx1z6^Xm8l|KZO^oL{>hHa~L!>y~P3^eYO?53j{1 zSWhkRI`>ZWHP%RR>~-&{uELhn!#v}D1$bV@a{x{ou`f4>^$Hx|JeawF+Qd2+48a*S z->3ds8Sao1N{d(%#4HCm`WD{C^Y{KbA~~Q2{%h(9V*qHl=n1Cw51TI!#PGVK(EN?q zw}$|{<8ucW*niA^gRx(M*mt;JS#ZFtGV4t6Z+m&pU7MZzHed(U$LfG07N8G7tqbEtnN(xn z_`$W0gZ~qJ{=|`2q3LrRjZkX!uYCVPb9C631=N^={oxfSxQ50c z_mJxciAk8R@Nc#D*)@E|^9Io@HTIIM5_=NQ;?%jE@sHl;{};#VC2_1SGB&Cf@Mng3 zen*LM52I)EIr9+sAK>TxIq&uThOu{!3jJ>j{KKu_v74N~7}kc1eMi{x(Dcq;i@cxl zer>#5%y6UrrnE zek0fUi2XY*emC6-<}?1Egaa54y^j5-#xHz;n^uAU5%51m z4lio}xNrbHF4l+Z^#J03nAn5$!CuR;K|j0t$aw&8FV;i*8~Za45IF$PL+gj`mlGQE zdLHZFN337`53eb(-N*q2?h9UsD4j}A*^a7Fx>i~=e*e|501;}{-j$- z+&A)oyr4et{xWvAY%f^382#^e*@%68elh%C#s0;9uJfnxNnhZD^Z>r~V`=j}Z?f;IMH3c;F*1|2VBedC)h~7XFaDz!pvS=j`5D45 zkQ3sXbtd8an+uQ&+*`zFJ8ZtQ_>ca>a)S6*1LS>7nOorv_hX9wO!igDy&JP1V7#xW z1(E}bfxXiwPy>Kh^L2gX<=tzjL>}J0LHh5__T*x2!!~!Cmm^+RS$8%KZ)WZ2<_qY< zvuMNP*eP@(?@?us_q>lh@7syLZEqXbwC0}C><4dt-Wna(23Lspl^5d+WKBS=0Xckg z`MJjlKVQbL7x!XSJ3WH^E~CkdT1Bs<^#;#J|{A0}S(78UJ(SH~_Xk$N1oZhy?@($P32z~Y&(S9= z`vPD&*P?^*@b$I%(X(70xa=Fi3z;L-ro4C28yQ`UhRxUqD{6s$eC1B^+v;g`fSSA= zzo6Baq52#<+mBCOT?H2L2h{KS@7n5KxS*TS1xCAw>-U?lTYH+g-{ZuL&TxE+*w9g8 z|J=Xa{62b`-zok&;_IXdjCvyUqF!Sfi;Y+zse9z)#ENB=s@598Rp zQEZ<)Q{%ZE;&1jlvcIeToc6xL_g@9KgA3txur96x+u}O>dpRI{0C_t{z<*i%qs>eF z|9#-PUmvKh1I$5Y{L2Ro957@qo_oXIhwk@U;6LoXb$#+cQ4dhW^aJ<$0O1qlI6wAW z+#CDTmWMs}{7OwA-W^5E4?j_i*LlEe@`QZR2Y!v+HOBhHy}I8yhByyf->3~j1Bm|~ zzB4&M4Ul7h=$7HS{r8y(-5)VO>j1R*p$&YVih<_9MyfGGYkDlMwey(+z>xbExOb6p zV%Lcl$JQ#VtBF&A1?ws79np&p(B4MhR`+%AxSKefn%rIi4*P~QQ4iZXf#1*QX8qtG z_;l3J@Yu~$wn?`?nf z+&d55-&2o$M*lo}N!m*y_mkvUZSRmnoW;DHFilQ7@ITEno;3h5?EyYVzbn7T&~k(H zgsu^59$I4UK;ip~aj`Bp1SjYx{8#w*p1{9zt^w5I}!~To?IF=K_{%gO(mh0P# z{}`d|!!K}_Gs5P}0XgQ6oezIO|6fdBj^ow&Alr8Bd&3C7ztJ!7TILDj|LzN5&Ng!Z z*uT>Li}}Xbzy7|@lh2i0ApU!J5AohO+*e3#>(I`Lqg)fhy+yxx{9K+5kHve`OgW1) zwLquui47KqV&DF16|{L7n_69o%_TO_O>98i&!aAGEH2`=X2IoU7kMkZM zrS^~b9D1OW`kfMW_9b|rm<#+5tzpJySJ@w;o4?t;A^qEmJtN^$c@o?Wa!=92l;1-= zP>H;t^?()n1C6dlXEL<^y$jKCD|xo~Tg_>-P!p-0*S_}>uXq1k^UMSEm9`(fSa;Y* zX5n_~<+q;9!=4gid=$H{51}uh{TJsm)V(^USkp4ev+qy?3}O4__Nd>=+Km{!zPcC} zyJB45KKy&H$qQZ@cevdHv5J`u*I4-M?4-Gt31%^5!4Y{jdEx-TunY)2%PPn{NNuFVbBf z|Ce+K?B77Ha4)fgRfj&AhPG1wzXc6Puff276`m=RZ!eo~59|{I$bG{2eB7gKVuNe+ zU8hTLe(ZT(zh|7U?(=*8flhiw*e^P2 z(p-Zg-WRb(X34I{^SpTHnY48G*~|gHrVf~3sP7wfzcyc9Q2#IS=NV)Cefs_-K3ns* za<|`~_#XhXS^J~^#c<$U9>}pgUKiJD{ILI_0ptPiZ^V8-_w}I%#J~AJ`KFua!P+1B zTib68u$}L=4P{9{^i+pE<7pHEfrU)y>bKLDKvzANC_G34Of z_@A@!K;!?Te3sgOvG4ky=;>jcKQJF!;PN@IMeM)efcMw;nEw;+=KqcT1qTFXwf$k| zL-z+Ki0RM<+WmOlIYwv(-y>gBBQ%U*eFyj;;{A=K-{G7rE7+I?S_2Xf8N1kXV|&Yb&B)Z>5pw*z3P44$KYLLLa5 z>+h=p9C^(M@d#gY$N~BR*%#LD#xB=bZ)0CshdeM$?Z*%p8|ApN`jLVU$gh_c6Jy6F z_h6f=#P-Vg{M!5S>f>O(u>0b_AHQGx*Va=9 zw@$yh91gHvmmw#JdtdW7pRY4sjBVk%+%Q9|dYX9EBtENu|9ooK7HmIFZ_6jr3iiue zeeI>R>cGXcjPvLtl{F9l`(QnWpzbgH{6hO1^K%p$fajmTwHLfat(VyMyXpg@gXDY5 zVjql)V~2V^G`+T8{Ch4Rh<)P%!2$Auug5(l_(1&k`#$ia^THZ-1Tm{}X9s%j4v5r~@zu00+1pxVHHO@!jJ^-cP@u zAqRv87=;te2TahnYfSrZzK@|6a6Nzc0OG$`%crl;_e_3K{Hyb$UQg^tEr8eMfvDFD zPS7{7{%5$J?^g?G>w_c2zBmt_aMnkNYu*>SLH)0-7w<7b4`|oLcMP$w%{M0y{zAk9 zN_=M#|Bo7=s0)ns1G%0P{96y`h#aqZ9?$*GkKRFxs&su=z z)824m+s{$IDr%X?JzX$&H0rW9) zZ8*QX2dzG6y&bwhJujYz$PrfM3hQvtBqM8ijy9aA|8DzH9_P6_iERPn?0>U-|5LgD z^-A}=*?j@LKbclv$GZ4~&vN||d*QJ+7WQ9zl;hIq``9Pee7^CB*t2GwxV14pZT%F_ z@eHHNXO};JY;NY|`Wmjh)&rZ|SFg{>&xN*M%sOko8OHL4i3^NSSEjBP{}C6|_B+JC zuVvj2_Pr-_i1#ymuGFO3pAPQTzw6@nc9UlsSWR!7?I(%xrpw6 zvatJilKWHp-}B7()9o+*OFD4wyJ`37Z>575e~=D={o7yomvsBHzeu-U`f)mN>RV~m z9dD%JZBMZFkNS&^C$aa(vHwR{+kvg;cmxg@qaRm{(TsIsCG}i@`2fclJ$l4`;6MC< zhzaCafZBj(RSqbIw#a9q(E8$E9T52dH9)M}lMAfl9a{AO&xbrv`1f)^*m&o_zQ^9< zxg)s37-04Z_s zSqi&ip2zE+ho2B}0q4NK*w;6RJh!ocJ~cHM*AFn>7q&juQuXuq7z@;AwjQ7hF6nd) z3^o6Q%iUAS9xm9=?T@p!#Ci6czrfn^b9~RI@^dh~^=z8rxtL@g-uM`H|50kt(BRnn z!DZM7dhHpnw|93R{k{9F<0lR{w($(#2l@cty+q#5oP(O(F<{;gyo>t@alY)ff7n_?fJGpMnFXww@{W!GQ}F?>v|H##+eV?;bf5Jge$aW75VK z^mT&!jC*)Z9pLQH2Z%WTsP#a^xU*&hYjQx=ZG3mZ-F`>%xpmz>7ct5nW6zBVh=1+> z5VQHgEAg)eQ2)yTz7{@%`0wLdNlm#J-@!aIqXT=>Mogf?ynuffco6@~Z+ted0le|gxf4gT+X<-Lsiy=VU^9lZ3zbSrw`R&4*FXMdg!J@wOc?PK3g ztL}V*{NGvX|4)MT$Ef8n7Dz4t{M!?7j6KMvc088Gw-!7wu?@Sy`SkWvdEWr-f1v@) z4Z`7YK=ks7dLZq8<^!2LGis{zas{q7Vz8=YX*FV8nLgB z=kwHf-RDjFZ>-QfP~KM*oQr*jTp;eX{|@cHSa0M2HGpwH<81{GxJOX2UrUa|v&Pl@ zzcKY1Ild9J_1Fgbs}cX1-u^_Is*efIXX@A=1^eQ^vgSBzey9(^?)Nbdpac5J+x6OW zlbW9roG^fYP$dsoTX&MrTAhGqfCsv$FX$r1SVrSl(e*?4AERJ=bUpe)y!-4Cf3Be& zs?-ivSL25eW9ZjEz@Hf7wV~CAb3AgucmSL*4rkaKKj)yp{0JICU2j~klJg64Pf`02 z@j&~^JErjWXLxQM6U4Tx@e}_e##i9YT)WNp6TEF-_l$qOQ=dbh3vEQ!kjxb@?-2XO z1_spyb^MF@7>)VC;DNX=>j!j$&z{d$C!-y%Xk|@+9MFl*tb&gPd(WngcYT7sAMd0a zPX0r>gPNbaE@1O76|uj&$p01iCkODcU!@zK{88Hb#COuQ7r&owLI2>UTDtd1itu+kZhp_p%A0Rql92+72#eIzVJ5RG0AzaLLhg>kZRjp=j zu!#AE{@4Cn58yl@H!$RYA{S7^`oq`H`W_7sxQ{tBLXjKbI|9qv_R#jujrec$^}SCm z5OM#Eee8Uh@6hkj&pT{=;Qz|m@7jC49`QfFqs#+fJKF?&e(iqf0FT9aXnwKodDsx= z-~@l(7@+%w$pM81;O`Re`u%nNZ#}TSX^py!3iV*FV-n|LUfr)>Wn94HJnGMX5%(i* zh#%nkpB`#zD(2r;6XOA=L&WXIH>3S|2GsAv;CEcygUd2@xSzaUCpo%K?fp`80QfIq z>#g-IEvFyA5^88hH+xE|MST{>u`R>w zog@AS#5?xB+JOJEIv#u882^(48f*W=eGKn4o}m5jF{g~b**-yUl5y4p>K7U}CC)rb ztb8H(-*Csr$^Fs)??}=A@6g$AraP(mxf|@O|IPp1``nK*{?+}vPJc7)zwkZcfA6L{ zUixLm{|y&@nD(LnH$3o8nm+I>F#!C3^naB;pfz$Pt_i4u|6$J6{*&5!J~NNS{G#3L zM+gTjtk2WvlEAi%Kl2CM@T z&tcoO^MUcu`+jT?Q-Mv*N@$c2z*`5+}&wV$*_&D+3>FwvyQ0RayPY}!D`-d0Ae;J!RK#b2gUmv!< zo8BBHu;0&GpFFPur)zjm{C}}OK`dzktzI(62mT|Ms1_(w_ot6P&X5PjH=agoTu75! zj6YmJTRsJk;Ez&QG`11ngZCU%6W~(}6A!5QOd5~o85-buvNqoMSV@kgzPQY&!gI#= zjOUpHG#0q#x+n8&j$kpvn7_C;1~3Gd4yvhmAL}`^`|@`1xxQy$-)DA|XV7QIXF>c| zTmu3J)ao?>6|vlafBk-KzxbCEwEbc~W@CZkzo#B!>foNXjD6w6zE~C%C13!-EWr+PhjQM5VkKI=bOu_>* z@Ilyq?Z5aRCubP;-`KypKYW3F&NZJ;pG|q-N_+2TtM>PL`2NljBP=*UEm73?$^n7@ z&;T>rj_^F8@u>Zcx?lMsupje?@c}sjZV3NB?Ee3sCh&EA|EvYTzcnag-uRy}0I}`4 z<4PSM{sa5Y+J1S#SU}bab)C>nEZ_Q;sP)Z0zxd}l*Z#|eIp$}c3j1#y!1%wj8lb4J zAV14a`}Z3YTtV-)dOXj+!+mY% zZ#$Rf@3_c5R?o1;?YT5cJ#m$K;*m{q!bRc`mlzk|DE=;TmZSVXqvnk3+EV*J3YI6y z15T}j%ZTln%U`(dRJQ%%-`s%nvb_v+fZQ6Z5=?wM0=e`C0|2f?s*k```nIEM4Uj1#3`QHTY z54}X*pK;T(@1~ocem7lz@keR*sc)v8NB%CYy8X2@x%*O@*v>v+V7{UTzz-Nh1B}T5 z#{3z^0H)yp@je9y6r(s6`}+UlU(84DFLD6RK9kY^BjW$s_r}k*(f1F2FeWg)1zc~X zXE?LC*2X&~Hu2h4;?IEeOc6IT)?X$LFoj9`IE~ESP zH!9Q`j9|abIm~RsmhgPd=Vzw*-P7=edsocteuf&?OXQ<2VSlhmtS=bba*^i>KEW>- z<-P5NslAC9^BB)&<~Vfg0_%OK^;w4AUwiPWwC?(+^Sr8_6Vw;5CP;nYXBnUEpnetn z?RO~dC$K~Io%h*`{!^n|3;Q3>iSa-2U&D6~{Hy=Px;DQ9EQj{@TwW0KCH%*T0pwVq z@jzbdpqEI-K0MH+F96Tw7Q_LqN|Zg~19aKbN=8sNHf-%Hn>`F2`&&zot2 zzM|UyF>Qq)7TZy_5bAneSonB{09%H1tRVr`rpsi z&r>c4U%!zHeBI&qFulcEBlZQ~d^qD>4sdAa7wkBehnNp8@LHUEkGR+N>kBxv`C<1% z=QnEpz<6+hvo=3?!PoP-z8M-cv|_9Q3>_e*?y@Daj2^-4Pa*V7eZ^h7dh<~4f3br}h{|5XU|BKkac3=F9{a$*7 zYU||yUvC`7|JDB;SRq;Os-u3-U##8AxI-hfG{tUkU1U!)Qf8+os;Q`}-Y5;LB{-;=*;D}lv zF>gJP{=d)W1UXh`wZAq?`(9`&^MUyG_4CZJbzdMj!fQVBlbfjZ!lnn#=Wjno{)(C? z#-d#((!!lQ0}c9Lzd(QAI)SMDHwIY!FYq6^fY1cmeZS)ve&^bJ&wZ_*Tus0AAa$)T z#zO(&6kH#7U6PYVxzjPYuk+Ve8c;gi_Ftj_|j*Z=AocW{f{`4>kq)eX`RFxQ1h5e^0==^N=!G4u71omrO8|4{O|7-tyz_2yH_68RFVf(YzuVX(nf;B+K z|GVngR|90<5_==|`&aV5^tl-4*{R8LP|J)w{Ztyj^A^Znt<4*1F zCqX^0_Fn9_NS>EI7kg*zg3}0NcFnIqblTJPR+= zi|#pc#`pnfdv%BPYvwMkd#rL^B{$JeF0y@;oF=sgRpR#**YV0<#Iq}W51qui%z1Xf zeVu#;Wpw!j`Tfb=Po)J1UP+UCUcn!Dk>3yJtR^O~4*!IlrIrJHLh54| z;2SIe%YHU;q|b@3dENb_7x6sHn~nvG8gtxjIJW7Pdb+3$0lUO-dC{MduLe?IkHjP40yfev2->-qsb zaDw}QwX(;U^?T;0V@wYnO0F# z?kxVT3)FYFj>jC_$OiPiG5L)bi37P;^wZR#zCx_-*<2TpYx0RX*u$zFf7ku-`te)( z`5(-sxt_sZ+wQf~XJ0+mIF!g~_e{DE*Dm(uV_yv7-EDB6wQeQqhOI|geBfnj-O&I$ z;G69)@JwFHy~X!G4E#@me`|o${u5r;_JGOk;~V4ma|Zu$9A|mQo{t z22cywhfdq?x$A+m4&Yim=lQe6zKeNvwskSij@Y|FeW3sCns{GVlP@Hewj{^J&%p)w z1&l@H3C4*54p8^oLjP~q`IJ`BA8IW%0-G=43%-~Z?|&IyI8AQaJ;$j}&--AyZ|-jP z+1r~rK)asTI}Fp$ZqWU9+2evf{PxuDqIX`~2t7-OcBZ!Sj?`J(gPpVGtaPJHJzUSe9=deqchyk921E?*+uc)Hw9mY4p=gDzTe2N11#*2(Cki*Kc(xRt~ zx?Y{I5Ir!79U0|$3cr7XXKC7=G5C$q1J3VSpK#FUhiAiFotU4XH^n&mRqR)IUIyt8 zC;r8F*ErgLoPGW#*bjJyHUBg8_nQx{r|k8sF5r3{|D_r1z5h3ULOUbsOtnGna6>0? zfnn<2C-`3$Q2)R7wwKc`>wj3+bL+XH*M}V7F!y&q*bn^Q`^opR2DsJmw z*YpA8b%(Kl(EY~vwe!aMBKM!|J?|gbS5x_2hQHs)^Wxj@SXXHgF;e_wF)trDbi+v%! zXg;CFnx#Q<_+ng}FDHumCHSk$_MXjp-#w+nKbUW1bD_~c0W%2-zUlavFA7I zceDSG{?`Yv@0a+009@bC(D!$}??+hg@3{X{zsc9s1rNUUhpZ1C_~ftX6Z&4d>HN3T zvRhvvrbC>Ubzn8(sB%DsXQB*thrq2GK>uI-M-8wVAoBq6R-Yez%#3&Je9i;bBU%>W9KPqbgH00->C{E(!VXu?O2;;x35agz3Wp~ZC5IR3wvxf)zHGk4F;(}a&6%hbpn(4sOBu(GpxqC zz!Bn(qx>)C6ZG$wppPAkb{P{qeHs5=TegqAGxox7yND0$(EkVb%=4KS5=R#M>i*Dq zxjz)&hxPrj=Fj+@^*ZW*ZN8XyX#2%}bt%u(LTfk+tc&-{*q@>g0Jgt<41FXI)b)XU z&^Edc-=F@i_ysNSKr1|u2fUyL=%P1h6k z=<`+gEqqV?j$Xd+jDK{1F@oR#dEoLu3y6J3)K(gE4-Jre-dO*`_apWl^Z7orjVBN8 zb?xFJzRRV1&gR$Ua5=%XHpYR>{f&XUQRgkhho}WAQ;XX}k0ARJce74W&3{ezda%DP zUERHr^L^MhY8~JP_tI(|rZ*RRk~x}&xPJ)SMogfS^^fiR?A)&P>8hq>>8j?XX?Dk& zG_P+H`oXw4xo~uV{Yh%XBF3mms;#4T7~Bu7bG@nShU6}uIsWeX#PIxI7Gj@fI9|x} zxtx6Yssk5@Z?I-={}W)}y()`*vGL;Y^Znj~<0JN47UO(ZImTc2^~L=l-%md_UOTVd zFQX4?%UJuj!h6Z>E+EbU{(I2?y_46G?^FN72NP%?G)_ByPX~DK^te7+M)uIxh+cu% z`xZvvzmuQsA)Yvp>wk%H?meG-|8BVZjokO&-rqMo_K$_%UyuE(|F!>r^J(op{l35O zAL+;$?h;~QH)4E~3#n?x_m0i)V~aIYSa2Rv2_ zgspFk@oVp`{R#cH2%Tnp*K7H;dcMyXVC48?t&ivOK*R+-RvU~mtm8J;<5254>;vF4 z(Z~VuTxg%=gy-g-e-3f-p`mA2|^#r$az}(VS_QtxF{Fmz& zUAJT(Vf%^GV~n1@Eu-iKdJo#iEB85s16l`nrK>yFrN3@jkv`nIB326lrL zbOJpKts8dDaE)4}nlt#<_S?h6o&fWSRps2jI!BJ<|BikjE5M9(e+#y=o|U!ZRr|v; z^aJH_zo+=_{O+^v=esn=r`>mLpE-MNzqP&U{pu1poA1z(ZT~WQf-QF~0DPXYP8<}w z-h-X*Q~TrhcN-G`;~nCk(KfsbZY2IWvK#x)HSX`={x;^;aqK_$clonRu>Ig>0$kbq zV*`7CZNvWW!3Vhh)IVhHpZ)&lew^-i=>LQN!rrq7=$HR99sA;c&zKkYhu{9U%n9vl zSVZp7y};#Rb^kP+F<*@GnNMwn7u5arA@+xevpU4R`1e|kbG3iY_2V04-yZue?j6Aa zVqd$jKQIcf7&nMmpBlf2C4gbRORqcP*w?(r{9kZ?Xm9Z?UcJu_ zy~k^DudjKp!)tOw{EV@ks3nje%=dbpZ9lX4FJb^i-Jo?rx&JkB0CNFV@_P0Ixzhfd zV=?Ei2AGc>w-!bYus_BU{Ccr&tbfhHXTbZV9PeMm`u`Q=0lnsH<^;r)b-Kf1pW5Ck zc>ry2l{#K~;>e$d};&xoOEF8o8W*seVfx9-sc*0#8sW>iSDh$4EN$c7#Fn9x;Z549uJc% zW*stphU_ykg8x5`4-h?omhU}Rtn(q3xzzs|ts^HGUoL^ut_9Rp&L=iG!=8O`?I3ur zP-jzR_#K5Es9^Jr^;yr8}T`^`+6G37F2j{>;+^k;3)Qe+yMuS!LQZ;*$31+H=!D4EK7G+(D z?dSC=Fgh)E;Q)tR(8veYGsp>3_+Qx{z|M!Z7yIGoi}M)j0{Ow&Yu*>Rzp(95?;o6? z_V=20KVpIAbp5UatKwYyEEdJG=Y^d{&vDJyV)$Cv3o-8fzUFc02;bN14zI`W2_A6H zx&R(1Vt>^4f_ZtM5B%raB5aTGK<$5C8$exvF@$03-HCHmh#}b1^L_na)YjxYD>@+O z0?+|!GI=@t0B!x6gHNaRH$I=%UjHnE9vaN=;~#xMo!|oMfyasQkAQvm<<$lk`w7u= z5RA7}(5i#@tQE9tj`^u~jeQZnV7-575w-Q~|JT9(e=YR$ZeldEr$8tB_4cvPzySTm zJFsF!Jh2j&fICsw#4UDLZGUERAg%^KkPuzr$xTk3XM18k4sA$o!h=YApu z=c#@4d6t3`>wQ;(f9K`c{zW{$){c*?rzZ(GFML7$CONp z`~m%ZZT{dQV}Zu}8R&lTukCMB%M-^C>%I8=ebd$eSpUyD0B|4N&wpJ|vyPGr(D#@iFIeN5$~pjy=iVRce&YZPeS#S@fzMhzbLvcef(1L!W#(LW zq1E65F<)o`uucqrh8T=?J!86#Z~35cgf9?UKwU6p%$8VR)c1?^z`NHX4j6d>`~Nl8 z|B27QabP*PKo0O&%mqPT+V)uLK8Pv<@WdE;r_8fC`patA-pdW6iEPWX6qdvi2WAo`n%zLy9f%PHn zr~8^+3-+%~*AP3rhPYuHJxc8XSRyxA>Q-XH1Peq#?(gc1+pjG{I(jo(xF}CM|Py93Y<5% zg}%ny;Q%*8RLm-TxQU^(WZ(0_5tu5>>q~{PT&^=2i)_qpQn3Yc{g4A_}9`H z8gK{==)NFjw3V@dDe}Vh9v=ta;$I)2%CH6~_XLIq#*Gg$X6kV!^`^Shv50uA&z+bL z|Ns9G_ugM}o!6P}NFoSy1Kj``okMk3S5@cSKqC_bKrjK!IY%&n1OXxg43bESq(~}| z6eR`)N)#3C83)OxWqCX-w zgSGsw`fvLEBh>y>==rZPhoj0&k3n?60Db>G%;{~PVm}Y~IOm494wIiAqGoycW<vTOH7j&3BK1v{yHC{`;6ET4I)fdc}P_yVL>jhW0%=-`D*L zy|#UlxunClXH7%&H?dby8?ita{G&cbH)}t9#2|4=4bDpYudi>7k9E=BFWMCEso;^V zn=;SjW9!YFvz_m?f&Y%)Eq?F*E>-NWHeaq!yKkLeZ3D5u0)P&5c)oidxerv-v&n zOLhA%FE9e8hv4nRzjZwMjF7yx&p1Cstc!WEzgXsXAEkyx-$Gx&ykl?XcJ;5jhw<2Wwb{h}^dtPgxY#n)PIWDS@0-^cMD>3zu~hwV?; z=Kd4=$@jzuHQ(%c?@8}P?Z0y()FU}pRmXpwH&F*z=a%+fOtzo?J74Y1rj%S=(O>jC?H%n?X}Zs||^262v= zfvxxtN;h*y)B7=R)HwyM=#iFj_a9^4DSH*_i#WeL?MqEhK-Ip0l>gu!NOfk^@__x| zial1uzPNX$M;EyjXKgCoHuSY*HQPJ1pjh3fnDT7!TW%?-;t!byo7*`I)V^y~4h~@c!8UTk-v!^ZO8Z-}lOg=zyQ)Iw0ZyXUYFR7yeJ%ef)tV-}=|Y z3(5zY3vk{0`meG(KKqmG#!voPws7YcvI;hT$XdWu3&h+8R%e0^;p@j-AZLQOPpCQ| z^nkH|F@T(`oPhl60{ItZ-Ib@3s0ZW+^!>+oS;KQCucv<>znePT_!s+r#xONxiaJ319(Wi3`k$c(it#|yEu_yR1}IbS7B!M1;C~$7 zOdVhyOc@)e{qMDY7;!K6L7tmLm(FreDU;=aDA4rM)JIkCKa4rb@1NN|wcOTL@$zA~L?a{&B zp>6ITiciqPUVpvp{oR9}=%co9fVl$YP0XFb=P1E7IP+rwJu zhY+1YeBr$EZsLJH>Y@hiSHu2WXRe=P4CMY({p4lknaw$wUnTz6|Ih>O6JF-G7*0GOy%qRm#{W~)XiQ&9AI2pS2f*QL_mh2=&$o6sxBtchi(`NF zw{crYdR({p;#`}rK8PMbIYGI9C3peX;Qz#sI289Di_5U<;yy4gX2WhTK2BH`|8@Q0 z8o9-qdW7c^?^u5iU#}kM!;csD_KwxCGuoWc1L9szEcgK9QO|i#4isXDL2Q(@hW*wc za6eneI*Ppz|8fAv0VOcsYabBD`fB!Q+q-GrCa>SLZ_b$=^nZhW=kg7ud9cS)-OV7q zfA00w#~!@{Tb&h64G?>N4$==$W)INv)~Bcqrbn1{kUhXl8&9AQ%o9>G%-){e)65BU z&tUftVBhZ!_7Uk}|3LLg-+HcNmdF4&SNhNcrA_7=nF;260i<#PwFmAq$UG3|jyZp< z8}6W!-r{b2f9HV>f_-b6^gGA7C%wqrfnNM9zhme6 zl&H_>m5YVv*ZY|fVVZcX@a>gTyZ^aI@C8fpMK@cl~UbjSE#?D@O=p?C26>G!AK zFYovNF?|0|vIpSo_9pEAUG^aH`vWgi`}gus6aQC?|HZ$!5A2KoBjDfMU=s2KhtLfN z;R*MC;pgxGKgc%T^~G%bil@l|(gRkH0fzAF%>`EE|G>QV-Vo9`^SIyIKYl;#r}cmK0;-eM0ph;M@p&Bno7neQzhDMk5^;an{Gy+)y;tP^ ziug}FeI4^f{D(g9oDw=gj4M8lbKwI6t)z1yi!T3LPhpT%C8rMhc z@2U>)oOnOOLCHhql41e$hWW#8V$l-%Bh?pkFAs@*c~kr_ds)PPiSymm40I9q_sRnh zuh~0q-Np>{v8mP%zkiClI%jOp&;v3@UU2pbYi*qg!Auxt0@aw$seqwK%|T>&^ymOY5V|ZgmVXQ1wD|3qHUAzKAu+_9m2=T~Z<+(1*RRfd6Uk z&otu)KEqhkdcRqG%(Z(?&>wEkAG{Re{bQV@9?r_T=f~E!nYSCd48MO*!oRV9C(=G7=B;PE9Q=CUzwIzp8QxbpTfx}n1gy;yJMX;5y*}LUlbOHR{=1*~%k2Ko!1s%Pu)i0~ zKLGZ{|AXZ59{l{z$p8O+cHis2OuXMg?0$~_-0v6rNx=VMaIYRX^e*^+7e9dfz~k@y zV|M2YA7ncpemk2ahcbFOIv5?0=7NE7Yk`ab#JV~_KES$QMIB&FspK_6)CXa2QeBWZ z-oOKm2=byvKq0$l)b^&DVJX&xg+u zpOth9csI5$#{R_^AasDffX6!Wshelkii-wDLsuv$%iV1UVY(fs+q_4e2Kb zpiUm)Hyh?RvwvfTUXppZnR&S0_18R`ZMcS-fUD>OzUn#ZyP3D;>~H6Sq63`qGq{5~ zz+KN_2R=hi=+p4RpQ272|B&9iLDus2XR`7(@W1&9_6TBD5V1g+wHy44`(9=QcQP}$ zoj(39_WVsT!a8Dm@ZYll&rEDFnC1yRiEY83py#-RZ_wpl!{~&{HvX0iPoM*+Pa_vu zBL7#S2EhN#S-@k|15WdQSp%4Qd$F4f=zw+npWaK}Q{G$RN;?xApgm^l0R4d)HpqC) zb%gtJh~F*nFZX90;A$^VJ2Ae}N=)BUyYw{n^#wYt^Q~Tj|9>fdz-6pEv)1xf`W-fA zD>~OFS+-_fw!D1<{s8Ao7or2GpWt=9yuWoVW7s(BedqXXw%o?d&xgK-@Bc&M{=drh zKK}vOhwp!hejn`r{pbMgev;4O|AYUB@c+fX{QnvJpKbq-f%~K2|0wGb@PF(*j@1?5 z|G=BSV~;?31Mxj3xlhFZSkeP<0Nh8$09EZjco*}jFNmB=(g8dl`M^9UU=G?^eSCMY zZ|=`E7wY>i2Je^VF@D%~@vd0MUBrCoaCL>eZp;KN+V{YocvO5G*iZFA;<0Xz#iKS| z+!uZL&N1W)?fQP`rtYAgZRhSXD*j}!_=t%t?qm(&HotK{wel~ehS+U{x1Um z^yikre~HJXZBJvvPbDnt$M=Hkj=9I!KLpGZyLY1ly38dI_xFP99`ryTGlb<8#JINK zIYR@+{OEu|&dV=2TihN1XMo8|^s$eC^Tg}}s!;DZLM`A3HG%T~&ib9_o*C!=odEON z4*4VR7qMUT`(w6W4ZQhWwQl?M#qDPM*%s>1RJ^rs?`&sq>#lH4`?<@5GAlm=?#lQ9(-~Z4z_5Z{E z=kfoE_x?|ITpduC!{2}(AWv{yj^Jzb2Ym5E_6huEHh1F-*$`Zye!w_f#3;U_K0t+g z%RR!3|MmaVY=F8But!My@4Z*0PRN{-BImED1FQp>vIm2jY}erVwEJTJbe<2s!1~Qe ze1}Q&#*{vUxm@}NjQh3sMf)xe^~ue<$-gB(oyW-zgS(jjrwtbWMc-arhrLfWx_*t= z4`1K4ml)m}()9j5$NPl%`TjlnB|7}I{3u?4$Auxi|hMW zF2wKG_Xqph|8C;{Zg_xR<9KF-_ONGI7ufBD=kIoI4_u=Ag!RK2<^qnzHaUZSxIbrz zm%(^HK7JX_VUXjB=MZ&=v&DPUJYsx*@ZTl(M;~yFp63bj7jyXk>b)8M*LD1#^W1;- z_nH59RTpSGj4dM{XdGZ&K;n^jeu8}TFt$J9GVxy}=C{_TkGer?{p15Wsq1fr+gk(9 z+rWRv82P?b$w(7-M*T}_L_sA}IzYDVF-i55OeU2LEsch-0X=FBQXqiI? ztj}7A{d*^`!RH|7Kt9}ApZaO*sL|RD=XcX_YW(T(Im`CL(?9qMyx-@*{pZ2^7pVRD zBEJ6@a(U#fzt0}{68`_!{t+KPu>UXk{bE0tW8cQ!Cm!Hmx#nNc5$Ff7f9zdygW&(* zJH!Ee&W?TWWaHF^j+i5c4^Rh;flq6LD?9V~0D*t+F=ZNlDLAH>513{Jpfg5zjdn@< zuMS8t0s0{Eef$m)%%(I=@HKgDd|Bg_Vd-vj@B z@OADN(nHQL&m|D+rx{-43DF0A3DeqlbpSI*s5cxY))=P8(3)eSqYUKMWe9slW@A9nkdYRe5?;`%&@zu5WU87)s?8>Yc5%Vp?@@J!&j0@B|C$>A4~YAbSIGZ=5&XXj_K}BQ$L~i6JoLq%XOF&3 zpYNA{O|8!#>ULk-e+K`@zWs06V*INEj*5Te1hIhf=vV$e)dXBX?s1aYk>k{gjKi^v z@1ai|8O7HcMb~Qkr@*|vrTNMkbj19XPo*65EHRil=Sl9zQLrxu<$i(A1{z_8Z|W1o z2QzH+@-@o(-i|C{w!%z+Rq;iuSt(y!mZebooHyJxZc*p_Z; zf1LxN?Qf<3qn-XSv0mc&)K@0{;ha6EJt~QN`02z2)<1gy{>ok}IaX&d$hnT=3&{7G z>t9Q(@BF`M=KRcYtPijeeV}ewAQsqwe(-n}F3{QB&h#v81fR?b?yeb_yBzW3p{_EJp$nTnbj$_OJKc+{Q|88689c=kk?Op2)U;ix}l46=Jn+D z^bZE{U^ zO{czVXG$$FPlWn^?}M1{k#fJ(1DmUfe9a^}dX}ElNv;+DRrGXif!;p*d(Z(TIe&V2 zlpeVMK5G8@u-oc@PWZkx;C{{EPWqU0{CCuL!1-^^R`;#P&tD7PC$dj8kJ9frnvR#Y zOl8Yjr?b_iE!psfTc}e+@9;OtjZJ_RXMJ6~_s#4Ec>g<}`m^i-;{LtF{SUlE?EfWW5zSut-|JwajAMo{m#{T~caRD45t3JS^ zZ~TTiK|jnEZhINKPYoctX#_lv&{u6NFbUqB4>-*_2jLX&8XmEv@2~AQ#@62!cd53==jy*}{I-F6@f~)*==*zKJs_Tn zHUIL1N$NH}@E?AFzJR)*=nLrY`}fI9`akK_K0N>32+fpLI&0P9%$iCN{2?7dL8+J|XAY_wkg zKaOv#pQf1mo8z~cp*GX_An`TSYm8F!Z4IFN@D9*#(+kJm&8&|Sarc1!xxV=};{UBr zgZEq)^n?A!AfLGccQ3!nZzE6Y zZx~#TwI9}Kr~``k$0$7X1o%reKI`wI28fz}`uZx=`VNrq7xTT$@)=Mk&+8AM2gvhv zk^gV2?#eob;O{FJVb8_?PHaDMfA4zY{`qW0$6U5#)p&MZ(@3_YX^ej7@%%C8mJt_p zktZ11cqf04+%d5ux_gwo`$p>iZlf<}FMIm!{Y;Mky@CJF{cZNZ7vKQU1FjEzfp~y8 zz!*UPU;BUP-G9cX&;5V#pX2`Dvg7Z=_npK4KWv`x8`KJ*2aEwce*Eo!$nJajr`cr( zzL8DQJ2H%&ufeY>!`w#`Jk|#o!`GZZ59kM|3taUJ+%sgtnoO=&^aG|jZ;zn9f8qg% z1H_3ujbi>^Jc}7)B9G4{2~*hIu)8t4MZ5=BAMw0)y=dFTd`R-|!MOKH_yZn$UOl0R zdGW94Z;Sol0DLaQzeW7(tK@YI#5B}5c~0)Ze&Igmx{LpI{K$PaWnX3 z!|*k+2X{XlyYqGv-^N~j1K8wVY;wxiZ90L^euCp;#QI0FE_l37xV>&Te)kF%@BN5- zc@F49fbTBr|G>J(z1Z^(9=A?|Y4m}*qKET+_0=4IdW`Prr@q%c!b{W#+5^yOFSL1o z>zu&<0C~K@`pk%YPMp0$^7{OK{$60Ym+wrytGIvH&=%`7wEwvbgZ&ZCjWdsKf_aqV zTkpdsXYTfvdl39W>ikQy)Z|k0Gr0B^`T*eqwEgh?-Qd4# z*=C#QX`CnSpMmqk_iq}_KCwK<|9SWT#scT#1DwBRhMJ%){Fc`ezu1Fp9t(bx-)@>d zjoY61lWgBhU>x87L004bePI4!F#lk}Ju7j*L$4xr4&c$R{yux)%fHI@f1UXMJ^cFj z$@e40Rb3E1fw941`9WfUV+zNLI^YrP|GwAQJM5Xi$Tr>m#cbl5Pi3Rn^dat@VX$oe z&zgV`dFD~2ZfmR&ug`+Bix_k-_GE7%J? z|50mj0Qv#qTbxH-zQ;MQcBWo0^hOc;f&YmA6Ze3A369afTc5?gvz*to*3o`N`_+g6 zi2r-(8593)%)DuJ22_pSPx?bv+XF^_$VzI#?IlY!rPh?-Zw?TL4#-Ez6@Y*3zyC*> zd%AxEHcy?#ci`V4r|oPo@$XD5=d=V5n{)!_tuIY`=z*gN<4$zM&=xq|&CYN|7r?E% z57Yp?_x+pj>9xtk_5If8!Oh9t$?F@RcOu1SY=z%hN!QVn%Fut97VdhXy@VfB}(FqCr_wty%6VL&J3&dP= zH^9lVEb8yW#%&Ca%azlW+j&fIjSaY4p;pz0546?)6}QHpTt={!76Bc`Fe0 zfX8wH=!J&X*{rd1ftuj$_#C&R1K=gRukjscu6a7U<<$4G{p9r?h2MYV^Q`#$kG=M@ z?9mkOi~D-~&$-k1{~GhZzw+zsQP#uXhVT0hdH%W%i1pv$Uq1m!*hgm^mnS3!IDq|E z2khmuuRQjhZ0#*CGAoFgaM+J3c6|t(kH9a751=35vGan}0q$EitZy$5R+ls*6t2bC z-+0IREOD>s|L68!AD_CGdYm8nz~45c=o2K}!1rd|UD$l>`?>Uh=ZkSb!~(A21Gpw^ zCA$h{<9_0`;>*XO69RW)&*R|#tx-t53zzHjSjWWwimmAg{?N_t4 z;bnTl>NVo_hu9-C9_Yo>tLyQld^n^KGFkb`n?%82HAjduk_R7rN8pM`Y;Nu1r_TwnA zhiE4lZ^Jk5sPFmNO@CjHd;fvkSi9^Aqz6c`PssDm5o)7v$QeJ~_VUr!TVg(O4?TTK zpZf<{<42wUApL#j`R!x0rdfVN4$1mhb)34+T)y{@IU;-f{EfUP)Qx4Zpa14Lmy`eA zdG6Qy!i+2U8JNEbUXfZr?0%W=zC_(`Kfg!+)HTRe zS^vb93Hv?d{5q}m>DiF@{)X0>Y*`CjpT0lXPxgOB?*FS3mh#-v)zk0*^V#`r>(J}h zWa}=4%e)9Xh|f4d4Z{t`-pd}r=I;l8`@z2WS02&c*Rk*VF!+D?)t@6DW{-V?THd#Q zn;m%f4+;CnzDth(KZ$?!fcQ5CPzUTMrnsM6!>&i)&Ze%RE(jgqe4x+)i3i00Hy)4= za9(Jx1E>$cwwMP95&zBzvj5+nz%&yO+=u_K4lusghU!Oq9FNrp@wn(4h&lahf6u_T z*fch8FAHD-!uoL}&UpamSn1>hS-t&I6{=5f1 zu$OxD9;6ShO8nQ*FGKpX_)p`^SRV)f?r$@WZ$E|%Z#8FbucfuZ<|wU))8FEIPBR0j z>7<_4WBCJnIh+?-MF$Ksf2WEsP(z%@VLyI1e7t+}%FFk946c=KdUboiwdb4_+BSYC zb->trq!Y}ygZ;LNJ6P3)aI1;aLr+YbUuDJ#JYNszdzfGDT!SJ0PO;xjjIYm<_Kw0& z)VJ|_R<|j}k?P$v8yfo}ClWc|(DVNO{u+cS`)kPcf%Eg5#}f9>)Bj%%{+lPT z|C~1;DE`;XW=n_zRuBhN7jA-sMQ>k9o{XBe8;*So?Ef?uagVS6D6$XyKU}c=Mf~gc zKm7LJXODmDeOJ-t>0z)-uP9v7vA9#bigEamN^gLya4L| z@h_bf7W2ZYJXXwQ2JZF!Q$CQ`M*m;mKj9xA!2UmfyWj!Dx!6x}bRF~I3#iw__YXX# z)!&fc&fi(leg}q&Yw!TBV&3P9uk$$W5&emjQ>e!u;d6-Z`0T*GtGeKfp3s-mhjG@C z{RzYa#sT1Sa6|3`big64fj@4dC#(U?FQZ2MeCk4$bZ%nZk}cz&Sl&;Kh#Zr>B$HPW zE20DJK|#963wCl(c43>kh$)<9VGgurjEfI2jxH7dlW;1t%xN-5?ml_W%t`aI=;;iM z4>D6D=7Xjlu2f@bFCe-C{13qkmcjghc3B<{jF!m5ceA%Z518%6Zg+w0G#i*6UH1pD zSFd%Pxj{(r@#+!!hew@z0!PQ5-RAUqtXEEXJ@+=nU*Ncd-r#QMp3&D6vksjVIY4hi zm30jKPok&n`xF1#5cPp|f7bt`{ZaHY`7ZLDANtW48}ZyE_Q(03!}bcD?g3&JBfeEH z@s^y6T%c0J7pU?*5Ab~tfc=4Kdi%hB@2I{%wE%Gct9v(7<43Jeo4)^aZu{%8|59xK z(k5epDRcnXUuiu68~{2%9^ex#=nHBD2iDz`ja~M5ws7;a?DPA6j{PtE9sd7MvqxAT zeU(-GYxC=}?{)hAU;mI;{TJE3cbM(@=5MI|gU7>{Uu^q*yx9Lw^+DnPi+^eZ%mW-| zX3!Dpf(}tju#cL8hxoj^UieYA{ed^&0<8m}W*ZKvpWngSz#160Hqd#2F*C5nz30A7 zHGZ4Z`vmiw=>OXfFy!y!J!%XJC+P2&YJ%ly>)6-l7x!U%!}pFg@pI^JF)x0_Y|(}X z{(Uaue!0Hz_k#ln-I3;m)a^vFAH1KKPkx4R27il>!}g2)knjtvH?z*%`BUn#DeIM~ zTNvI(d`DbaO1XV{J!h;b+nqI13%Z25@blUhvh!M*i`l-w{eUmovx!*|7gAda$Ak`$ zckYLe691j(f=>F-`_{u*@P7UH0oEA!f2h00uzzBI8r^D*%q%*33hYmi7qCauJ+WOY zVBfvC^s$reM{kR(RKI}FP=OCDQ*)~?p7taFpMC5r;tYQA*$sw!vDdxM_L)%!+{rv^ z_QM%teKcpg#7>}oR4Z>zw;5Co0{8v&$lrH-F?38=ga$>6T1NK#TUr={7fDceZPa6lw1B`9D6QM7EJ-o{-wto`aKe0P2A-!;attD(f*k2B( zFaFK(Ey4Dmw_+qaZ~17pbOn6>%1Q7~Oi;)F`QU#kxL@Y=ZS&d3^aOXOE);otaQyz2uL{eZ{?#3~oKxJKaA zd;cptP7H7gU2pt^zf-w@ z^YF_3o5krJDfgpIUpcTNYXJY}ubI!5P#?C0b!jX0qTCm&uq$oq0CG%y@B#f?Z~u88 zu|SW!)CO`@#;Ztev;Hl<4fX6};3VOn@7Q{{B;dt;Z`><;8thL|LpK8FH>8hGystjU z_trEYXv{$DPfd;cin+I*_&4Wnt&Miry}r7cOP=NvW5a#i0d}3|(LU~c5c=$S+%e&P z=gjy3_pR7|b$~e62k6Akt54joR2|^sd|w~`C-XqY{`@ZR7Gm2N(VC~kXMpQ`o|LsE z#E0Bp@=9stc!K+B+S(dyiSs6E)&m$DS$Brr89{G2!`ZsdzVM&mQ^ozrX0VTpZ@o7g zXC2vaD>VT(kOL(CpS^e4OI6c>8tHiqa&$&O3&u^yw2U&t1 z5c^^K#s2yH*8b+7K=+^5eF3#v$Fl>U{~&t|yzl$mPqT;N0Uw43c8>42V4F8w70PeAx!o8(b!GEp?upeUI-vymqe`amBb{C=@n6fqYz-&L#!?!)%GCSP7V&ao0Y!Bw3h4-h)0r~`_2-@l`% zlj3hme*>?N=Tbh3_l?i2xtF6k=AHa6JMbSaxR3kzemI}~)Uc8t$F?^n{Lf{dST&P< zeC2dn&tJ{`gfGxc@7U^IXXR5{O5I5xe#5|8{89MnGWaiVWPdR7$fM|(aqja`eB4p7 zfesi0KiWC*KWBdxxtrV{pl=4QRvj?K{x8nWbdIJobkzaQ6IKTpgS)q&b2jwF?N1M% zytoICHF?_X4)!s1Uvl^8a<49B&DhP%x4VIPpzIemrf>w4fzXV5&HalnBnD|+_15V?jz*?#J}-> z(e@X0K;-@wub~fIPar41Lp|X8|B~eRx6KbQH}p-oKtAg>_7mK;_sdy@d!>v`aj&2% zSgsihz$ZB)w9LIX!0%D!_fQ86Y5UQ;;yv`VI@{mQb9r4bwu;|N9Z;=7HffuH6NiP#C_-j&)J*f`}=P~as4!Wth4fr1@r-C z6!f^*Uw;L)o74@vmv-(4@VjdF&AricXB-~;Z8>Yi$Lavj$+94fzK5^zvAwy9vwD>1)ib722j~~*W7)&6j__KaOPovHN01A&zs%o4 z4t8!gy{hN{Ywgs>Ns^Cv4}K3^De>75=gq@SqN8Ww;>W;$73^2}o~vtbAP;aII^b%A zyv!JLdwSNB$D0BF^!MPuE870B`(g8A75hu{`_UCi*3cWE?MKc-K8`L}0uS)9_6=DJ zvqWw<^0n-UIH$g6Klnd@txxtJyD#?l!2??RW9_f}zj?nR{^kFb{|x@E5jypq#rXf% z#0$s?KH^?Nul_o_-Pz%He2#hm_Kh*Me6ZxQzq z2ZRqI&f}aq!RyAkpGLr;m{$+!|I0T|!|hJ9XSsb(-f!dE`Fw2m>dG$W-)~GlpqN*T z1B?e6z~X>_(RfVqJQe6O44iW#pM*APQ7wf^PL?3U=fLAZ~S_{ej zq4-+_cN}x3YSi`&U1+TX{SmwP-m&d9eEc$XenXq7^}!dbZY17d#+S!_kJjbM0aW;I zYkbGG^*2%v4EHx6Bjm`_|^BYuD2-!<&Nxc69D?E5c8*Pq{#`~Erh=fVFx zJ^=68vpM@%=Vo%Ox6uRi!|ZW%!2VaM?;{VO&;O`#zqvoSfW7nsK0s_B{%2vk7|3M(Gnw`vrK< zzzM1YD%kdZYO57>fHH_wkeXb8aX?+d{!f5?e>-s$`11Emwp5&gdF^fd)@ixc+KtrKt-@xCH-$aLdic|Je7X@_yI>ai8uD?vJHw%qdw@LLWKTG;wdp z33iQNj%{L}$PL&hL_Jc4ry3!)&v{f@BsCgyM|w94o<8qQA6Oler9r6Ptb!u&;fqi#W46*;#^?g`J38x?RU)K za1DE||KK%gK3|HV=YeET0iQ4hw%MR<9~q~Kz#qc3F>?*W$NDt73`2Pz#u+=I$)64 zRB`{0G^dSo#sb6jSYP}v#(dy@v5oe8^x2B{qIf@udvPuf1M{Bqxwtl7uRcld$8&yu z{0(vJ8u}=7k=HBg10}s49LWfXzt%aZTfER(OdCT?;`HM2YY@W zn5Le6JNw36ydPg4tk-4j<%gMz;U2imn85#7AjdpoeKs*$>Y;@j7{f1%UM%xzdGDu(^}FTbJT?|c^M_LWj_=NzFwXU^9oTg3yt6mE&<~zlEV&-Y z`z!k7NgCe|12_`GNnyd~rQ42Y}8v`Ca+} zi3N_s100tdBp+~;+@O6!kG=Ifa*)&qfBG-7E$mM^N{>*g2Y`DSz=oHxHx=T2@jn39 zqW_;_0kB>M`-<2%{+GA$xB|WcN3m+_#hPmo`<@ez$tLq#i|t~}A2mVZJoLb6+;h%* zB<_`X-q-lPMQn!-&>x87&;!NmPWvRhZj7PkI8aQ|`e|M6AuLagVl##Uexlt%8E;@{ryS(_02N}BzIUUhcIhiT@wT*6*RNW;1aD z`Fm${tf5}7g?inU@^{qiHc*SZx_lvfeO^V4#kKhQ_FOB}Ud}kv8+~DoA9lY9+&6cx z&6?=%(e{h~bJ_l|`>rW2Ag=Q_Y%s19|LXbz{?!3Xj0uSU8%xXy9=e*knnU#e{$+~$ zA2Roc?SJ5NKf(9^yW|TTfD3#SpWu-%!2!V0YybZ%{=a&`9-$N8`QHe$Lh%2O!v869 z12ISJFg?ch2sw9T&%yVo5B_XcC2ky`=d~BTTS6-EuYvyoZ9g{NxS&$^16%|D&TLKl zbbz10QeZ!DRy?nr6_Y8iqpjv1iJBdcPuq6&2jV&XfQSQpoL<9wgnyuI_dR`YKTCZR z_o8d)pJd~Cef&M1Pjv|OYszrbW%dNEkcTtBxmTWmkD@1P7rn96 z_*?h4^fdmd0nq+)AAD>jf)2>>pU;qKfNNgXHir&am#yq478u+?jSzDus70-9ybT>_ zZ98?W__`DP2IjwJE};hK(gO+qQ`8|%ac-VHao3^)%n6tqu>N8;%~o_SIC&X-wh{Dp zUPs6G0?*zL-n+2jN}pKgu{}7>A$3m@G45-Tx_2XeeHT-YOKm^)z69=-c53@q(y!m7 zuHd=`Fu$DFDUHZ${N7` z^6FL810KoleeTc60W$aRl@Ai`)d9u<<^i<*;(tGOU;qCB>i^Ga|E&W!hy4#fptv4G z2b_5Se-rzQe|!dXz%hIPoegm2zY|G<4feVo=s$ASHi!oT-r#QCxMH+X&gEgt8%msiA>pg(_rK9zp% zd;gYsaKG{Dli6Bqviy_vzstz^Cj577gb(I^z~}!&vi+`b!`gpr#Q^}u)zw~eM_g23Tpq17z@79b@7VuNHVnVji#-{@kL;)R&zXT@UrsR1{t);4M&i4QL@eMc{)h1Ee9kYw}KHiv7De{Wymar{F-0N%jID8J*IQG5$tgut+fWUvk zJ+JdK%=M4K{e`~q-nBl_8r@lJ@8&D%oq~f}MLz!%@On$(dY5)k``bzl5VE9Yf%*`H zxPJ-QKW`Pjf8A!B?<_g)L1kI{e5wst10U%8i7s^jJ!uu{NJp40GkO6v0bAMo2Odi< zdx+W=XNdHJF=t+inGNK{))E)YfPcAyS@N&*sZM}8T6#U_u|IN$=10X`aI2|?s?NEY z+7gh=C#f_>!sc{J%)QXhpA4i!p$ck7hk1U zPpR44#BZjQ!6$T|kM(#N-zdMm$EaxH_~vKI8kN@A`R%^{tzk&TF)OmcOoqM6@ zqHHB|A-l<;U9|75#O>|Ju0KjWz$35G2UN#=aeWM5K>z=~FOegBmmYrbyBPaEj`%;; z+}}T=548RE0G`CxKaGFwz8nBzO~6U{!Ef^TUG^6u=kVy;zf1cI?ql}IWrx3&)!6f+ zAAZ>$p;R9T{@sJ7N-UYj`t)b<8})Nfm9QOs*bvtWKAgA|`(jw^2d={(7jJPKSPTs2 z_Ja4}^?~Dv)q}Sar@lVv36A6atRYC)-aw(pKnQ<_CMDF%UroX#J{o>8?j8^QU4#@hYnZ{7ueLj z2~KKTnnTfof4d6lLJtgYxjo^3gt*r__Huo{%1-x~X8zC+m|7=4aEY8ij{kM&gLQC& z>&aCt>?TgZH}HS)@0V}WcM3g_Y_OO_Z|iT_e=uac13sOp@9Ml$^?*{rFBq`D68x9# z%h%RZZ|kx7xRiGzA7@TZu^-QRoGQM+Fn)l2`onxq8J@uRc3!XV>#B^&w{qPO_s9g- z&cS&MZ>1K}oX9q=U!Zqt7;JUJq2RlV|79)X;CeD^?wAGRYw-;>WNXOnwGM2d?vi>7 zIF{8t8?$C?f5JZB{bKx!>%h1=pa~seEnr>~RL4H}S6}GEEycfEf^I(#?E9OahtGc= zzheV)!Sx4QnGMm0UK{5(xaQdVaC_GG663%A^F06e5%>@OPy4^P{x@_%;Ql{cvHvH~ zANmSMz`Jr5{?!5B!vFu~ADA`tPwXK=uP{Eq0oDg!`!L(X-#l^MGw=b-kHZfbB)?p? zEd5$*%Ew3~gewf%7a z+J9vkdSEH{g!m5~pdZlC3P%M$nCk!@>xWWvZhe5~n&1zdDJ}k2I$IttJI$8B?oDkc z??wH(wZ_h`bmqMC2HeAXhWKFWB5D@MiCYJ=pg#alxsD#1dH9@hc>r-$z`wR$NpThb zvz$uO3H%P?U5R;`;!~ZVogPBZr}?_fK@jtU=tKR0TC(qVr}`!H?_z&=%Y6uX03D#7 z68qEqed+;UEB=k~V`jHC53@WUvwX(z`6tNvPws$QPC0yfc&C})J$M1w*A7#AZ!hlZ zF>pB!m&ZH~&Nnf;Bk*re-x}t0iT|+w`T$KG&haJosvrAU+$$^41xoGL;b|14y?t%}vX#ZEU=^LJ*Pk=e@_yO_&gZKe*faU`F;b&7m0KZ@RFaF&Z zB;g%wx(4pk}Rc#pW=RXw17 z&|e6hVO@$nc-lnqAqU}nvOM2U9Kv&J*f+u+-{s&{9k8^M+@Ave8|pfsfqOzx2Q0-- zG|CAh4aAG7CJ5X|ZII_zP#@F;7vSC!&CHfv#lCWD*o#6PP&1!Jj-Zn|!xcQ|eb!7J zp?w6?)VfU}as+eu0Bgw&&cRd8!3R#m)r|2wg?)7uclz>TTKp+qBfbOcJ}3U2ajvaa zANag$dOf&LHXq!JXYsAA7xyFJHs>mG&cd2Tb%M5Cj61JOe?YzA@f3dk80$38&C7Ly zcl~|w@B2;fB*#P!uNO|QXAHdufA37r2I7A4-+=vZY@NWqgIjq({DKy)X@MV1*zd)+ zLW=m;7w~byJ+@x^zYP1XXycQgFW&2qBThIU?mzW+)P1@otI+}cz772LO{MMGYW5W9 zU3(jIbg0vSC%*d7yQ$7E#rN3!N5nrdKoR>M7x8cWU+n!mR}Em)0;CwB9w)@PqvrXN z{m1_g{Db+k@sIt72RM!#QwO|9uORX`{m1qTKlHAT=fC0`vz`3;A-Q={jlSn54?-dqHPXLi{rp< z*leE@%W*!A<8uT5#ntDOcujm(;u^SD^_LZ6e|1BO2e4rk=FiyozpQ&(k|iDBo?LGO zvaDk(7-x?tWI3{|6&=vJiF4MPZDv&`;0GuL{3q;V|CduA)PNrFerkkMY@&{QC3{V_ z4beZy9DxpU-i`DVE$`cc4!RipUzdD?X|ONOtQpY8=CQQ1b;%2Y?ivZME1F zkF)Uc@)`1N$@k_vckj%!Zx$GLZnksuN5FT!hbI0!udVW&GQ#_L-se-To%MKd730=1 zgW*Yi5=4EVUQkDk(L<>|@OxAb%uv%e!S&*Ok{LeM?XD%SGDQvl5WK%UXmvd^Q`wWF z18&dUo%1)ueUjEmI63_P`n*2J(dGy4?dMsH^}u|rK5vgt z5&znM_5F%o_5xuKac8~OxJR`87vBB3?7rv!GCTa%ZxYvM&(D7Re`|miy>D zM~MrL5*OGnbT^#fMR0;+aDr8409N1y)dAu^3D^(Y-;4cEdxC+_@c&)Kzqk|IVe1#; zzli(5w>S*DEJg#nfm!h?&Wqx?qQvXsH9ii!`?|n<#0bGN8vk4Olll%=?LRZ`ZXJ;L zan6@DKj(LD%>^B>6lvgbV_gS`|K;sllO9ON3IFN>{eUz6K#qN8O~WNLF+-q0H4*){#5vh!~{x5UHGvZ(FbNoVV$O66A z)b6++PeU7g9GG7Y=JorRVf&Z0P2l(E_Fvz?n!YCTd`*e(&wYJuy>>sO$N{Ja5;sui z28+kyU+mlO7x=ff)4I;a4)i*9!1*t&`27|B?-Bg2b@Hua3JU~3K8%}WU#^;zHMl661DC1X_u>B?OGkJeGfPqvC z$o&IumB{}EPcH@o!{=JV?iaBdcKod8@L>bPvBq^i_Vphney*4g-J*Ue_9=Nj#RG8v zQJXee*FzIrYwmppvF1jS6{`e0uBI?OO*SWueGdI)$<|)!^?7gl3U8yG*j&O`~6YzPS&u4YsoAB?kwYxr- z>offY^T6~*f&bDJ`*s-nldsp`Zv^wX{bz;$6aV`D`Uc{^neR!gN38E!)B*Ydfo)eY zzoO0!`dq{SK4YA<@?`a*3VDDJ$1jt z_2OO~@c5g|_Ejf*gouCn|ET{JH=8t`g{lwq|4t@Qfh);fzU3>ifY~hyYsTDRBaE>td z6f%asi{9YCzBxd1fq5=%mM}l{$e2xhv{i+NwLV3if{vJ2|Os1y^I(pE17U8GQaNSFjhw6(_STd)Su= zoKNt5jq!cVpwHIg%go7X@_&u<{f+A1^PP{Q9|HgCgkjG4c!c*19U-ngr!LW#5dZG6 z=gjTA-rn4#oIbAw?|xTe-D7S1c)~uhJ;&;+To0HFAb;RFIK$bU55fW118SWDdumfB z-9_x*US&R~et!E@*4#b~PY>=p$jc+1Urt?*IRW{>Z=GMg-sh3ma^C--wf*GS z7UTZ_dO{NHgNA4dl$VgFC!6Ffm}@Dn`ugvaUw zdIg^38s#Lqz?lJQ203*?2jBTUb3}idU32_9*@oL+W=|3JlSdCspz9{=(S+})VIRf4 zb#wN1m*I=tCsYogWDSkycy7=)*^S_cGK+J9ouoN4=49RUh_6poD2mdQN748?VS_^o~OsO7dhwpC(|JDgC?^<9_+Rfw&x2GAFbL0l5@BzlRQZs}Om}D09EOmn$ zsZ-jD4%oyx&Hp(L_9y9Sn#SJG(qA-PMqtzkHPV~#(pQm#OvCBF>gHLW9RS0JYFArJOiiaY;<#)`u@fP>V*-WAEsu1 z5})6Gh!OfC)B)D-wGZup`)A+XUg{>h;rP1evz49X>bejfH}Tk79{1?cjyI8CY3{(^ z2dho;{B>E0Pq3O8s>PfjIzaK)a`NcJD!z`D&e-^DyG@mrI7fQ$VK zeMii89_0R5f6HgG>%ho9dU~Dn{SY-j=KJ;eb02`(KJc&4UzEqt3ySqWi}U}BF<Pc(1LOrC<8OQDwGXrFpZsCA z?Y`I8SJ1r$nbStTX_T6?A#hCFM;@l{&Oa0`jrwon&J)*rA^J3rQz`T$34Z;_R z>(l|p0OH=dbZb;6S)DzTgy-!2P5D3cfbqaAKETE+oV`PjEc;6|^UxF9KmuPD~()}gx4*vi?P2kKnpoWr4|3*J!)2$+=qTW`hnaw zdsOu@$7=GzyNH$bs}V3WMa`g`+q%mSWm~CJ+;Sy(Kz#j4aO++*lf>g<(^dPMVg~d^ z4cjYjmBis;v&Cun>7Mi2N&Jl(wRq0gO*R|M_Q8AEbLV4MF)yZltmyN5uK0L>S_XZ9 zIc6yMIiV-)gBabS-XO2I$)0HP5X|edrmvelIonEb`#skBtfQaWI(~9~;J>kRhL{{4 zkJ)|VUz@)YoUS&;LJyeJR|l*D>n-9RSuHQf_8%}R9!af7}=;s?+N4V-Ui&-1hm z9XWTq++0oHw$yXj${hF-_thx178mb(GrRW%_WGfx_x_jJ?-w0ludkec=m6{ei`e)0 zF?7NKW`jiik8^+*<31i2v3~q}|0mi0;yI5`@CoDaBiG>!X6Y?``Q$J3j0{}AM$$BJSGtD z5o?4mpl&Go{@VRy^TBwmo*NPCuHaqqIQ$58#KLZBZWBJxam0Sk{9e(wBXRcf!6_eD zz`uGR_yKXhq6=;SY1Hn6d+ok_pSEAjy9N)ini=!TD&~jSJ7n#9Cv`Br_{G)rH-IZ` z?p@&f{^XZT!l_MS-{u^iZ!ck@^g^YZr-_zvoYu;1w#&WU@U*C+7U z-db@kevR3kwHvtC#*6c?>0VRYz-*Jc4)9paMVU|)V9 zBy@m!K>r~50B{2*%n5wsACnyU`ah)j#r=zJc;fr)E%F6si9MB#v9I7bvnNLBO;;C; zGQUZw!4($k1)L-3_m%2~SySHt{y?(j`UTV$gjCTXA@&-pAC!c3@SYx{N7Mny52$m4 zVeyU!YvHT9Lbb$#x6_N`3k>v~~? zT)TKT{}w)ixwfFi9!4ovAFVq3>d(G5jG&9TDy?)kElhxs#LCkOJV%9*r`wB9D zY?S+b`@OGbw>xv=klpmupJM<2CiVK|{9oSdBmbvFydSIfU;JD9bN8$G3*bNS z9C%;6#`EV||5*G7?vH*Co}sP>LI*fQ$T&cL&>4a!-=k*8n!$J3oBSPW1>e>e_%*Y{ zewjNY|pzb^9Klq&2q}c<`Br?xk_v6z(e&9Onx42dxghV``Zis8d zyBLqhVebR`zPHaO`+vpJY!h=H?a#4JrHXwlG1uQcrrrA^WEC;I@j;Wipy$HVx*%}{ z<_ygX)_nl|{?mECK5Twn53DTVYf>M)68zim+JKMRhz?kd4(OfQL!SH=Z2R5G{%dc| zwYwLExi_&q3+893s}cX=em#0?6Y)zPds9DD*8#36hsbO66^g#U{<^Wfet`Y;VqPq( z3&Nhe*OABKUaW_I;I-igs1HIXc;44L_h1^nPyZ$N{bL>ialkhDMEL(n?Cl_NPd|11 ztzdrDaJIC0nAv=_tYOt?wgN721)Sgt@&hZ#0~9&H75ekwTQMhSO+bjxDNV!(X$AW& z@OmwN*I-_r&mOHNe6KaweCIuPqUSr^+ll=fhOi4;Zhk(y`rtRRYma^>yOh1ZZ$uC5 zeI>{L0qXsf;Qz({V*c;(x0w0=R^Iz_7c+t)|0lK=<31iQ#(kW3HSd3x4p_afUDR)L0-_9;1Dr^yx>F55_;+HvRj}1QMPOU*RrYWpUtY& z43@1GAU808{qKXTE5S+kgHLA(SUcc65q*OZdW^@pF7gQCIj~+_#kzVSI03JVS+Qqk zl3~ZS<#o}APklsUAFkV+MAReXIflI6D0G5&7we0CgQ9;Bx?v9g|AOnEN;$z2d|4m& zayNT^c3GS6{(z(I53rkihJC^6I>3B^Vw|uXU0}_Se*a3auIT?q9B|qX!2Yl7*C)XL zM+Y=h&no}F3?8u2Isp1%2G(8&M)0L~nn^3% z4!saQK*R#E`Z`7XuicNm47J_vVWQ{*C}G#-0eoIAPrQq5SN#IT=X|Wq58Y9=wvqZi zxeM{1c)!heu);UM{Y`B5dUVaYtJ$-Iy%Z|o5x)Pt<{|dusxhZ~h}!)ze1Tcwc(?#1 z<^IJwHeGCk`4DlxO5YzjT_2EifU|(q3)T*Tb>gixWq4Tp{j@(QHCUb4e0{uxef<7D z@}y(bT3&G5XS2&5ej6X)OWF3lU&(I7{@?e~U#IyV`u~Cbv=T%AJN&=>JNj^cpX~pg z%n7&t|D$62BF>9Cpm<*VpQQuNf&ZcoFh8jMKW+OtPVXsl-2wNF!~^O8SMgu8_n`yCe#-mH`&TceC*TrfSBgK?0jv7q0jL99O5ad3 zF=;z{Sq!Yb0lyzUe=Bwu?o1!Rnj7)G0M^%mdGTJvy!KtcUz~^E?{Vk^SFh3LYya~Y z09^;p_4mW}ho2uYfpNS#p@{!@PT!$Ioq(7h+QbZX#A9cn4#WM8;q#AdzMa3p*&ytz zx0PJPCj5kT^zu(p2RVYC?4kd54fVf>`*d0pVD5iKJ@04kPhUQ4ek1s{*FrIWB8R%1 z4jCRYINS7Gm4h_%eM7~@-S)t2@LCJ$4i{*bm@USviYoo;gXqgaaO-TLG-r%@ z!fNU*sLvR}&rh{P;623wa02=PMSFiP{O7*F8SINu{QzeYIyctiglBPGm!h3d7_Xn# zR|vl$bVuldc;6A?7vFb19Q!)BfC_oEe(GS{BfNXc`T6WKi$83Bpp9O^)x-qm3XKKi z3O!CdLEZL?dGQ~1-?(2LU>;EXujVzYsRd3vAor+yPAwxob?=dt*r+b%2-z<<0uMNX zEp?9I*w&oGmtQkqDW2s4Bd*uB%Uy`^z`XiF|3G~Zae>^w@w%(NyS7|xYtMbGy%+PI z^Rb_$jTiIUd1VL*yYK75?x&cazjuIHJym!Nv9B*PvCTST`k;wzMmK}C`K!^T=)ejb z2swa8>VTJF>l?wkb3D!SyWc{Coc&pn_gmU?>AZ#LyHXeUxDkCIry}-O!|As&%ds`t zeRTl-{t&f2U|+w#6`!sJX=gw2p0(satPi12cI?tq+1l$~zz6txcFoc6Ww(Cn&zSMU zUcca9-~TXpKl;_*Wk-mcm9wy~E~w+*_+R{o|1alP#I?sqkj3ZDdW`Llo}e>2U{UVR zJRg#DKpp?;fZ+e1((hL%fd3QJ16dQ81ngTke1i2jHA3owllTBf$qydn|9T8@mcRq# z39TKz_S6s9Yv3!{y4zmNMwu-#boq&tCrR}~d~cQQ%ok!t?Et=f{}yt>h}c(BjsQL{ zj{(Tz6Eir2+?gZJATef`fLm}Kl{esA`2EFIj3!>6oSyS!lP*9vgbvX6kD4K40>!!| zV+AF2fwte*PQaG`Qm*IxIc~kI{sG;Tte)R-snX~5F<4A5hoza6?p~pg7feO znJ23KAEh2(m>67Ki|1M5e*1*Pv@yR}7yC;103N4n>(_X#dcx<$y|!OpA-^7Mf?@SQ z5&!!3+I>GutcO1E8pY@J71Rgr%Q?V2AOBuw`#AfkvcY}3Zsd7$3*;E)uA>*2Ysha@ z*3nbTo*iBA0L|0^EM@-3`S|zC5cv@8db0D$?%N-1%#W={8aS75&uhX5XoBm{kBR@` zQku}E)?u!;2NU1F6(68;*t#QZ{Y1WZTNit`wol*4-igdXqXw#(5)7_3_3ds>LokDIrzuO0{2A8X|LwefK-@EL9$Uv}Jzv;- zvG4Of_BrDKXZSk*JjE>J`i)`w!F+YS+@d!BdS>=sPmL132fCrUz)%%d*q9eb#c?y*l2`!#d*GugH~zm#3^=zH01Pyc0hKeM$T z#1FRT=KwXp2j66-U$XPW{@~&ewKR{{#p8o-BiPORz{{QB|8ZvXIoIPjbNm+j@?q0Y zuVCL9fB%sbF&@Ve|HtEVt$D9dj{j429?)Dsh;u|v@^>ny&{wX<*N*$( zuump_Kr69;dSDHv+BKY$Lfzt{N&1MG=Xn!Psp09Eks+};YJ4seEN zKYJ#WSu5y>UV5R;$FGE|m#1&;p&nO0gw;IhD$XlDw}!`Z`m1UT7U8kytZR~^ zbT5pHt z^l8_O@6X6`as!__M_&zI@SE|ilN|p)>j#?(vEaz>kyDbc&>OWXhZvn2GuJ=6^^ z#(&^F@_F(2^m-2bpUajnKKGxs|9>?8$qia3poA_sN^GDUh9@}sHDViP4nFeQFS2`I zBsMtl{cOjBU&%Jz`GsuedUe33v*~L-#rib>V|GdLahwzTCGg%yU4eKH9zx8gTtqQ1!Ld3({F}E_%wLHA zwe;LLBUnGc{i~d9kmlv83+Sisz>c(mRk?u{_piVYNHPppz_E1$@&YL~kn=;D@$dEV zUG)*v6Z#A4jg*h39;Fwqv7elr`-^L9lb;RF#Iwg?y92{wR{JhqUB!AH59IZ_i}9Z@ z&2^zae4YHB?;Y_)yx!;RNemqz=Jf&81O9D^3uLC5x&EPz<`dZy8JjEL*9W${nSEyb zKS2(#mN-E2hv)+N0PVln?*pq{*z1j(u`{bIdvf``Z3qe$#GvB75LA-ul_>$^+lbZansb?2b?V zD7*hfYJOj(-}jAQWAm`}?_l?}{dN2QI6V1b`f7`!K2Qe~?SJzB!^X4z|ABvFiee0q zj*I?(;sfLa&WM~~%oaLMj^OAw5p=>)at4o6J9vbC!lT4D{=Wyl^7m;r+Fj3oz??Mo zz+2heO)qAX*L*q~WiPuLK7NJxz6y>8!Pfv7SIXLY?LWtZ3dhbT8bBXgXOQHAhqGQ{ z_tG|edbmSzZq30*Vc+vU?_Q^ApF{1s*ycALuS*f@Y4!=%r)d;`|$OkmT2RJ`2)eW+yx*=9|K}hI^HC1}f z%tPT%^ig+E;(qPpesv8S9JbuY;#us6E)ehHK70ak?Q>$-Yke+ky^lTi^&X3N-&-Fb zVZDCd_wu}cfquR^K>t7Nzdk_Onjd`u{S@{+bZ>6==jy|*hrQPp_s?F9pKu3#i_8VU z{=0AY0N5W;KY-Z|@^VSA|KS7JAF1sZ^NR6+vI0J!k=(xfu2|2b-Ea5x`upgS-f6x= z?0x^7@dq;o`F+gscTmeA=hsEt-_5L3YyEoA0e!^%C49+I`0S1J!|gfnZg$hDKgsTS z7T)h=_xi)$zhSJe|1b9Qod4ta|K|BW%KqQ~+K1U4%-uN%Mzrrm9$);Q{4Vpn3pyb^ zk5BGg?>{#F*Y1CmEcOxNap-~APc+RCwI&crv&5Vw0`6m;P~->A5uPpRf#e@BkBAuO z2=j*ze^r0r57bBhF1zD1A7ob?c|W^|{fXD!`cgJZ98iJhtFVVk84OxaR0d~*!~s>} z{xaAv;R6gHrLFke*yVOg6r@D^6 z6>e_?Tc7X^#)mf0OTZr8?$=?=FZO-DLL4AgwfpJ-ZNGKV*5)UFpW}R`KB6A?yXyZZ zUjU9z+_&QEYxC7NJyU#daC^#W+~b=$%fnn>#{@MTb?h6*iTyO^27btUZt}{fnehkj zkNv;li9gNm{>)#q&$qrme4l&$f`4m$&gA>@IzRD$;4Nxsk?{S){@?c557Io&nCBfl zz<&k*McojXK9>%N=N7N=`Xc@pA3H}V%@T5U2$F2Rc0Wnzf&B4dxB>Scakju=1#ZB7 z2oApayW|h-Wlxe@>7lst__wnQAO3PSfBR>%sT)3>jbT&u2g=~I51ZP9&F(=D8;A94 z|G}U&MrHi}iggC8<`&$?%$T6Yxrh&H^~au5h7>scVdmuwgYRLu$+XHbntMP8*w>Ku zNJIa`>(cvzd-1QBgGjs}f8zxHi};`2eKPqH){55XnJ-f>RAT;BAG0<3si}>6p*D1Y zb%Sl(f6f?G7py`T1om5N#0%hFX&;scznb~>O7Xw;U)w516|ouk7suLm&%26U zMclf2PCcRcIDGoJUR-VRSRzZ&>Y{yq3M z&e!Hwne}1L-~AE0$9L1?bY;S-cl+u~ z=f~@uukJnz-IMGG2L6@qw8Hai^Wkc9oqT+kq%HiIr0V)j54f4hPoP}LrT$uig* zsEfx*j1S-rD)}`96q;(sf>|B>sW-N^u6d|Fl1W9!WX{ z?4R}n_#A5*#s3WWpMlFXPdS2avW~(0VhIjO>8FOYm)Nq4nxW2#8@T_jr_ROtVSIv- zYqGXs>j(FomX;bAKtFV%D>|%2;aGhk|0k~G02O2Nz_R|hqQ73$3*t9o05PlG_8Kwl zd0+4KKBqqLT;N}<2Z!ME@ma2lHeSpJ{>6Ui0Qt2tzII?=A3%H$%w3ag{~-0u9=kVM ziqBbt{};#d{;uM`XY6uTxI6X)YiB<|Wer@QxVLAj&G-OczZ0F&EpGt+d%=Gf_;(-n z4y1hy-Vgu3m+wzq+&7O-rjA3tPyWXG5c@>zRUHEV_O&eB^n7*&e*cZ9ewf|#WzQue&4lw6qKRrK>(m$gPhk+;WbE)^g{MYyef0|u&^qX)6uV)K4KSw>m6Nw{~C#-?t z8aNxm|8`c{7&*BKu;(0hWsDx}32gDyo+rpJJdsUb`D7B0C#gvoC!QOpcVQIWo^p`- z`-plX^g!YqJXX{lfq&m4aGzeIkDx9A|B;Uj z?92c8x0GhUID7dS^N-W#Tb`G5%XNUWe(h`aocNcYcTN0%-S_XHHdh@W-aYPQ@04z8 zpwtH;>V>`ua`~LocaT@;)Q2Fy-_E|lo#bJ9@csMXAH{wN+z(RcG_c_QM(#El)}df{>6O}|AG6W4#@4lwZ3P|x$v$H4|`r*i+Z4VK5YKKTjd(+a*X)j8G~ugAo|L^ zM~LTrn5fGnbqXF&u})s`Bv?O{jggly?=!}I zAP1x`=q!{m^#|uB(I->r7T<6Fx@WU>*YkH=`6+Y*uh~UigZ>Bc%Ky{en?CDNUHO{* zx$mvAO}X#@Li2Q_qgjA3LX2WY%m~m3Li2PqgRuddd9ay`!GIad^X&3aw#!v@-PP3} zZbx)^fwS3L@9YJ4kTXQy>Fk^E2W})bK+eES_W;m0pe82$;@>rC+5msc`a|2v z(HCnaF6j3SX$Oc=DK>v_E{5%k&yZu~g;}vN)5<=**EiFbGSAQPIp}QbpSmxCzWaH`>x$mL zzUX!BfAzg`;Pc$8$N?}uWf68hy8esc{0l=6dj5;-v8dgz?#~?GH1ZIq6MsApJ{5U6 z{Q_%_Av4c+Pb&9|vZg&X5wZPe5l33U|Mj99$oIVS>1OTD?=*Kj_+#pQvDW8>e{K%F z#yTG6xDTV>4}V1f9A0j~cf zzsV(##QT3`kHY`joPZtz`(-}SYmg1jDOjKMIQMo9(g<>5zw42;sffMozz)0b**_p3 ze%EYx{MXH0kNm7zcl`Uvi1(Xo_J6loyXVd3%AIepR_irn#VgIKP2XtFzxO$6oIceo zzU^`3#n+of$c5o`VD_d*%JGt0t3G7KQjVA0@-;C22(mz#ftm!AO5hpY|E?7;u{!`jWJt4S8n)%>=4)OlE?By|!Ilm!n{^?*{ zyh_ul@iP;7Fb#gL_{HWo)~BDJxxQk@gYj1Hw{ZaN``Gw@i+qT!V7>IS$)7xHCOMVr zdhlOxU*dh}d*@1&iP|FgD${tb^LP*LUwAG#K2uhJe{0O}f8^Sbp{vOI#=cYcFTMHe z&8qb;G}rBYr`Z2niTmw+;V;eMZ;|6m9P8+t)XhW=j1U7<1{~&C|5jed|HXVwhu`~u z%3fUZ;7T6s%j-CR=YqSM2cN-l&1)TR`*iW|y>fqZjPsoN{gd&pjnKvh!-MUV zP!=Euj)QU68b3rHfmG)c7(XcXfV|iCe91p_JreJ)#1)Av93jqVdxUrGdS&Y@?SB>f z;l+PujrN~PF4D%w|GvZat9FX@x0-c_%mMv*vxW80#)Gy&_Yxbr6FqUup%2Lue*vH3 z!8Vs+b(@nk9sD~#=)RcKi3v>C_N4yyRCLgJ*ae>_25s)Z+1dukfwQSORpL~{0E`EG ziW;GxVvbO9KGD1)a|&#KW;Xf69Q(bOc`amtYZA2!#JzC>NxVk}h-Z&uAK0(n&zwMF zgJRw>S=(Fue(t5uFaG7q66XPf{~623?O8$H5A^*IB=(Kp$;G_*pMu@~MfdKcPhEc= zdc4)`*I>&t_aV-)2b2e&E%?U=Fc%0ifA??LPx)+eD?iKnozKoC_nJJ5v&pyk0&}ju z1K-8D`upbf@H|sov&nOxiyUxGzqXk2c-F<#O(d3Mj`u=n{#xdO$y;A>+mp>@TVE@3 z{jP_9O0F+!c3<5 z#n#FAZ*%{Sndh&*?@~`c*SJsnlfeI|3>baJ@$ru=t91RK_HoXawZ$cOK&+$N!L|4g zCC4ywpu`k<*iTHsH3-ft9DyIjhLUWza}B)n5?AQiVA^5WXy#qJ_QE*LVdR4{S{u!J zEW2L%mqPcGlc|5V{TqKSw#5$OG|G+#o}(W-<9_lPw=r+)cd*kjaA_AgpgUO?ZER@6 zqrXBf{Gz#G-#g7}?2SeEBJ;>&o_Q(r707|9%qg2&avs!TpZNjse=hNXFQSvwOXuJp zxbI(y6R^jealg-i|Iav2fDIu2U1z8bAa@>7`EV{d$gbb<+i&xZv4^n@j0Z@;zxa&| zkSho5(=HIlvHiur_P@G6wu17)@#Q*Xf_h*4w>iM%6p-&X8{AKKo}K)fIp?$97rS2@ zKpS3M8^hCQ7w?|~`{McY^kwe@*Ws)C&Dk?=*ZI7^X5R19wEu>FvHw};_4V(G=^5KA z_P+KIc~{y!lW; znoC@uH#ZO&U|hiY0&@xE%7}BwVX=OP`xYu2{Id4UV@Gl&74iyofN-UZJ2nbT)n?riOP$o2Nd>Fqm< zHF$pw#y-LB;CO3u>;Ouc^j)-zMnczsLsV zLr+FTJ`~@evLn)8<{yy-)-pT{{ttnB$+~9FIXFMFUz<$%tlt2+u6d8~1!TZM=5>|r z{vQ|Hf&XW@|JTL7gO@lD@t(c<8pr{^lY6lNZo&sxOMcVEn_nh=@HqbD!+cl74#_ug zt)qLZr%sXcgxUpVAGKaB(<$d~qUPk?tRo_aa4z=0G>3c@@UE`c9tiHmzIjETw-y08 zM&e!)_XQ7daW3Y?uJ*iK{7b>UI$hb|c`j}Qq;mQH=|5^4wbdPm&o?RzZ*5G5$+a5jE-Z2mQTK?{9%J~1p zUVQ&M^l8TV_ga_fi`YQg`Q}?pMek2xzY^no)3C3m;%k|YF_qfqQ>lYKojk2+=4u(6 zb!{l~z2qQb0ecZ=egGRsnbF1%dTox~yG%I{o1vBgY4>e|o{WfZApXBhpYg&6!M&9DLFub( z25o_22Y`EJfbC){Xdm>*{>X=s-nc{jpD8Dj)8+i6)Y=j~+k&x27+2Oj;SU}l7j!S{ z9rOpbJ^ROI{lh=U26zt};FVH0#(02szyfj^TvIR`+jBPcduNd^TdsYf95KfL43h8foWFK}_!sxC!;_Q+=H{Noo=56(efYnj z4u|wP?0Wl@3+*}V2JC%xz4Lk6{hzf~N6*f2{f@XlkNQQ^ij7ZQGUEBOBx<&(^QC(4 z$|=mpOk=MD-@o}>=6x>1Ut6{QndXZ7zsKV+Y zUaED7N-Yw6(^A)*IN>z(mT`eE5EC$G?X$=LaW5$k>@%N5KX)2BzQnzHws2&C`ak+z zEZf!|uwUHTmh4ymi+#CrKp8NLe#!IN4#B@MMt{S5OeMzVI=>mz_!9fB^_$I}p4$G} z`q}}`@BbBR@IQsUuRs4Oa(DiU_4w*}@h{e010`1mBzMoazPLBGZysOC>!CeGABOpc z>BRM?^K3KF?c&|N-RG?#rhj=`2g-}bv+wXe&FAg)O4>xwF z53kSvpNZ@J6?M4&D(fBL;{Vgc_RE?_F%O+f4v{%L!F|c+p{Bqzv5%aYYP~`CCI{c{ z=~ni2q8@dr_lB=!9Y||HTIWSOYbx(`I@q6qOqj*{cHQ~BwbYp*-@`foE4ICX?e<}F z)8QYHd-BU>^E1r-zrr3rtn)d*`kq?<7oCs3ul@al9M{;l9sHaBWB$MM{}2D@e+Bc)jq;;$UNrJbLKLey96ih zTXI0fKeYFif5ra)6ZIi~-K;zELuy68-(1G`wCbL3kSFv6*nhZLXl@blfcfSNL#{h8 zr*Hu>U_N%i{44k2BT#!l+Z4ON{mJKG6Ig?Ey7_AOv{T3@o{mhArs5||aZby*E`4CQ zdU*wB&B^bBq2KyHkkGO~w8f&!00#hqd=&{6A5H>#vFJeQLV#Kh{38 z2KrOhKw>WcEao$uy#$=h1WoZpu=y~6zOJI&3+6Lo+54`Z_X8j|? z0;v^w=>u;x7vA$t@NW%S@{O*07=6PYtL&pNo0!0CVgl|dJrBRYH3W;uGhW1gzQb2r zhm1AHSK*&tNo})UO+)qB9QB$0E%IPG^NCYfyLK*h>)fZWr8XB(KYa=^!5XEmeVu`A zZXS#}Q#ucspdOW`k|TExW2P$~(DO63_2F~$0cdBB5bcY$wwG%eSfkjp%}ef0Z>^0s zyEgpiSpTdHaE{Jn`?dG2ZBTSQn9q7==QCX+?fhlQX<`k*=fJ(Sc~YN48z}L;smP+4 z$fmi}FC45cPaE1STFN3ge-|pA{t#J*I_J1(Y$9>lQ zeoXv#u^gPM|I@B{#-AK#06SIwPZz_Zm>qwPAo%TGo4>ujN8RpTS6}Zq-(N^<2miLs z1(0li9Q>aoAA0k&i@uSviMwdSGgilwF0R4;VxVQP#VY8E3479k7Vm!#A>MYqkJ{Ej9@x3?itJ* zSi^TJ7*R)_BkqaAf5G(v@M&Ou2KKU8Hz(#CYyx>?!4&kjYh=IKTmS9W*zr$yk;ha6Bk5lXrYZYRjNMe5h^^S+HvTiH2B(Jn4bi2ok`hOJv zqcvV;U;|8t%=33W$a3;QzqIj1Y_)fY_x-Hd^aT6+k?XtbCH#HxzmM4N=v*H%KsnH( zGB>2(kIq;BmwA8e#^67C-(zh8bAQYM@EguIJ;wKU{Z9w~HCEH^jtO=L#RYQBWbl6! z-?}FA|MQ&T!R8>m=3JL|ukD`q_;l`9j~C}a-zO?174=^$B;{O;jB{^Q< z>H)E@Owf;T%n5uB=BKX>oP`^h8P$oi4nsEv5d?zhVP(#0EIXfB|p{EFMYR^m>J z_zoA7Gc5Lp@dp-R2P{?|tQGg_|F*`t@qrR2)PBX675~}+GmI7D7r4Gf9a-|-kOAl7 z|F>9g^WfC?#tY6thmYdFr~iBX(~S*)``};f&$HezefkrLFX&ff9>6~HZ?rSaL26|L zvITp>Jp49CM|of@ppD_3U2^uUk=Cw*U$1dhGCtTzJwqJ?;RX)H$;z$PywKcP?n_Y-8 z+5mpP+W%ebd)&pg$H8!TcTA1{v@<5x48niL$aCFTp831cH3-3Ojn{5FW5Oqcf5+xN zxh}`ygZjmGt>^1@Fh2DK0huwt)5k>)Q&UH_e05W_JG~<-s{iq&6qk{^(cd5R@AQ z|6}w&*hdB!J23t)?h|KJ9;8p3!1zNQd(>WNV~y>cVQdF|6vw%b(ig13VZD8xtIXk% zyW@UqL+JGd);7Otf3pl3C?7_rFGRmDB1STdjXx}3%f3hKg{++<_KV-&!+!RtK94mLuP5?k0D0>ob4AZX?f!|1WD*6#u^G=SR+q zd1XQTf9rjjFA^DGETBLCk8O}V6Z>5MBmTAdjsGhHYB^y4Sp1F7^9RTB8n@%M>+zGh zru)0?@yYo28O5RYcW~L|!Ra7ASy|w<^?e83%f9IT`1v*dV+%wM^nHU#+5pOh$N_b` z{(eoPGCIZ^5!n=7;s{9A9(TIAXRt|>H6Rs0t+K8PGJHmEN!cQtz`APb65z&uyG z&VYGt*SooY8CX9Te5+rBd;R)Z=Efl>+BrmGg2vRq|19fv75krj*`Drqen3o%-E+{@ zuB9DfUjg?Ga1SB(50u)yKV5g=T10aXTt|Qm;aNPMv&uRp`YpsSU4zdYr}E2qhJVWt zanFTd-F?}Yg6XB;f63Jcn`P{EybNDxF_u62 zcMVD~pWHIBZ(kSxwf;{Wpo_yA-@$a87nbbot1|6g2+f9Ej<$${~( zdb<6=|9IEA9$EYc^N|6;d-Q&(Lj-=s|77j|+9ps248ngm7SJB^O_)De=8E(mTiVV# zfz40-o;jtTH#Z&meu)WOdf&Ipo>D9ELCq7Kx0X5rS6J_ynBbMnOM!RyK9Ovf_!WNZ zd~h+hmos2oFfoC-$bu3ZB$rS*U>;06e@IO`<_TQ?BKC_fZCt-c9^0?}HCKMNc-GGb zqmu0w$1TpMF*f%ZT0>1BbhY~tdLPMarW22t$~rsa6LXPEL*ROzb9Bfl+w%E5?|kx| z=0fv`)eRxj#QY-Sonl&AOx$BBm|sp@^!yvxlNnmti;MJQBF0C-zVD=+=d%VAWXyjJ z?`Q2H)@MIV4#uO*!#>qqzKyj#2l!`h-}?Qr@1x_xV-MuG#ebXk zn>+yX$ZPzY`==a;{x=86?>TzEkNd3i?XB(UVlkK>gyqPEkHT}`$>LxAE#~Fo)4dFW z)9@}{$LsHoJKbaPe_|Z`N7sw}5hyXiA}@S?WYGuI5^ zqgsQ|`lI507VQ$d;+rn{>fqjQUVB&kD+kJ4p)qgg2h4GC&X61e^9jv;oo0*>d~08e z*I<0C{ujfX=UQ2I@K+XL zzc1EyCkKBaIrs~)$A|eF7cm#N7=LFNJ4af?yhtHpAFaKw%}<=K7u(N#NXhT%*+R4U zotYQ6bA876tl=*9SFZa?bICo=G*{mDa&sf=vu>lN$DLpPd2`QWziICM+HaaI)Twq& zxw1O*`;h^O^+oT8C-#&0e{ulK_pj}L+sXe`|GWN2y&2tKZ2n+hJ`Vovud!OUKML;a zYjUrXe|xa~FP@|OC#(M>1LUWT^WOXEUKjn}^#Nk{hpY2#$4-dfU-Mu+Jm>ny+@p*6 z7Vl!d#l6@+{tj`4cjUagx4FhSL+1pH8zBpJkt49>nSW${nV8^1zaY=#2hCLvyiTt0 zH%tD>Qt||s-uy_rc2Ml2_fv~>s&xcP?ecd2LStOYfXsJ~VuJJN)BV4w80?GtC18EAn1_sex>x){`X&1p+tzPKCeC3kYS&Si{>L}Sanb+1*uU}rVgu+8R61WcsuUfSjWsx!NK zKi_tn#a#EbmU2I$a(?@=SUBIUrSjG+BpVkFi-#+THe43&7` z^M7WZ`A^iA`aN?4KPK;lIl`^qYF4g)9y#!AsVy{z7_~JEXIb+UtWQJVP6t<#^V!xK zbS;5vSzXUI#JKs?ubYS7n|lee0p1dGV%Wj+*HGU}+nej<`r4AYbNUN%{Rh`5&W7tx z6q};-gMaj^eXWm<{uck>c?tgc;;Zn{CEE5a#2zW<=reBD{-*K#Jsf-9Sl(W))4nHu zM~tIw6U#T|fsAPNJ+V*6^S2Gt=Um8quAS%K&EM}nEVGaY(=Mdu;`!8ApoW+Bk#>`7 z`sONI$n9Hl^J8T_)+*-tFW>Q2bM?OWnVY4i@6%%6J-qb$TPpab&WE}^c|ET2mrA`q z^tk6-^JndelJnEUyjU+bC&%&o<@P84U;HNyChvalW6p^|=H+T!{zu@yod-M_|LT38 zUpppqnd4zN{k4tI{agE(6{nv7BA-L364=Do*X6Ya9`SAMa`tZi*%I|qk3E8m#{1^WPzKCm= zT#XE1>@xg&$zx*x`ZtbSXuO|e?`6BhJ+M3GU4pN~-fm)ls)U_1Lm3G6=Ub!swnurN zPf$UV`$uv%|IcFcYxl?24?hHMW7kIxgxgJntyHJGTC+BXy?M zF+Xqx^8*(%KX8$G0>rC^Z=eP$a{;9`DRl+i)6AM8Vt)o$HlKAST-#SUFb7>P&10;# zz&!C^Z08o|V%YgZ@hz1+S?qw~OCuBH^YPF1E0TLy#)8@4wZ!SbrW?pV>XL2cSew5s+XIYc|3VTmb&-=ljHTQmKdJeV! zUt|Dtdx`Bw4rl|!){ng}wuAoz-{JokTm=6$*Irg{`d#Y(*BHpRDj)Mre?t1dD>DWi z2mhlvK%Hj+J3gPji`+WK_49URn&+f0{t5=Gn8%pEm){ugIQOf0cWiww?e6b?QuvRp z-?syb?|*WfKpCK~7{5_2X>;m#?jk322Q_B4^Brzs4tm2A?4^3*ht1V{-fGrteVM%z zsar@*!XfJlqSO4g&0(1dnaeu!QvCr)zqpbCWl!}Y2lNBP9Tc4lc8gB#;lJ#E&bfjy zu%*4-Qj5FN)+WcVZu`;w=wkJ?dRpwKt?sU4^kUih`Ff7N${6^~dxHqJ_f3A7fYahh+f4o_F*YnLP@V{pJ8_m_^ z`QCiu$IU&|ZMvVlj0bx4oZPccIgorm=k~k!j~oauzJ6u$i|9+1({_~yI zy#HNy@IMH*lkxcnUDxfK4E}?0{|5Il@|p9jIhW)5?@2r7GB!N@6Y<=m=H2o2x$)Y@ z1LFTrWb@bO2HF2(<^+1a|CqkcoPqO$@e^zt8&D3EJtWW>t}oqzEwGL6aU(T_Za(${ z?A14#)zqZ8aQ(Bzhc#b)F6-6Y2f6G=fG<1;y*wKX=?_?Q*uBr^f_H6!)*fh&hrsV5 zu%}**FVn4$ zHWzRB1~pl~)m%d@uNx1251IOt=FYGD65an>YI;!9jddD(U)BC^*Kn8G9VPd)1Q>vw9OlyBC4vEjP6BOegIu5xpO zQ}HYIGv^;X*YaRcUu^!I%l+!#7|;I?-h5W$0P^$=;`w{JJY!D>|6ViReR97+JlEtM zXI>z@#(CQAZ7_!39qaqoae(9q^*OZ(a=z;qBwnaZAe|`pZR??0i)8=n)FmWF`~Y(n2An0+aa5fj9=MgN&6V63~$5#k5WX3z7M*uy}-*gj(b zj2|Ypz8DOeOIYU1^~1HJ!Ll;Jb4yrz;C^PqYssgBY@3IquC-RCWKNRUl*DxKEnjiN z@gf6kFT0MKI>-ZQ8TZwe_c!7X?Av?$v7eT?K685?Al9-MpX;D87;}A)zs6;ceus5? z&ehf=#=&+?u?NDtSP$Nl1E75nGXAd&@O%975C8i>8z3^ET?4Bvj7*pW{>8GGl`9W| z?OGOebA&SHbnxHBlE;HESNG+b@pwIUvhCb!GUFW^?3efZ9x@9G)(7!!4MXdYTUTr> zwKAcPd*or-HU1+5TD&9sd$B^X-}fQ7zx7PKzu(pYbkH8+(wmr{zT@~$N{~*f-~#3d=A#=&aStBA`&{;|*GF(4b@ww|==uWY!ra5uy^EY1v%P?G z!>%`=CczT+G+7EQ;kek<;D0Io$^h{nnb77XVi$0aC17qD*DR;5fn((!r|t1__Dpu) zWc$6B*Vw;=oSv+4j6LFdy}8H&ZIX7agE33v{B2BQj+lq^^WCFW8)!)R#Jv{!TkHjK z(Y;Tzrssv`lC7^c*Hg#i_TxV*_}}sr^`M`lb}KfPw$?smt#x^|!Nh<3vOa%vEcTTH z!F~83{6_|O&bffh2Z;aZf9?Ow{re5)d(L<2ap~{je~=6iztR7;#lKjt^?UID&=3E= zMyh2%7ypq1^5frg&hcble7xtJ2#2|*%O|?#lRTH-?Y~=aHwg1%`rgAnuc+)va0>hf z^Wn#_AyUgQbxGu7`p6qDIReEWz@B7{X-ndt`l8ex-uURRo12gRu;dKt3!Hx!d!(_J zc)``jsTDxn3lj6{d*y)b+2CL74}tGR?vG^cA@sjCv)C8&;$7~#Bin_*aINpfs}y-q z+XS}7dGPPJ8uwy8v=W=#J(C^V_C3_Byh)kCGhs)#X1C?$HX0l3I{-VW~Xd5U$G&o!6b_Y!&iuTr=D4eBubptAQx*dYx?&=)`Hd6Km2+dlj&n0nNaHad<6Y3{>6N9(4znK|D7|7-&}N2Pd7Oy zFfgZP68IP6W3fwKEb<`oAu^!mIUinMKiY16kl5(0KQijCi+ZpvnCfZI;|gm3x#&2{9jxprXH-OrVMhnBB4Fyz;*0>Wr2EHY)Ai#@m4Ni zlv78nu@`pmsNV_C5CNW-Ifm4?O!%yFL2}ybhVhTX@LH(eSu;RARl4_h=q zUkrIHDHnpN{Sytp zeO~{T;BzuKbd2|jKCZ8?Wk>EAKG}PpYTQX!_iy0;qNXnXkAUGL>{*un;vax*{epfU z?PIL{tx2p0`-8YOh^!;j#sjS_;k?eG4nGmYUP4;Ha!p)ss_BL?mS+OJXvZV`x`9h{wuhjeap$SSx(!vj7!nU zEAYjauOsjNrY|=u;7hEtXPvEEzKX3u9W-Q;@?$Br&{lX3zP!gv4j|90uAeJm1I!ci z^v&1r;kU)U&%cP6=nB^Jti1in@-A+t?#lWvGsg%1U2|c6g*iUP_DhaGdbppzE5>`6 zH@C<9{n+;5uIU+<#=*aJq^&7k%YfiNnDILe2IRq$?HXs@c8%XIwu9sG@SkgI8Io(l zN5`D(+t<$)+2!+n6pZF?ukqi-ZvD4+&wb=$-!GW2sm6YZ4RrK>FkZNOltFb3)05%_ zy)m_|KM4Q!Wq)Mn2un^Wwm_RFz&Aurx^iI8tL{PZUs#*|XJP`sqQ>w~o7?dTZlKQa zrNp>b-a)<)Ic^K6F*cv|#Pg{$Chiv?59IEjTJ}ffcrjR91SS_E3&fBygay zvaPQ+Yl)ZM$bM|Mvv=Ude(Q=i)zdpzg2Rlfl1n!FKJSbArhe zZuOFK!0*)D^!_}^eQbuo zo3?;;ZrrC>y{|8zzwADjB`yg57lAV=*k4L}8TgYg7XR=ISU)F;`<2L$A_L$TVt0#w z@w&7p1H`|&ei=4@WWaK4ftAGNCELn^donAgvKOIL3HHhXsbU9+BdavSygZpQDw zF7_QK?l0hY8McO)UFJ1lT3cZm_+EjX@9!!Dy1du~j9<)k`CaV{<9qY5_lr#c_LWPm z4e{mX;(MMU#`i4o&!>p-zrf%8O=@<&*jxzyFMZ&(=7y0En)U42wV7Do)~Eki_V2K! zNA`9T|M~#Id@Tb?dw~6aD*Yd<#-~VvE%WHuFbhR|F6cr?eXwm zW7>8X|K0OBo(%r=0jwL8I^##E6=w|*=K&6|9!=f9=T+i?*seRUVefzT55%*(J*zGxM_@I44e>$uD86#rx0>tNzw|QVVq$TbdKXgvyC!BSSS@xr?ImDQ z>f@KTxL%HLy$bBFW}o#{#22I$T(=C_u!=p`FN8|mk>h3buS6c4PoFlv_0C&eFaB*K zJ2d*JW*$by&Bvu3y~mr1thM{HHzU`4WRq9p8fck757E zw(sJ-KF%DVv47Y9i5>Bh?=kq7PsaWq#pkH~9=s2V@ejuKSo}whOa}ixx3-FF0K~t~ z9X#f5lBe(E^4!zkNqanAzst0{W0U`P#QSyP069L~jrDc>{qcPN^k*M~dQYRVxdWrQ z1jp6?z4?H?45;=bQ5Glz#Q#=w{|4;;Tk&nz5$C#L^WeaYWzF5mJJ7uqW;yn^H49fE6E3+2djsq)My4!9&#%zFhtB8R`HWpjjlGrZ zw=S(hZ|keCA~(m{hyLDD{S;~+EyZ40Om3638XbSdW^_B_m;0=YwPxalcRx$*j&I@H ze^A!%-|^7TskQza=Jfy6Y<-S-64vo=dXo3^_1~9u{l@;>w@du*CWcb>?{L1a7vqb) zZw`R-fbyKnT>q)`e~t4&?Z^lH0CRtX|3SHblhyx|#lNy3av?IHzP9!wCX0WuEUv_V z?0=7g@fvIC`?x&!44!MAb039!pS<%fkN+P%9-SY2*F0nF>*F3fs_c2%+tCBeY&Jdi z_hmowwakHEOl<4|at6M{oZ)Kh<~1Afm+yPExoq=G%o{vY_Ptt3UeWotKS5nmY-{Ec z&cEYHu=+GMcYDnx8?dplwY`UX87;#OxD1S5w)qq@TK^os^9*w131kF&q_AhA{EDrwHn)-ccmr#pR^9VF`*M7n zTxet*wGyt`_g-rE z*L{%>+V5gp3aD*QX{ z<6__I^Da*HUNUa7{8acq`u?a-U*kP(v7UA<1IEaK4*rAr@Uqt#a-b^%;uFL#D76K9 zb5&)Y3Y&Egd(!WG(Y=X{Ww9QUyw=^+uH8Xx0rw)k8T;6M2(Q`wPT@Czn_JMGw;lSs z=AH+C(p&|mE&zLLHoXM4UoQNbU2is*BOAorm%#iQV(ORQ|1IX#-zc>+){uX+np!39 zX?D|oYUv#Lkb0)C;*aBFAUo92m)`eEbJdR5%U0=<8Xtv+WaKHkZ}ZxcIto%Q$MruHiDWDk0`p(8=Ux2gI2eyC$Z^dxR{l}-zt8gTPamfjk0ehG1h)mvU^t|dq54)T@mBsO_7zQ|?xCf5?9yz#(?#O8lg=uYDF z9$&o+Oz(M*oSh#vcYpbp&4x#?TiiQ|@z)}|?%_FieS`QXwDk#UsPg>x689AM_diQM zA31${(EEE{V(lI^`}ddiJYe@VbNS7uY-@P<&c>tY|N6XZe2W|q|F-pYl?%T69@(FE z&4c&4&$jyiz89%8#(mmvxz+Re4%_&@HmPfYoc9{lef2jTT=aQwji8tg)|CNi*ZqU= zA32a%;OLmK`rBtX%syR*$U!*AB4O#be2HQl2Z%oa2dj#@0OJ(|0QTJKnL5 zt0~uq*XLq$)!hFF;{e73kFnoqsToKfW-SwHxiDUTu>-_*hawZg`?^2=0OMmHjPkMT zkE}F5XTe3v-)dmLe{ zs3i73I{w?-zu-Rnbnrh`28`lA*a_B0z(pv1 zFEZ)ahpzp#maew+#Q3kjQ@`bW>wP{z|JT_6xcCo#e2!o}*q5hoBK+qbdFC8X#7}3e z_i=pvuF@XwH*&uGUEoU@5d0s;t{Jrf#QvzSAKZtZ4*uQeylW2>yjPeXi~Yn22jgGA zRatPDeW&-mW`3)C){)=JKD0+&TjW|~<`)j>&$8ZaAGriu#S-&k;=?^l_hB>d{N`U8 z*T-#n>JKG$cHp)D3mjr&L*jKeK80)LZEt&?TIS$+N5QvsORz0yi}4$de6NsmZ>guF zZdN84i+3(w+2lOjo|lbh605^@m)v{9aobt@EdKYthE4C>Cw%A2*e>ATINm<|c<1j9 zY1^}Qx8(AoQ&VF}oo~CQiSXY)SK0Q_>EYs83hu*$^NfoOsE^YY{~MUQ-NSp&K9|w= z2a(@Wj${AFKB&Ld;G)kzVf^=P0M{OYE2;ncJzGDRKVAIiev{$(`!d#N$g_lt**shN zavYxP$K#Ic>VIQ6|1S9N>GjzBg?Ide$>Kk2jr9TA{fVtfDel{Si2Cyg>`P=$f%ydL z)V-`NQa*@(YhQ>Lv8ui{W+rYj*WlclcrALC@s2ClmG|1(Fuf8A$07#|PQ_4%}e?V88tcZ_l(W4H15i~n87uG-eOUGUF0*Tw&! zZ#uYWIetW^Mo?Gx$Dg-9ZF%kYpVa=)bv*;{-}CXK>mvu`>C5wthquZ0d!Kr2@Ejh@ z);#BGUf*N9c6|?RfP#NzK&b=L#sQ-5yL=-3U-Z2?e+;3M%_k7|@UCz0k?_y6*11Mv zU)iE8$eu*5FFg3hzn1taM+>rL(GU{)^PVp|_5bLh^Qdp~oO+!xn)upQUBYui9#=VpFeTUyb z28?jMxD9@NR`Gv`b^F13{kOF8Vbl%?)`R`rEB!V8Yb@7oaaSs26wWUF?6j?UvdYfO@};5e&|YO}<^>?$ZmlyHsO+Q2UhQEBpsH!FX^# z8U0^l@l@^nPI$(P&$Q*itK-t2zApEC?$?zm>96lueoO50o3Q~(Eg-Pk#rk;1wTw7Q z+@L>>90AYukGba{e_+)2A8h|e_lFdTw?Fuuh>PpsJ@O#O zxvo3LW8(nZUiv?pd&x`Q#oWY!x4=1jM1)4ZOHQ5Civb4z!FhD5Jbius5%E7rCXDSn zIo43)KQVyFg77ZJg3p={!f4Ldn5=P`^L1aw%Ip66{<*Fm+iiER9gBTq|0l=)GshPm zTnGF1*EqMGbNznn0d!&lCu3h3FxLMM?!(1@Z8sdn=ReZJq_~uf2e{TKHnG_EIO~tn zFK_j0t3N$%*C+SvY+?=i4>h@#-s64v>$~wWGSBWDdN3!ZgKhf{AX~~gu8SVd*l_pK zRd#s)j48aY|4+t$2H-<1P-&fxB&@Z3Y5>(iIx zqNmaA^>K~+v~ymbdvv+yGG3l_0a+{HJYcXJUh?~r=LZ+>IakYs^o0le$uX?;|6uH& zjQ_4YsE;EPYJLQJroV?VIwrVJ{jtb^^an$+4{|=oHBU`!=hULNTb!%ckqh+K^KHR) z&AWK?SexJ=xSuTkV*^Bv`8O0hhS)-Kd%bU+N0Hwx&s*65Vt5d?6VLZt^nX1r^1*R? zh*Rz|_Xs&K5dS@$fADQ;=@uHD102PFYyWq3YW@Az*st5C!g@W{_Q~T1<3D;nxbN~B zZ(^xFKAm>`H+x?jrY1;W4_zAHu2~lWjs52CbbE(S3%@KFcf)^^Es}0or@4m7h7H1oY7T06{w>H0ZwAw=dUrd3l!J{X7>u*Z1yT zGwAq`_uy~Jb0`mNpDY)MyU;)0{Gc)*a-qh4WPp4Ws$G9ymvmbqduR$F`RGLxd+GDA3ZOwY!9MfZqT{N zk8t^JVK=9|quRjOK`~3IO|EI=( za2H;G^J&-EO1pb*5a#Q?To*3>)6TuR+-Iu$CK{h}@{fvtaW54+p!aU-KAG-gm=?iqaN zSnl{7=e#_9;lY3OesX;3{$M#g=W;9$?qm1o_)(tM6C$* zpfTh1dEel>`x`mV`9VBb4*tV~ZO^A2Uizy3ec<1?Urmt%8=qlaCTkXVe;e8JZsPu} z{y&Hfa1fi#wSm$9ey8JAB`!$* z$qC4IIajXdS@=ec_v!OzPwW!^H;1T0Wq<6d&*QewxS(^0IX?N?+^c_$ae)54+H3pA zp6luO;5vAZtjKZB58|ouTXGPTC6GAZ3!Ww0Wq;2JxMRfrZt}1r1A_lMANy@{Cv_UO zv*&P$_rJwArv13=##fVap-1uIa~%91evfaQnnZ`+WgZ`X43f9w z=_AMY80W^^*S<36&;9wPjM*o?A701t(>`wOfbnfkajqTZ)+S7DU(374;uF%wmcWGM zx`diMpK+zFOejRZ=b&~TLV3YFAlD!C9=-c{PsfPu;JKcEOy8ui@ALT^6?re$8o1_Q zPjB5p?jPRfF|_lGw)aEgKA5lhEv&)5owZau!T%xS|KaI1)pPi@Lcoc<4lIW?Bfyv{WPM+>#bxmT%0LQYQdisk+MLh}r{=8!qNy}gXu zykqnI*jtzUV~;)Om@aj%Dd$W6zk792w~ySx+^;_toCb$=-cc|rrqdq8b8XHQ9QX2t ztQ#W!>-s^-B^t!{ab5I&!@pRGy4*Vf3bg%nhgiYUp~M*=RxK>rPS0ZxIo9q zV-tke-)g_@H`~F_c*lur$TOyV^ITt_v#k%*?W>OuGR9{PSrc$C-&$xN`lm}78(!|m zb@8{t>)-h}?N91{&PBy9m5+HQ@G`=8-zE3-tjT=XE_uG&=W%`A2-rUOHu?`bRME&= z`rK#k;amKrEjN$9i`niN$BE70RLn~5ZDbw8 z_Sm%pCsV0&&KSAlbFDn%>-LCw#Jx4a;!%BF<1*N;`?_tfDQgPR-NC-cV&B?9Qe;4m zC*tP(gm!8>^z4CasD*M9bx*dF2fWXEO(F9WS^uz~oJMPdq^_oT7b6~r4h+CazVFHK z#5m;jc)w+j>+>bHp=@RBMC7yi+@U>uXM-p*p*wz}dw&w=ir?1z8}c`w_I>#q^#|im z%13KM^4|F751^-Na^2b>TqiF++%dKXQLYd64~TW}FXj)v>Dri4Iz)S7NWAbe(;<*57p>Ke1ZlReYvzJl@54cU&-UzwMnb zv(B0IOEqPTTpvNcgE8Vh6j|`Uo%wg>4V-xcXWqb>H*n?+oOuIh-oTkRaOMr1c>`zO zz?nC2<_(;A183gAnKy9e4V-xcXWqb>H*n?+oOuIh-oTkRaOMr1c>`zOz?nC2<_-J@ Hyn+7-L>G7j literal 0 HcmV?d00001 diff --git a/docs/assets/icons/cupcake.png b/docs/assets/icons/cupcake.png new file mode 100644 index 0000000000000000000000000000000000000000..d139261832bd7f61114d4cabe668a78313f286fa GIT binary patch literal 266262 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 Soln;Say0O(u#oq3=H0qG; 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

#Y_E#Q#+-kevgM0>e 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¨&Btox81>S@|Gcv%uDq3ht=$oGqp$#=vY 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 DPMA_1 literal 0 HcmV?d00001 diff --git a/docs/descriptors/action_actionlint.md b/docs/descriptors/action_actionlint.md index e9a1a5169d7..4da1a58c292 100644 --- a/docs/descriptors/action_actionlint.md +++ b/docs/descriptors/action_actionlint.md @@ -40,6 +40,7 @@ This linter is available in the following flavours | | Flavor | Description | Embedded linters | Info | |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/ansible_ansible_lint.md b/docs/descriptors/ansible_ansible_lint.md index 804ecbceb8f..25855325988 100644 --- a/docs/descriptors/ansible_ansible_lint.md +++ b/docs/descriptors/ansible_ansible_lint.md @@ -37,6 +37,7 @@ This linter is available in the following flavours | | Flavor | Description | Embedded linters | Info | |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/bash_bash_exec.md b/docs/descriptors/bash_bash_exec.md index cf988db3742..fd2aa9228fc 100644 --- a/docs/descriptors/bash_bash_exec.md +++ b/docs/descriptors/bash_bash_exec.md @@ -37,6 +37,7 @@ This linter is available in the following flavours | | Flavor | Description | Embedded linters | Info | |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/bash_shellcheck.md b/docs/descriptors/bash_shellcheck.md index b40ee5edfe4..0ad0845243d 100644 --- a/docs/descriptors/bash_shellcheck.md +++ b/docs/descriptors/bash_shellcheck.md @@ -52,6 +52,7 @@ This linter is available in the following flavours |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:-----------------------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | | | [ci_light](https://oxsecurity.github.io/megalinter/beta/flavors/ci_light/) | Optimized for CI items (Dockerfile, Jenkinsfile, JSON/YAML schemas,XML | 20 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-ci_light/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-ci_light) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/bash_shfmt.md b/docs/descriptors/bash_shfmt.md index 8bd80fbe1ab..1d8c750c4f2 100644 --- a/docs/descriptors/bash_shfmt.md +++ b/docs/descriptors/bash_shfmt.md @@ -51,6 +51,7 @@ This linter is available in the following flavours |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:-----------------------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | | | [ci_light](https://oxsecurity.github.io/megalinter/beta/flavors/ci_light/) | Optimized for CI items (Dockerfile, Jenkinsfile, JSON/YAML schemas,XML | 20 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-ci_light/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-ci_light) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/c_cpplint.md b/docs/descriptors/c_cpplint.md index 222401c86c8..ec74f2326ae 100644 --- a/docs/descriptors/c_cpplint.md +++ b/docs/descriptors/c_cpplint.md @@ -32,10 +32,11 @@ This linter is available in the following flavours -| | Flavor | Description | Embedded linters | Info | -|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------|:----------------------------------------------|:----------------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | -| | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | +| | Flavor | Description | Embedded linters | Info | +|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------|:------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | +| | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | ## Behind the scenes diff --git a/docs/descriptors/clojure_clj_kondo.md b/docs/descriptors/clojure_clj_kondo.md index e1fbc1a8081..7cf2f2541ec 100644 --- a/docs/descriptors/clojure_clj_kondo.md +++ b/docs/descriptors/clojure_clj_kondo.md @@ -55,10 +55,11 @@ Use clj-kondo in your favorite IDE to catch errors before MegaLinter ! This linter is available in the following flavours -| | Flavor | Description | Embedded linters | Info | -|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------|:----------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | -| | [java](https://oxsecurity.github.io/megalinter/beta/flavors/java/) | Optimized for JAVA based projects | 50 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-java/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-java) | +| | Flavor | Description | Embedded linters | Info | +|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------|:------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | +| | [java](https://oxsecurity.github.io/megalinter/beta/flavors/java/) | Optimized for JAVA based projects | 50 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-java/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-java) | ## Behind the scenes diff --git a/docs/descriptors/cloudformation_cfn_lint.md b/docs/descriptors/cloudformation_cfn_lint.md index 393da3026ad..d1387fdbbd8 100644 --- a/docs/descriptors/cloudformation_cfn_lint.md +++ b/docs/descriptors/cloudformation_cfn_lint.md @@ -53,10 +53,11 @@ Use cfn-lint in your favorite IDE to catch errors before MegaLinter ! This linter is available in the following flavours -| | Flavor | Description | Embedded linters | Info | -|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:---------------------------------------------------------------------------|:--------------------------|:----------------:|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | -| | [security](https://oxsecurity.github.io/megalinter/beta/flavors/security/) | Optimized for security | 21 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-security/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-security) | +| | Flavor | Description | Embedded linters | Info | +|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:---------------------------------------------------------------------------|:------------------------------------------------|:----------------:|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | +| | [security](https://oxsecurity.github.io/megalinter/beta/flavors/security/) | Optimized for security | 21 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-security/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-security) | ## Behind the scenes diff --git a/docs/descriptors/copypaste_jscpd.md b/docs/descriptors/copypaste_jscpd.md index 69545c905a3..f3b2c7f7376 100644 --- a/docs/descriptors/copypaste_jscpd.md +++ b/docs/descriptors/copypaste_jscpd.md @@ -61,6 +61,7 @@ This linter is available in the following flavours |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:-----------------------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | | | [ci_light](https://oxsecurity.github.io/megalinter/beta/flavors/ci_light/) | Optimized for CI items (Dockerfile, Jenkinsfile, JSON/YAML schemas,XML | 20 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-ci_light/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-ci_light) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/cpp_cpplint.md b/docs/descriptors/cpp_cpplint.md index 2f7151c9bfe..8554015e45e 100644 --- a/docs/descriptors/cpp_cpplint.md +++ b/docs/descriptors/cpp_cpplint.md @@ -32,10 +32,11 @@ This linter is available in the following flavours -| | Flavor | Description | Embedded linters | Info | -|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------|:----------------------------------------------|:----------------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | -| | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | +| | Flavor | Description | Embedded linters | Info | +|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------|:------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | +| | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | ## Behind the scenes diff --git a/docs/descriptors/css_scss_lint.md b/docs/descriptors/css_scss_lint.md index 215602c2837..3be83d02f69 100644 --- a/docs/descriptors/css_scss_lint.md +++ b/docs/descriptors/css_scss_lint.md @@ -55,6 +55,7 @@ This linter is available in the following flavours | | Flavor | Description | Embedded linters | Info | |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/css_stylelint.md b/docs/descriptors/css_stylelint.md index 0af882cb4c8..4596154f810 100644 --- a/docs/descriptors/css_stylelint.md +++ b/docs/descriptors/css_stylelint.md @@ -62,6 +62,7 @@ This linter is available in the following flavours | | Flavor | Description | Embedded linters | Info | |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/dockerfile_hadolint.md b/docs/descriptors/dockerfile_hadolint.md index a72651ee99e..60425ac1b69 100644 --- a/docs/descriptors/dockerfile_hadolint.md +++ b/docs/descriptors/dockerfile_hadolint.md @@ -49,6 +49,7 @@ This linter is available in the following flavours |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:-----------------------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | | | [ci_light](https://oxsecurity.github.io/megalinter/beta/flavors/ci_light/) | Optimized for CI items (Dockerfile, Jenkinsfile, JSON/YAML schemas,XML | 20 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-ci_light/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-ci_light) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/editorconfig_editorconfig_checker.md b/docs/descriptors/editorconfig_editorconfig_checker.md index 6d7386ec7b3..efd7025daba 100644 --- a/docs/descriptors/editorconfig_editorconfig_checker.md +++ b/docs/descriptors/editorconfig_editorconfig_checker.md @@ -45,6 +45,7 @@ This linter is available in the following flavours | | Flavor | Description | Embedded linters | Info | |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/env_dotenv_linter.md b/docs/descriptors/env_dotenv_linter.md index 6f3a3116671..7715791fd5f 100644 --- a/docs/descriptors/env_dotenv_linter.md +++ b/docs/descriptors/env_dotenv_linter.md @@ -45,6 +45,7 @@ This linter is available in the following flavours |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:-----------------------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | | | [ci_light](https://oxsecurity.github.io/megalinter/beta/flavors/ci_light/) | Optimized for CI items (Dockerfile, Jenkinsfile, JSON/YAML schemas,XML | 20 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-ci_light/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-ci_light) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/go_golangci_lint.md b/docs/descriptors/go_golangci_lint.md index 7c8d8b218b0..247a727f6e1 100644 --- a/docs/descriptors/go_golangci_lint.md +++ b/docs/descriptors/go_golangci_lint.md @@ -58,10 +58,11 @@ Use golangci-lint in your favorite IDE to catch errors before MegaLinter ! This linter is available in the following flavours -| | Flavor | Description | Embedded linters | Info | -|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------|:--------------------------------|:----------------:|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | -| | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | +| | Flavor | Description | Embedded linters | Info | +|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------|:------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | +| | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | ## Behind the scenes diff --git a/docs/descriptors/go_revive.md b/docs/descriptors/go_revive.md index f0586140960..9b4e975c295 100644 --- a/docs/descriptors/go_revive.md +++ b/docs/descriptors/go_revive.md @@ -44,10 +44,11 @@ Use revive in your favorite IDE to catch errors before MegaLinter ! This linter is available in the following flavours -| | Flavor | Description | Embedded linters | Info | -|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------|:--------------------------------|:----------------:|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | -| | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | +| | Flavor | Description | Embedded linters | Info | +|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------|:------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | +| | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | ## Behind the scenes diff --git a/docs/descriptors/graphql_graphql_schema_linter.md b/docs/descriptors/graphql_graphql_schema_linter.md index 1d4acef49ff..b750c768b21 100644 --- a/docs/descriptors/graphql_graphql_schema_linter.md +++ b/docs/descriptors/graphql_graphql_schema_linter.md @@ -39,6 +39,7 @@ This linter is available in the following flavours | | Flavor | Description | Embedded linters | Info | |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/groovy_npm_groovy_lint.md b/docs/descriptors/groovy_npm_groovy_lint.md index 54f37ab07c8..75610c935bd 100644 --- a/docs/descriptors/groovy_npm_groovy_lint.md +++ b/docs/descriptors/groovy_npm_groovy_lint.md @@ -51,6 +51,7 @@ This linter is available in the following flavours |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:-----------------------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | | | [ci_light](https://oxsecurity.github.io/megalinter/beta/flavors/ci_light/) | Optimized for CI items (Dockerfile, Jenkinsfile, JSON/YAML schemas,XML | 20 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-ci_light/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-ci_light) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/html_djlint.md b/docs/descriptors/html_djlint.md index 560df22f852..6a0f9eb4290 100644 --- a/docs/descriptors/html_djlint.md +++ b/docs/descriptors/html_djlint.md @@ -65,6 +65,7 @@ This linter is available in the following flavours | | Flavor | Description | Embedded linters | Info | |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/html_htmlhint.md b/docs/descriptors/html_htmlhint.md index e2679bacae4..aa7977e58d3 100644 --- a/docs/descriptors/html_htmlhint.md +++ b/docs/descriptors/html_htmlhint.md @@ -51,6 +51,7 @@ This linter is available in the following flavours | | Flavor | Description | Embedded linters | Info | |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/java_checkstyle.md b/docs/descriptors/java_checkstyle.md index f2f58125e08..ccc4108e192 100644 --- a/docs/descriptors/java_checkstyle.md +++ b/docs/descriptors/java_checkstyle.md @@ -54,10 +54,11 @@ Use checkstyle in your favorite IDE to catch errors before MegaLinter ! This linter is available in the following flavours -| | Flavor | Description | Embedded linters | Info | -|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------|:----------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | -| | [java](https://oxsecurity.github.io/megalinter/beta/flavors/java/) | Optimized for JAVA based projects | 50 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-java/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-java) | +| | Flavor | Description | Embedded linters | Info | +|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------|:------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | +| | [java](https://oxsecurity.github.io/megalinter/beta/flavors/java/) | Optimized for JAVA based projects | 50 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-java/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-java) | ## Behind the scenes diff --git a/docs/descriptors/java_pmd.md b/docs/descriptors/java_pmd.md index 1ddc476c2d4..0725680fb02 100644 --- a/docs/descriptors/java_pmd.md +++ b/docs/descriptors/java_pmd.md @@ -37,10 +37,11 @@ This linter is available in the following flavours -| | Flavor | Description | Embedded linters | Info | -|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------|:----------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | -| | [java](https://oxsecurity.github.io/megalinter/beta/flavors/java/) | Optimized for JAVA based projects | 50 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-java/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-java) | +| | Flavor | Description | Embedded linters | Info | +|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------|:------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | +| | [java](https://oxsecurity.github.io/megalinter/beta/flavors/java/) | Optimized for JAVA based projects | 50 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-java/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-java) | ## Behind the scenes diff --git a/docs/descriptors/javascript_eslint.md b/docs/descriptors/javascript_eslint.md index 3686ecf7ed6..f944ff8d348 100644 --- a/docs/descriptors/javascript_eslint.md +++ b/docs/descriptors/javascript_eslint.md @@ -70,6 +70,7 @@ This linter is available in the following flavours | | Flavor | Description | Embedded linters | Info | |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------|:------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [javascript](https://oxsecurity.github.io/megalinter/beta/flavors/javascript/) | Optimized for JAVASCRIPT or TYPESCRIPT based projects | 55 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-javascript/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-javascript) | ## Behind the scenes diff --git a/docs/descriptors/javascript_prettier.md b/docs/descriptors/javascript_prettier.md index b7f819558b6..13067cfac9c 100644 --- a/docs/descriptors/javascript_prettier.md +++ b/docs/descriptors/javascript_prettier.md @@ -67,6 +67,7 @@ This linter is available in the following flavours | | Flavor | Description | Embedded linters | Info | |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------|:------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [javascript](https://oxsecurity.github.io/megalinter/beta/flavors/javascript/) | Optimized for JAVASCRIPT or TYPESCRIPT based projects | 55 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-javascript/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-javascript) | ## Behind the scenes diff --git a/docs/descriptors/javascript_standard.md b/docs/descriptors/javascript_standard.md index 167a8e9a04e..0aae3327d00 100644 --- a/docs/descriptors/javascript_standard.md +++ b/docs/descriptors/javascript_standard.md @@ -60,6 +60,7 @@ This linter is available in the following flavours | | Flavor | Description | Embedded linters | Info | |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------|:------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [javascript](https://oxsecurity.github.io/megalinter/beta/flavors/javascript/) | Optimized for JAVASCRIPT or TYPESCRIPT based projects | 55 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-javascript/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-javascript) | ## Behind the scenes diff --git a/docs/descriptors/json_eslint_plugin_jsonc.md b/docs/descriptors/json_eslint_plugin_jsonc.md index 9f001da1651..fb48e1c2f2c 100644 --- a/docs/descriptors/json_eslint_plugin_jsonc.md +++ b/docs/descriptors/json_eslint_plugin_jsonc.md @@ -117,6 +117,7 @@ This linter is available in the following flavours |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:-----------------------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | | | [ci_light](https://oxsecurity.github.io/megalinter/beta/flavors/ci_light/) | Optimized for CI items (Dockerfile, Jenkinsfile, JSON/YAML schemas,XML | 20 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-ci_light/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-ci_light) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/json_jsonlint.md b/docs/descriptors/json_jsonlint.md index b81622a830e..2a54ebfe0e8 100644 --- a/docs/descriptors/json_jsonlint.md +++ b/docs/descriptors/json_jsonlint.md @@ -39,6 +39,7 @@ This linter is available in the following flavours |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:-----------------------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | | | [ci_light](https://oxsecurity.github.io/megalinter/beta/flavors/ci_light/) | Optimized for CI items (Dockerfile, Jenkinsfile, JSON/YAML schemas,XML | 20 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-ci_light/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-ci_light) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/json_prettier.md b/docs/descriptors/json_prettier.md index 15b232ba4a4..8f6abc0cc4a 100644 --- a/docs/descriptors/json_prettier.md +++ b/docs/descriptors/json_prettier.md @@ -67,6 +67,7 @@ This linter is available in the following flavours |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:-----------------------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | | | [ci_light](https://oxsecurity.github.io/megalinter/beta/flavors/ci_light/) | Optimized for CI items (Dockerfile, Jenkinsfile, JSON/YAML schemas,XML | 20 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-ci_light/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-ci_light) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/json_v8r.md b/docs/descriptors/json_v8r.md index 43e6d022be7..b36a196dd31 100644 --- a/docs/descriptors/json_v8r.md +++ b/docs/descriptors/json_v8r.md @@ -49,6 +49,7 @@ This linter is available in the following flavours |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:-----------------------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | | | [ci_light](https://oxsecurity.github.io/megalinter/beta/flavors/ci_light/) | Optimized for CI items (Dockerfile, Jenkinsfile, JSON/YAML schemas,XML | 20 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-ci_light/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-ci_light) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/jsx_eslint.md b/docs/descriptors/jsx_eslint.md index 12892cf3a96..a66f4bf5e3a 100644 --- a/docs/descriptors/jsx_eslint.md +++ b/docs/descriptors/jsx_eslint.md @@ -69,6 +69,7 @@ This linter is available in the following flavours | | Flavor | Description | Embedded linters | Info | |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------|:------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [javascript](https://oxsecurity.github.io/megalinter/beta/flavors/javascript/) | Optimized for JAVASCRIPT or TYPESCRIPT based projects | 55 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-javascript/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-javascript) | ## Behind the scenes diff --git a/docs/descriptors/kotlin_ktlint.md b/docs/descriptors/kotlin_ktlint.md index 00a56e13068..0768d43f09b 100644 --- a/docs/descriptors/kotlin_ktlint.md +++ b/docs/descriptors/kotlin_ktlint.md @@ -53,6 +53,7 @@ This linter is available in the following flavours | | Flavor | Description | Embedded linters | Info | |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/kubernetes_kubeconform.md b/docs/descriptors/kubernetes_kubeconform.md index f253b674de0..6cb4eca793c 100644 --- a/docs/descriptors/kubernetes_kubeconform.md +++ b/docs/descriptors/kubernetes_kubeconform.md @@ -44,6 +44,7 @@ This linter is available in the following flavours | | Flavor | Description | Embedded linters | Info | |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/kubernetes_kubeval.md b/docs/descriptors/kubernetes_kubeval.md index cabc49139de..f264f887ae2 100644 --- a/docs/descriptors/kubernetes_kubeval.md +++ b/docs/descriptors/kubernetes_kubeval.md @@ -35,6 +35,7 @@ This linter is available in the following flavours | | Flavor | Description | Embedded linters | Info | |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/makefile_checkmake.md b/docs/descriptors/makefile_checkmake.md index c0458b5c5eb..c85b497c1ec 100644 --- a/docs/descriptors/makefile_checkmake.md +++ b/docs/descriptors/makefile_checkmake.md @@ -38,6 +38,7 @@ This linter is available in the following flavours |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:---------------------------------------------------------------------------|:-----------------------------------------------------------------------|:----------------:|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | | | [ci_light](https://oxsecurity.github.io/megalinter/beta/flavors/ci_light/) | Optimized for CI items (Dockerfile, Jenkinsfile, JSON/YAML schemas,XML | 20 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-ci_light/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-ci_light) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | | | [java](https://oxsecurity.github.io/megalinter/beta/flavors/java/) | Optimized for JAVA based projects | 50 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-java/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-java) | diff --git a/docs/descriptors/markdown_markdown_link_check.md b/docs/descriptors/markdown_markdown_link_check.md index 9dd31f431b4..4b7a764e04a 100644 --- a/docs/descriptors/markdown_markdown_link_check.md +++ b/docs/descriptors/markdown_markdown_link_check.md @@ -39,6 +39,7 @@ This linter is available in the following flavours | | Flavor | Description | Embedded linters | Info | |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/markdown_markdown_table_formatter.md b/docs/descriptors/markdown_markdown_table_formatter.md index eea59aed923..bcdaf06ade8 100644 --- a/docs/descriptors/markdown_markdown_table_formatter.md +++ b/docs/descriptors/markdown_markdown_table_formatter.md @@ -46,6 +46,7 @@ This linter is available in the following flavours | | Flavor | Description | Embedded linters | Info | |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/markdown_markdownlint.md b/docs/descriptors/markdown_markdownlint.md index 966cd1f61de..4960196f5ca 100644 --- a/docs/descriptors/markdown_markdownlint.md +++ b/docs/descriptors/markdown_markdownlint.md @@ -54,6 +54,7 @@ This linter is available in the following flavours | | Flavor | Description | Embedded linters | Info | |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/php_phpcs.md b/docs/descriptors/php_phpcs.md index ef71ac94eb4..ea4a1eb1fbc 100644 --- a/docs/descriptors/php_phpcs.md +++ b/docs/descriptors/php_phpcs.md @@ -49,10 +49,11 @@ Use phpcs in your favorite IDE to catch errors before MegaLinter ! This linter is available in the following flavours -| | Flavor | Description | Embedded linters | Info | -|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------|:---------------------------------|:----------------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | -| | [php](https://oxsecurity.github.io/megalinter/beta/flavors/php/) | Optimized for PHP based projects | 50 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-php/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-php) | +| | Flavor | Description | Embedded linters | Info | +|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------|:------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | +| | [php](https://oxsecurity.github.io/megalinter/beta/flavors/php/) | Optimized for PHP based projects | 50 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-php/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-php) | ## Behind the scenes diff --git a/docs/descriptors/php_phplint.md b/docs/descriptors/php_phplint.md index 203bd71bea3..6c7127e7d6a 100644 --- a/docs/descriptors/php_phplint.md +++ b/docs/descriptors/php_phplint.md @@ -34,10 +34,11 @@ This linter is available in the following flavours -| | Flavor | Description | Embedded linters | Info | -|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------|:---------------------------------|:----------------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | -| | [php](https://oxsecurity.github.io/megalinter/beta/flavors/php/) | Optimized for PHP based projects | 50 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-php/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-php) | +| | Flavor | Description | Embedded linters | Info | +|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------|:------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | +| | [php](https://oxsecurity.github.io/megalinter/beta/flavors/php/) | Optimized for PHP based projects | 50 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-php/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-php) | ## Behind the scenes diff --git a/docs/descriptors/php_phpstan.md b/docs/descriptors/php_phpstan.md index e43d5a42637..4b9efabd1ab 100644 --- a/docs/descriptors/php_phpstan.md +++ b/docs/descriptors/php_phpstan.md @@ -45,10 +45,11 @@ Use phpstan in your favorite IDE to catch errors before MegaLinter ! This linter is available in the following flavours -| | Flavor | Description | Embedded linters | Info | -|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------|:---------------------------------|:----------------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | -| | [php](https://oxsecurity.github.io/megalinter/beta/flavors/php/) | Optimized for PHP based projects | 50 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-php/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-php) | +| | Flavor | Description | Embedded linters | Info | +|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------|:------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | +| | [php](https://oxsecurity.github.io/megalinter/beta/flavors/php/) | Optimized for PHP based projects | 50 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-php/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-php) | ## Behind the scenes diff --git a/docs/descriptors/php_psalm.md b/docs/descriptors/php_psalm.md index 251d57b8faa..94c775ed02f 100644 --- a/docs/descriptors/php_psalm.md +++ b/docs/descriptors/php_psalm.md @@ -53,10 +53,11 @@ Use psalm in your favorite IDE to catch errors before MegaLinter ! This linter is available in the following flavours -| | Flavor | Description | Embedded linters | Info | -|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------|:---------------------------------|:----------------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | -| | [php](https://oxsecurity.github.io/megalinter/beta/flavors/php/) | Optimized for PHP based projects | 50 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-php/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-php) | +| | Flavor | Description | Embedded linters | Info | +|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------|:------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | +| | [php](https://oxsecurity.github.io/megalinter/beta/flavors/php/) | Optimized for PHP based projects | 50 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-php/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-php) | ## Behind the scenes diff --git a/docs/descriptors/python_black.md b/docs/descriptors/python_black.md index 492c633067b..a3317be8bd9 100644 --- a/docs/descriptors/python_black.md +++ b/docs/descriptors/python_black.md @@ -58,10 +58,11 @@ Use black in your favorite IDE to catch errors before MegaLinter ! This linter is available in the following flavours -| | Flavor | Description | Embedded linters | Info | -|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------|:------------------------------------|:----------------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | -| | [python](https://oxsecurity.github.io/megalinter/beta/flavors/python/) | Optimized for PYTHON based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-python/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-python) | +| | Flavor | Description | Embedded linters | Info | +|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------|:------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | +| | [python](https://oxsecurity.github.io/megalinter/beta/flavors/python/) | Optimized for PYTHON based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-python/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-python) | ## Behind the scenes diff --git a/docs/descriptors/python_flake8.md b/docs/descriptors/python_flake8.md index f4a4b36848e..0d3cc65c9cd 100644 --- a/docs/descriptors/python_flake8.md +++ b/docs/descriptors/python_flake8.md @@ -47,10 +47,11 @@ Use flake8 in your favorite IDE to catch errors before MegaLinter ! This linter is available in the following flavours -| | Flavor | Description | Embedded linters | Info | -|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------|:------------------------------------|:----------------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | -| | [python](https://oxsecurity.github.io/megalinter/beta/flavors/python/) | Optimized for PYTHON based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-python/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-python) | +| | Flavor | Description | Embedded linters | Info | +|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------|:------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | +| | [python](https://oxsecurity.github.io/megalinter/beta/flavors/python/) | Optimized for PYTHON based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-python/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-python) | ## Behind the scenes diff --git a/docs/descriptors/python_isort.md b/docs/descriptors/python_isort.md index 9f2e59657a1..dd4f9c6b385 100644 --- a/docs/descriptors/python_isort.md +++ b/docs/descriptors/python_isort.md @@ -59,10 +59,11 @@ Use isort in your favorite IDE to catch errors before MegaLinter ! This linter is available in the following flavours -| | Flavor | Description | Embedded linters | Info | -|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------|:------------------------------------|:----------------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | -| | [python](https://oxsecurity.github.io/megalinter/beta/flavors/python/) | Optimized for PYTHON based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-python/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-python) | +| | Flavor | Description | Embedded linters | Info | +|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------|:------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | +| | [python](https://oxsecurity.github.io/megalinter/beta/flavors/python/) | Optimized for PYTHON based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-python/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-python) | ## Behind the scenes diff --git a/docs/descriptors/python_mypy.md b/docs/descriptors/python_mypy.md index b998a9ff7b2..2cb12e4a802 100644 --- a/docs/descriptors/python_mypy.md +++ b/docs/descriptors/python_mypy.md @@ -61,10 +61,11 @@ Use mypy in your favorite IDE to catch errors before MegaLinter ! This linter is available in the following flavours -| | Flavor | Description | Embedded linters | Info | -|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------|:------------------------------------|:----------------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | -| | [python](https://oxsecurity.github.io/megalinter/beta/flavors/python/) | Optimized for PYTHON based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-python/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-python) | +| | Flavor | Description | Embedded linters | Info | +|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------|:------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | +| | [python](https://oxsecurity.github.io/megalinter/beta/flavors/python/) | Optimized for PYTHON based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-python/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-python) | ## Behind the scenes diff --git a/docs/descriptors/python_pylint.md b/docs/descriptors/python_pylint.md index 825f57d1f7c..10836cef96c 100644 --- a/docs/descriptors/python_pylint.md +++ b/docs/descriptors/python_pylint.md @@ -56,10 +56,11 @@ Use pylint in your favorite IDE to catch errors before MegaLinter ! This linter is available in the following flavours -| | Flavor | Description | Embedded linters | Info | -|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------|:------------------------------------|:----------------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | -| | [python](https://oxsecurity.github.io/megalinter/beta/flavors/python/) | Optimized for PYTHON based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-python/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-python) | +| | Flavor | Description | Embedded linters | Info | +|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------|:------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | +| | [python](https://oxsecurity.github.io/megalinter/beta/flavors/python/) | Optimized for PYTHON based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-python/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-python) | ## Behind the scenes diff --git a/docs/descriptors/python_pyright.md b/docs/descriptors/python_pyright.md index 314110904ef..41b343cdd55 100644 --- a/docs/descriptors/python_pyright.md +++ b/docs/descriptors/python_pyright.md @@ -59,10 +59,11 @@ Use pyright in your favorite IDE to catch errors before MegaLinter ! This linter is available in the following flavours -| | Flavor | Description | Embedded linters | Info | -|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------|:------------------------------------|:----------------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | -| | [python](https://oxsecurity.github.io/megalinter/beta/flavors/python/) | Optimized for PYTHON based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-python/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-python) | +| | Flavor | Description | Embedded linters | Info | +|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------|:------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | +| | [python](https://oxsecurity.github.io/megalinter/beta/flavors/python/) | Optimized for PYTHON based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-python/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-python) | ## Behind the scenes diff --git a/docs/descriptors/repository_checkov.md b/docs/descriptors/repository_checkov.md index 87b958748c8..b4ca13342b4 100644 --- a/docs/descriptors/repository_checkov.md +++ b/docs/descriptors/repository_checkov.md @@ -50,6 +50,7 @@ This linter is available in the following flavours | | Flavor | Description | Embedded linters | Info | |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/repository_devskim.md b/docs/descriptors/repository_devskim.md index 359a5256874..d49fbeb69d0 100644 --- a/docs/descriptors/repository_devskim.md +++ b/docs/descriptors/repository_devskim.md @@ -100,7 +100,7 @@ RUN wget --tries=5 -q -O dotnet-install.sh https://dot.net/v1/dotnet-install.sh && ./dotnet-install.sh --install-dir /usr/share/dotnet -channel 5.0 -version latest ENV PATH="${PATH}:/root/.dotnet/tools:/usr/share/dotnet" -RUN dotnet tool install --global Microsoft.CST.DevSkim.CLI +RUN dotnet tool install --global Microsoft.CST.DevSkim.CLI --version 0.6.9 ``` - APK packages (Linux): diff --git a/docs/descriptors/repository_git_diff.md b/docs/descriptors/repository_git_diff.md index 5eb81a137fe..8f1218b783f 100644 --- a/docs/descriptors/repository_git_diff.md +++ b/docs/descriptors/repository_git_diff.md @@ -32,6 +32,7 @@ This linter is available in the following flavours |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:-----------------------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | | | [ci_light](https://oxsecurity.github.io/megalinter/beta/flavors/ci_light/) | Optimized for CI items (Dockerfile, Jenkinsfile, JSON/YAML schemas,XML | 20 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-ci_light/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-ci_light) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/repository_gitleaks.md b/docs/descriptors/repository_gitleaks.md index 9a0fa9dd31e..9e385aac9c7 100644 --- a/docs/descriptors/repository_gitleaks.md +++ b/docs/descriptors/repository_gitleaks.md @@ -35,6 +35,7 @@ This linter is available in the following flavours |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:-----------------------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | | | [ci_light](https://oxsecurity.github.io/megalinter/beta/flavors/ci_light/) | Optimized for CI items (Dockerfile, Jenkinsfile, JSON/YAML schemas,XML | 20 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-ci_light/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-ci_light) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/repository_goodcheck.md b/docs/descriptors/repository_goodcheck.md index 720e37ca87e..007efad9bce 100644 --- a/docs/descriptors/repository_goodcheck.md +++ b/docs/descriptors/repository_goodcheck.md @@ -35,6 +35,7 @@ This linter is available in the following flavours |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:-----------------------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | | | [ci_light](https://oxsecurity.github.io/megalinter/beta/flavors/ci_light/) | Optimized for CI items (Dockerfile, Jenkinsfile, JSON/YAML schemas,XML | 20 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-ci_light/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-ci_light) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/repository_secretlint.md b/docs/descriptors/repository_secretlint.md index 1e6e2c65a96..7488c7963cd 100644 --- a/docs/descriptors/repository_secretlint.md +++ b/docs/descriptors/repository_secretlint.md @@ -44,6 +44,7 @@ This linter is available in the following flavours |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:-----------------------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | | | [ci_light](https://oxsecurity.github.io/megalinter/beta/flavors/ci_light/) | Optimized for CI items (Dockerfile, Jenkinsfile, JSON/YAML schemas,XML | 20 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-ci_light/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-ci_light) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/repository_semgrep.md b/docs/descriptors/repository_semgrep.md index 7e53c088705..4b91c3dfe41 100644 --- a/docs/descriptors/repository_semgrep.md +++ b/docs/descriptors/repository_semgrep.md @@ -57,6 +57,7 @@ This linter is available in the following flavours | | Flavor | Description | Embedded linters | Info | |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/repository_trivy.md b/docs/descriptors/repository_trivy.md index 7b9a712cb7e..703419edad1 100644 --- a/docs/descriptors/repository_trivy.md +++ b/docs/descriptors/repository_trivy.md @@ -49,6 +49,7 @@ This linter is available in the following flavours |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:-----------------------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | | | [ci_light](https://oxsecurity.github.io/megalinter/beta/flavors/ci_light/) | Optimized for CI items (Dockerfile, Jenkinsfile, JSON/YAML schemas,XML | 20 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-ci_light/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-ci_light) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/rst_rst_lint.md b/docs/descriptors/rst_rst_lint.md index 964b0e73734..1292318e94a 100644 --- a/docs/descriptors/rst_rst_lint.md +++ b/docs/descriptors/rst_rst_lint.md @@ -31,10 +31,11 @@ This linter is available in the following flavours -| | Flavor | Description | Embedded linters | Info | -|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------|:------------------------------------|:----------------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | -| | [python](https://oxsecurity.github.io/megalinter/beta/flavors/python/) | Optimized for PYTHON based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-python/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-python) | +| | Flavor | Description | Embedded linters | Info | +|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------|:------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | +| | [python](https://oxsecurity.github.io/megalinter/beta/flavors/python/) | Optimized for PYTHON based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-python/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-python) | ## Behind the scenes diff --git a/docs/descriptors/rst_rstcheck.md b/docs/descriptors/rst_rstcheck.md index 415b7059948..36bc3a539cb 100644 --- a/docs/descriptors/rst_rstcheck.md +++ b/docs/descriptors/rst_rstcheck.md @@ -43,10 +43,11 @@ Use rstcheck in your favorite IDE to catch errors before MegaLinter ! This linter is available in the following flavours -| | Flavor | Description | Embedded linters | Info | -|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------|:------------------------------------|:----------------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | -| | [python](https://oxsecurity.github.io/megalinter/beta/flavors/python/) | Optimized for PYTHON based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-python/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-python) | +| | Flavor | Description | Embedded linters | Info | +|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------|:------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | +| | [python](https://oxsecurity.github.io/megalinter/beta/flavors/python/) | Optimized for PYTHON based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-python/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-python) | ## Behind the scenes diff --git a/docs/descriptors/ruby_rubocop.md b/docs/descriptors/ruby_rubocop.md index a5e021bb5bc..acf89b0a1cf 100644 --- a/docs/descriptors/ruby_rubocop.md +++ b/docs/descriptors/ruby_rubocop.md @@ -62,10 +62,11 @@ Use rubocop in your favorite IDE to catch errors before MegaLinter ! This linter is available in the following flavours -| | Flavor | Description | Embedded linters | Info | -|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------|:----------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | -| | [ruby](https://oxsecurity.github.io/megalinter/beta/flavors/ruby/) | Optimized for RUBY based projects | 47 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-ruby/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-ruby) | +| | Flavor | Description | Embedded linters | Info | +|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------|:------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | +| | [ruby](https://oxsecurity.github.io/megalinter/beta/flavors/ruby/) | Optimized for RUBY based projects | 47 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-ruby/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-ruby) | ## Behind the scenes diff --git a/docs/descriptors/rust_clippy.md b/docs/descriptors/rust_clippy.md index d6667ea6182..ff2123fdec0 100644 --- a/docs/descriptors/rust_clippy.md +++ b/docs/descriptors/rust_clippy.md @@ -41,10 +41,11 @@ Use clippy in your favorite IDE to catch errors before MegaLinter ! This linter is available in the following flavours -| | Flavor | Description | Embedded linters | Info | -|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------|:----------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | -| | [rust](https://oxsecurity.github.io/megalinter/beta/flavors/rust/) | Optimized for RUST based projects | 47 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-rust/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-rust) | +| | Flavor | Description | Embedded linters | Info | +|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------|:------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | +| | [rust](https://oxsecurity.github.io/megalinter/beta/flavors/rust/) | Optimized for RUST based projects | 47 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-rust/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-rust) | ## Behind the scenes diff --git a/docs/descriptors/spell_cspell.md b/docs/descriptors/spell_cspell.md index b6eca38e281..4c41b5a8390 100644 --- a/docs/descriptors/spell_cspell.md +++ b/docs/descriptors/spell_cspell.md @@ -47,6 +47,7 @@ This linter is available in the following flavours | | Flavor | Description | Embedded linters | Info | |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/spell_misspell.md b/docs/descriptors/spell_misspell.md index afd7f1d4168..abf23bd6149 100644 --- a/docs/descriptors/spell_misspell.md +++ b/docs/descriptors/spell_misspell.md @@ -36,6 +36,7 @@ This linter is available in the following flavours | | Flavor | Description | Embedded linters | Info | |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/spell_proselint.md b/docs/descriptors/spell_proselint.md index 4558a5400eb..8624ec62763 100644 --- a/docs/descriptors/spell_proselint.md +++ b/docs/descriptors/spell_proselint.md @@ -58,6 +58,7 @@ This linter is available in the following flavours | | Flavor | Description | Embedded linters | Info | |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/sql_sql_lint.md b/docs/descriptors/sql_sql_lint.md index c8b3f7c3163..6e0300202f5 100644 --- a/docs/descriptors/sql_sql_lint.md +++ b/docs/descriptors/sql_sql_lint.md @@ -47,6 +47,7 @@ This linter is available in the following flavours | | Flavor | Description | Embedded linters | Info | |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/sql_sqlfluff.md b/docs/descriptors/sql_sqlfluff.md index cd71af2506d..aeea99c9cee 100644 --- a/docs/descriptors/sql_sqlfluff.md +++ b/docs/descriptors/sql_sqlfluff.md @@ -46,6 +46,7 @@ This linter is available in the following flavours | | Flavor | Description | Embedded linters | Info | |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/swift_swiftlint.md b/docs/descriptors/swift_swiftlint.md index 35c47e1eb46..3a47614a6cc 100644 --- a/docs/descriptors/swift_swiftlint.md +++ b/docs/descriptors/swift_swiftlint.md @@ -48,10 +48,11 @@ Use swiftlint in your favorite IDE to catch errors before MegaLinter ! This linter is available in the following flavours -| | Flavor | Description | Embedded linters | Info | -|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------|:-----------------------------------|:----------------:|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | -| | [swift](https://oxsecurity.github.io/megalinter/beta/flavors/swift/) | Optimized for SWIFT based projects | 47 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-swift/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-swift) | +| | Flavor | Description | Embedded linters | Info | +|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------|:------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | +| | [swift](https://oxsecurity.github.io/megalinter/beta/flavors/swift/) | Optimized for SWIFT based projects | 47 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-swift/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-swift) | ## Behind the scenes diff --git a/docs/descriptors/terraform_kics.md b/docs/descriptors/terraform_kics.md index 87256d52dc1..cea872af1b7 100644 --- a/docs/descriptors/terraform_kics.md +++ b/docs/descriptors/terraform_kics.md @@ -40,11 +40,12 @@ This linter is available in the following flavours -| | Flavor | Description | Embedded linters | Info | -|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------|:---------------------------------------|:----------------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | -| | [security](https://oxsecurity.github.io/megalinter/beta/flavors/security/) | Optimized for security | 21 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-security/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-security) | -| | [terraform](https://oxsecurity.github.io/megalinter/beta/flavors/terraform/) | Optimized for TERRAFORM based projects | 52 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-terraform/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-terraform) | +| | Flavor | Description | Embedded linters | Info | +|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------|:------------------------------------------------|:----------------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | +| | [security](https://oxsecurity.github.io/megalinter/beta/flavors/security/) | Optimized for security | 21 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-security/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-security) | +| | [terraform](https://oxsecurity.github.io/megalinter/beta/flavors/terraform/) | Optimized for TERRAFORM based projects | 52 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-terraform/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-terraform) | ## Behind the scenes diff --git a/docs/descriptors/terraform_terraform_fmt.md b/docs/descriptors/terraform_terraform_fmt.md index adaa0f62a11..d0168d053d5 100644 --- a/docs/descriptors/terraform_terraform_fmt.md +++ b/docs/descriptors/terraform_terraform_fmt.md @@ -51,10 +51,11 @@ Use terraform-fmt in your favorite IDE to catch errors before MegaLinter ! This linter is available in the following flavours -| | Flavor | Description | Embedded linters | Info | -|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------|:---------------------------------------|:----------------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | -| | [terraform](https://oxsecurity.github.io/megalinter/beta/flavors/terraform/) | Optimized for TERRAFORM based projects | 52 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-terraform/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-terraform) | +| | Flavor | Description | Embedded linters | Info | +|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------|:------------------------------------------------|:----------------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | +| | [terraform](https://oxsecurity.github.io/megalinter/beta/flavors/terraform/) | Optimized for TERRAFORM based projects | 52 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-terraform/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-terraform) | ## Behind the scenes diff --git a/docs/descriptors/terraform_terragrunt.md b/docs/descriptors/terraform_terragrunt.md index 51ccc87043f..3b28de6be38 100644 --- a/docs/descriptors/terraform_terragrunt.md +++ b/docs/descriptors/terraform_terragrunt.md @@ -36,11 +36,12 @@ This linter is available in the following flavours -| | Flavor | Description | Embedded linters | Info | -|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------|:---------------------------------------|:----------------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | -| | [security](https://oxsecurity.github.io/megalinter/beta/flavors/security/) | Optimized for security | 21 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-security/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-security) | -| | [terraform](https://oxsecurity.github.io/megalinter/beta/flavors/terraform/) | Optimized for TERRAFORM based projects | 52 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-terraform/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-terraform) | +| | Flavor | Description | Embedded linters | Info | +|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------|:------------------------------------------------|:----------------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | +| | [security](https://oxsecurity.github.io/megalinter/beta/flavors/security/) | Optimized for security | 21 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-security/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-security) | +| | [terraform](https://oxsecurity.github.io/megalinter/beta/flavors/terraform/) | Optimized for TERRAFORM based projects | 52 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-terraform/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-terraform) | ## Behind the scenes diff --git a/docs/descriptors/terraform_terrascan.md b/docs/descriptors/terraform_terrascan.md index 2b3b949224e..c01f9f5955e 100644 --- a/docs/descriptors/terraform_terrascan.md +++ b/docs/descriptors/terraform_terrascan.md @@ -39,11 +39,12 @@ This linter is available in the following flavours -| | Flavor | Description | Embedded linters | Info | -|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------|:---------------------------------------|:----------------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | -| | [security](https://oxsecurity.github.io/megalinter/beta/flavors/security/) | Optimized for security | 21 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-security/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-security) | -| | [terraform](https://oxsecurity.github.io/megalinter/beta/flavors/terraform/) | Optimized for TERRAFORM based projects | 52 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-terraform/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-terraform) | +| | Flavor | Description | Embedded linters | Info | +|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------|:------------------------------------------------|:----------------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | +| | [security](https://oxsecurity.github.io/megalinter/beta/flavors/security/) | Optimized for security | 21 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-security/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-security) | +| | [terraform](https://oxsecurity.github.io/megalinter/beta/flavors/terraform/) | Optimized for TERRAFORM based projects | 52 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-terraform/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-terraform) | ## Behind the scenes diff --git a/docs/descriptors/terraform_tflint.md b/docs/descriptors/terraform_tflint.md index 19ad5b6db5f..ae02e608a41 100644 --- a/docs/descriptors/terraform_tflint.md +++ b/docs/descriptors/terraform_tflint.md @@ -37,11 +37,12 @@ This linter is available in the following flavours -| | Flavor | Description | Embedded linters | Info | -|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------|:---------------------------------------|:----------------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | -| | [security](https://oxsecurity.github.io/megalinter/beta/flavors/security/) | Optimized for security | 21 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-security/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-security) | -| | [terraform](https://oxsecurity.github.io/megalinter/beta/flavors/terraform/) | Optimized for TERRAFORM based projects | 52 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-terraform/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-terraform) | +| | Flavor | Description | Embedded linters | Info | +|:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------|:------------------------------------------------|:----------------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | +| | [security](https://oxsecurity.github.io/megalinter/beta/flavors/security/) | Optimized for security | 21 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-security/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-security) | +| | [terraform](https://oxsecurity.github.io/megalinter/beta/flavors/terraform/) | Optimized for TERRAFORM based projects | 52 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-terraform/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-terraform) | ## Behind the scenes diff --git a/docs/descriptors/tsx_eslint.md b/docs/descriptors/tsx_eslint.md index 02d0bbc23c2..f2e571b7570 100644 --- a/docs/descriptors/tsx_eslint.md +++ b/docs/descriptors/tsx_eslint.md @@ -70,6 +70,7 @@ This linter is available in the following flavours | | Flavor | Description | Embedded linters | Info | |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------|:------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [javascript](https://oxsecurity.github.io/megalinter/beta/flavors/javascript/) | Optimized for JAVASCRIPT or TYPESCRIPT based projects | 55 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-javascript/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-javascript) | ## Behind the scenes diff --git a/docs/descriptors/typescript_eslint.md b/docs/descriptors/typescript_eslint.md index 8d1c43297b7..4879d5e75f8 100644 --- a/docs/descriptors/typescript_eslint.md +++ b/docs/descriptors/typescript_eslint.md @@ -70,6 +70,7 @@ This linter is available in the following flavours | | Flavor | Description | Embedded linters | Info | |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------|:------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [javascript](https://oxsecurity.github.io/megalinter/beta/flavors/javascript/) | Optimized for JAVASCRIPT or TYPESCRIPT based projects | 55 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-javascript/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-javascript) | ## Behind the scenes diff --git a/docs/descriptors/typescript_prettier.md b/docs/descriptors/typescript_prettier.md index ae7fae9093a..099f654e256 100644 --- a/docs/descriptors/typescript_prettier.md +++ b/docs/descriptors/typescript_prettier.md @@ -67,6 +67,7 @@ This linter is available in the following flavours | | Flavor | Description | Embedded linters | Info | |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------|:------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [javascript](https://oxsecurity.github.io/megalinter/beta/flavors/javascript/) | Optimized for JAVASCRIPT or TYPESCRIPT based projects | 55 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-javascript/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-javascript) | ## Behind the scenes diff --git a/docs/descriptors/typescript_standard.md b/docs/descriptors/typescript_standard.md index fe92d03d261..fbeb01db799 100644 --- a/docs/descriptors/typescript_standard.md +++ b/docs/descriptors/typescript_standard.md @@ -60,6 +60,7 @@ This linter is available in the following flavours | | Flavor | Description | Embedded linters | Info | |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------|:------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [javascript](https://oxsecurity.github.io/megalinter/beta/flavors/javascript/) | Optimized for JAVASCRIPT or TYPESCRIPT based projects | 55 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-javascript/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-javascript) | ## Behind the scenes diff --git a/docs/descriptors/xml_xmllint.md b/docs/descriptors/xml_xmllint.md index 809e98f7768..4b3c03e5a00 100644 --- a/docs/descriptors/xml_xmllint.md +++ b/docs/descriptors/xml_xmllint.md @@ -34,6 +34,7 @@ This linter is available in the following flavours |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:-----------------------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | | | [ci_light](https://oxsecurity.github.io/megalinter/beta/flavors/ci_light/) | Optimized for CI items (Dockerfile, Jenkinsfile, JSON/YAML schemas,XML | 20 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-ci_light/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-ci_light) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/yaml_prettier.md b/docs/descriptors/yaml_prettier.md index 7db252f9397..9260df3638a 100644 --- a/docs/descriptors/yaml_prettier.md +++ b/docs/descriptors/yaml_prettier.md @@ -67,6 +67,7 @@ This linter is available in the following flavours |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:-----------------------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | | | [ci_light](https://oxsecurity.github.io/megalinter/beta/flavors/ci_light/) | Optimized for CI items (Dockerfile, Jenkinsfile, JSON/YAML schemas,XML | 20 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-ci_light/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-ci_light) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/yaml_v8r.md b/docs/descriptors/yaml_v8r.md index a8fb4af36b1..90ef54f7a34 100644 --- a/docs/descriptors/yaml_v8r.md +++ b/docs/descriptors/yaml_v8r.md @@ -49,6 +49,7 @@ This linter is available in the following flavours |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:-----------------------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | | | [ci_light](https://oxsecurity.github.io/megalinter/beta/flavors/ci_light/) | Optimized for CI items (Dockerfile, Jenkinsfile, JSON/YAML schemas,XML | 20 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-ci_light/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-ci_light) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/descriptors/yaml_yamllint.md b/docs/descriptors/yaml_yamllint.md index 1208c4e6192..0b4feffd8aa 100644 --- a/docs/descriptors/yaml_yamllint.md +++ b/docs/descriptors/yaml_yamllint.md @@ -49,6 +49,7 @@ This linter is available in the following flavours |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------|:-----------------------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | | | [ci_light](https://oxsecurity.github.io/megalinter/beta/flavors/ci_light/) | Optimized for CI items (Dockerfile, Jenkinsfile, JSON/YAML schemas,XML | 20 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-ci_light/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-ci_light) | +| | [cupcake](https://oxsecurity.github.io/megalinter/beta/flavors/cupcake/) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](https://oxsecurity.github.io/megalinter/beta/flavors/documentation/) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](https://oxsecurity.github.io/megalinter/beta/flavors/dotnet/) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](https://oxsecurity.github.io/megalinter/beta/flavors/go/) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/flavors.md b/docs/flavors.md index ebf2cc8276c..50bf8fb1507 100644 --- a/docs/flavors.md +++ b/docs/flavors.md @@ -16,6 +16,7 @@ _The following table does not display docker pulls from [MegaLinter v4 & v5 imag |:--------------------------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------|:-----------------------------------------------------------------------|:----------------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | | [all](https://oxsecurity.github.io/megalinter/beta/supported-linters/) | Default MegaLinter Flavor | 108 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter) | | | [ci_light](flavors/ci_light.md#readme) | Optimized for CI items (Dockerfile, Jenkinsfile, JSON/YAML schemas,XML | 20 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-ci_light/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-ci_light) | +| | [cupcake](flavors/cupcake.md#readme) | MegaLinter for the most commonly used languages | 78 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) | | | [documentation](flavors/documentation.md#readme) | MegaLinter for documentation projects | 46 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-documentation/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-documentation) | | | [dotnet](flavors/dotnet.md#readme) | Optimized for C, C++, C# or VB based projects | 56 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-dotnet/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-dotnet) | | | [go](flavors/go.md#readme) | Optimized for GO based projects | 49 | ![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-go/beta) ![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-go) | diff --git a/docs/flavors/cupcake.md b/docs/flavors/cupcake.md new file mode 100644 index 00000000000..634c12ef2ae --- /dev/null +++ b/docs/flavors/cupcake.md @@ -0,0 +1,115 @@ +# cupcake MegaLinter Flavor + +![Docker Image Size (tag)](https://img.shields.io/docker/image-size/oxsecurity/megalinter-cupcake/beta) +![Docker Pulls](https://img.shields.io/docker/pulls/oxsecurity/megalinter-cupcake) + +## Description + +MegaLinter for the most commonly used languages + +## Usage + +- [GitHub Action](https://oxsecurity.github.io/megalinter/beta/installation/#github-action): **oxsecurity/megalinter/flavors/cupcake@beta** +- Docker image: **oxsecurity/megalinter-cupcake:beta** +- [mega-linter-runner](https://oxsecurity.github.io/megalinter/beta/mega-linter-runner/): `mega-linter-runner --flavor cupcake` + +## Embedded linters + +### Languages + +| | Language | Linter | Configuration key | Additional | +|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------:|----------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| | [**BASH**](https://oxsecurity.github.io/megalinter/beta/descriptors/bash/) | [bash-exec](https://oxsecurity.github.io/megalinter/beta/descriptors/bash_bash_exec/) | [BASH_EXEC](https://oxsecurity.github.io/megalinter/beta/descriptors/bash_bash_exec/) | | +| | | [shellcheck](https://oxsecurity.github.io/megalinter/beta/descriptors/bash_shellcheck/) | [BASH_SHELLCHECK](https://oxsecurity.github.io/megalinter/beta/descriptors/bash_shellcheck/) | [![GitHub stars](https://img.shields.io/github/stars/koalaman/shellcheck?cacheSeconds=3600)](https://github.com/koalaman/shellcheck) ![sarif](https://shields.io/badge/-SARIF-orange) | +| | | [shfmt](https://oxsecurity.github.io/megalinter/beta/descriptors/bash_shfmt/) | [BASH_SHFMT](https://oxsecurity.github.io/megalinter/beta/descriptors/bash_shfmt/) | [![GitHub stars](https://img.shields.io/github/stars/mvdan/sh?cacheSeconds=3600)](https://github.com/mvdan/sh) ![formatter](https://shields.io/badge/-format-yellow) | +| | [**C**](https://oxsecurity.github.io/megalinter/beta/descriptors/c/) | [cpplint](https://oxsecurity.github.io/megalinter/beta/descriptors/c_cpplint/) | [C_CPPLINT](https://oxsecurity.github.io/megalinter/beta/descriptors/c_cpplint/) | | +| | [**CLOJURE**](https://oxsecurity.github.io/megalinter/beta/descriptors/clojure/) | [clj-kondo](https://oxsecurity.github.io/megalinter/beta/descriptors/clojure_clj_kondo/) | [CLOJURE_CLJ_KONDO](https://oxsecurity.github.io/megalinter/beta/descriptors/clojure_clj_kondo/) | [![GitHub stars](https://img.shields.io/github/stars/borkdude/clj-kondo?cacheSeconds=3600)](https://github.com/borkdude/clj-kondo) | +| | [**C++** (CPP)](https://oxsecurity.github.io/megalinter/beta/descriptors/cpp/) | [cpplint](https://oxsecurity.github.io/megalinter/beta/descriptors/cpp_cpplint/) | [CPP_CPPLINT](https://oxsecurity.github.io/megalinter/beta/descriptors/cpp_cpplint/) | [![GitHub stars](https://img.shields.io/github/stars/cpplint/cpplint?cacheSeconds=3600)](https://github.com/cpplint/cpplint) | +| | [**GO**](https://oxsecurity.github.io/megalinter/beta/descriptors/go/) | [golangci-lint](https://oxsecurity.github.io/megalinter/beta/descriptors/go_golangci_lint/) | [GO_GOLANGCI_LINT](https://oxsecurity.github.io/megalinter/beta/descriptors/go_golangci_lint/) | [![GitHub stars](https://img.shields.io/github/stars/golangci/golangci-lint?cacheSeconds=3600)](https://github.com/golangci/golangci-lint) | +| | | [revive](https://oxsecurity.github.io/megalinter/beta/descriptors/go_revive/) | [GO_REVIVE](https://oxsecurity.github.io/megalinter/beta/descriptors/go_revive/) | [![GitHub stars](https://img.shields.io/github/stars/mgechev/revive?cacheSeconds=3600)](https://github.com/mgechev/revive) ![sarif](https://shields.io/badge/-SARIF-orange) | +| | [**GROOVY**](https://oxsecurity.github.io/megalinter/beta/descriptors/groovy/) | [npm-groovy-lint](https://oxsecurity.github.io/megalinter/beta/descriptors/groovy_npm_groovy_lint/) | [GROOVY_NPM_GROOVY_LINT](https://oxsecurity.github.io/megalinter/beta/descriptors/groovy_npm_groovy_lint/) | [![GitHub stars](https://img.shields.io/github/stars/nvuillam/npm-groovy-lint?cacheSeconds=3600)](https://github.com/nvuillam/npm-groovy-lint) ![autofix](https://shields.io/badge/-autofix-green) ![sarif](https://shields.io/badge/-SARIF-orange) | +| | [**JAVA**](https://oxsecurity.github.io/megalinter/beta/descriptors/java/) | [checkstyle](https://oxsecurity.github.io/megalinter/beta/descriptors/java_checkstyle/) | [JAVA_CHECKSTYLE](https://oxsecurity.github.io/megalinter/beta/descriptors/java_checkstyle/) | [![GitHub stars](https://img.shields.io/github/stars/checkstyle/checkstyle?cacheSeconds=3600)](https://github.com/checkstyle/checkstyle) ![sarif](https://shields.io/badge/-SARIF-orange) | +| | | [pmd](https://oxsecurity.github.io/megalinter/beta/descriptors/java_pmd/) | [JAVA_PMD](https://oxsecurity.github.io/megalinter/beta/descriptors/java_pmd/) | [![GitHub stars](https://img.shields.io/github/stars/pmd/pmd?cacheSeconds=3600)](https://github.com/pmd/pmd) ![sarif](https://shields.io/badge/-SARIF-orange) | +| | [**JAVASCRIPT**](https://oxsecurity.github.io/megalinter/beta/descriptors/javascript/) | [eslint](https://oxsecurity.github.io/megalinter/beta/descriptors/javascript_eslint/) | [JAVASCRIPT_ES](https://oxsecurity.github.io/megalinter/beta/descriptors/javascript_eslint/) | [![GitHub stars](https://img.shields.io/github/stars/eslint/eslint?cacheSeconds=3600)](https://github.com/eslint/eslint) ![autofix](https://shields.io/badge/-autofix-green) ![sarif](https://shields.io/badge/-SARIF-orange) | +| | | [standard](https://oxsecurity.github.io/megalinter/beta/descriptors/javascript_standard/) | [JAVASCRIPT_STANDARD](https://oxsecurity.github.io/megalinter/beta/descriptors/javascript_standard/) | [![GitHub stars](https://img.shields.io/github/stars/standard/standard?cacheSeconds=3600)](https://github.com/standard/standard) ![autofix](https://shields.io/badge/-autofix-green) | +| | | [prettier](https://oxsecurity.github.io/megalinter/beta/descriptors/javascript_prettier/) | [JAVASCRIPT_PRETTIER](https://oxsecurity.github.io/megalinter/beta/descriptors/javascript_prettier/) | [![GitHub stars](https://img.shields.io/github/stars/prettier/prettier?cacheSeconds=3600)](https://github.com/prettier/prettier) ![formatter](https://shields.io/badge/-format-yellow) | +| | [**JSX**](https://oxsecurity.github.io/megalinter/beta/descriptors/jsx/) | [eslint](https://oxsecurity.github.io/megalinter/beta/descriptors/jsx_eslint/) | [JSX_ESLINT](https://oxsecurity.github.io/megalinter/beta/descriptors/jsx_eslint/) | ![autofix](https://shields.io/badge/-autofix-green) ![sarif](https://shields.io/badge/-SARIF-orange) | +| | [**KOTLIN**](https://oxsecurity.github.io/megalinter/beta/descriptors/kotlin/) | [ktlint](https://oxsecurity.github.io/megalinter/beta/descriptors/kotlin_ktlint/) | [KOTLIN_KTLINT](https://oxsecurity.github.io/megalinter/beta/descriptors/kotlin_ktlint/) | [![GitHub stars](https://img.shields.io/github/stars/pinterest/ktlint?cacheSeconds=3600)](https://github.com/pinterest/ktlint) ![autofix](https://shields.io/badge/-autofix-green) ![sarif](https://shields.io/badge/-SARIF-orange) | +| | [**MAKEFILE**](https://oxsecurity.github.io/megalinter/beta/descriptors/makefile/) | [checkmake](https://oxsecurity.github.io/megalinter/beta/descriptors/makefile_checkmake/) | [MAKEFILE_CHECKMAKE](https://oxsecurity.github.io/megalinter/beta/descriptors/makefile_checkmake/) | [![GitHub stars](https://img.shields.io/github/stars/mrtazz/checkmake?cacheSeconds=3600)](https://github.com/mrtazz/checkmake) | +| | [**PHP**](https://oxsecurity.github.io/megalinter/beta/descriptors/php/) | [phpcs](https://oxsecurity.github.io/megalinter/beta/descriptors/php_phpcs/) | [PHP_PHPCS](https://oxsecurity.github.io/megalinter/beta/descriptors/php_phpcs/) | [![GitHub stars](https://img.shields.io/github/stars/squizlabs/PHP_CodeSniffer?cacheSeconds=3600)](https://github.com/squizlabs/PHP_CodeSniffer) | +| | | [phpstan](https://oxsecurity.github.io/megalinter/beta/descriptors/php_phpstan/) | [PHP_PHPSTAN](https://oxsecurity.github.io/megalinter/beta/descriptors/php_phpstan/) | [![GitHub stars](https://img.shields.io/github/stars/phpstan/phpstan?cacheSeconds=3600)](https://github.com/phpstan/phpstan) | +| | | [psalm](https://oxsecurity.github.io/megalinter/beta/descriptors/php_psalm/) | [PHP_PSALM](https://oxsecurity.github.io/megalinter/beta/descriptors/php_psalm/) | [![GitHub stars](https://img.shields.io/github/stars/vimeo/psalm?cacheSeconds=3600)](https://github.com/vimeo/psalm) ![sarif](https://shields.io/badge/-SARIF-orange) | +| | | [phplint](https://oxsecurity.github.io/megalinter/beta/descriptors/php_phplint/) | [PHP_PHPLINT](https://oxsecurity.github.io/megalinter/beta/descriptors/php_phplint/) | | +| | [**PYTHON**](https://oxsecurity.github.io/megalinter/beta/descriptors/python/) | [pylint](https://oxsecurity.github.io/megalinter/beta/descriptors/python_pylint/) | [PYTHON_PYLINT](https://oxsecurity.github.io/megalinter/beta/descriptors/python_pylint/) | [![GitHub stars](https://img.shields.io/github/stars/PyCQA/pylint?cacheSeconds=3600)](https://github.com/PyCQA/pylint) | +| | | [black](https://oxsecurity.github.io/megalinter/beta/descriptors/python_black/) | [PYTHON_BLACK](https://oxsecurity.github.io/megalinter/beta/descriptors/python_black/) | [![GitHub stars](https://img.shields.io/github/stars/psf/black?cacheSeconds=3600)](https://github.com/psf/black) ![formatter](https://shields.io/badge/-format-yellow) | +| | | [flake8](https://oxsecurity.github.io/megalinter/beta/descriptors/python_flake8/) | [PYTHON_FLAKE8](https://oxsecurity.github.io/megalinter/beta/descriptors/python_flake8/) | [![GitHub stars](https://img.shields.io/github/stars/PyCQA/flake8?cacheSeconds=3600)](https://github.com/PyCQA/flake8) | +| | | [isort](https://oxsecurity.github.io/megalinter/beta/descriptors/python_isort/) | [PYTHON_ISORT](https://oxsecurity.github.io/megalinter/beta/descriptors/python_isort/) | [![GitHub stars](https://img.shields.io/github/stars/PyCQA/isort?cacheSeconds=3600)](https://github.com/PyCQA/isort) ![formatter](https://shields.io/badge/-format-yellow) | +| | | [mypy](https://oxsecurity.github.io/megalinter/beta/descriptors/python_mypy/) | [PYTHON_MYPY](https://oxsecurity.github.io/megalinter/beta/descriptors/python_mypy/) | [![GitHub stars](https://img.shields.io/github/stars/python/mypy?cacheSeconds=3600)](https://github.com/python/mypy) | +| | | [pyright](https://oxsecurity.github.io/megalinter/beta/descriptors/python_pyright/) | [PYTHON_PYRIGHT](https://oxsecurity.github.io/megalinter/beta/descriptors/python_pyright/) | [![GitHub stars](https://img.shields.io/github/stars/microsoft/pyright?cacheSeconds=3600)](https://github.com/microsoft/pyright) | +| | [**RUBY**](https://oxsecurity.github.io/megalinter/beta/descriptors/ruby/) | [rubocop](https://oxsecurity.github.io/megalinter/beta/descriptors/ruby_rubocop/) | [RUBY_RUBOCOP](https://oxsecurity.github.io/megalinter/beta/descriptors/ruby_rubocop/) | [![GitHub stars](https://img.shields.io/github/stars/rubocop-hq/rubocop?cacheSeconds=3600)](https://github.com/rubocop-hq/rubocop) ![autofix](https://shields.io/badge/-autofix-green) | +| | [**RUST**](https://oxsecurity.github.io/megalinter/beta/descriptors/rust/) | [clippy](https://oxsecurity.github.io/megalinter/beta/descriptors/rust_clippy/) | [RUST_CLIPPY](https://oxsecurity.github.io/megalinter/beta/descriptors/rust_clippy/) | [![GitHub stars](https://img.shields.io/github/stars/rust-lang/rust-clippy?cacheSeconds=3600)](https://github.com/rust-lang/rust-clippy) | +| | [**SQL**](https://oxsecurity.github.io/megalinter/beta/descriptors/sql/) | [sql-lint](https://oxsecurity.github.io/megalinter/beta/descriptors/sql_sql_lint/) | [SQL_SQL_LINT](https://oxsecurity.github.io/megalinter/beta/descriptors/sql_sql_lint/) | [![GitHub stars](https://img.shields.io/github/stars/joereynolds/sql-lint?cacheSeconds=3600)](https://github.com/joereynolds/sql-lint) | +| | | [sqlfluff](https://oxsecurity.github.io/megalinter/beta/descriptors/sql_sqlfluff/) | [SQL_SQLFLUFF](https://oxsecurity.github.io/megalinter/beta/descriptors/sql_sqlfluff/) | [![GitHub stars](https://img.shields.io/github/stars/sqlfluff/sqlfluff?cacheSeconds=3600)](https://github.com/sqlfluff/sqlfluff) | +| | [**SWIFT**](https://oxsecurity.github.io/megalinter/beta/descriptors/swift/) | [swiftlint](https://oxsecurity.github.io/megalinter/beta/descriptors/swift_swiftlint/) | [SWIFT_SWIFTLINT](https://oxsecurity.github.io/megalinter/beta/descriptors/swift_swiftlint/) | [![GitHub stars](https://img.shields.io/github/stars/realm/SwiftLint?cacheSeconds=3600)](https://github.com/realm/SwiftLint) ![autofix](https://shields.io/badge/-autofix-green) | +| | [**TSX**](https://oxsecurity.github.io/megalinter/beta/descriptors/tsx/) | [eslint](https://oxsecurity.github.io/megalinter/beta/descriptors/tsx_eslint/) | [TSX_ESLINT](https://oxsecurity.github.io/megalinter/beta/descriptors/tsx_eslint/) | ![autofix](https://shields.io/badge/-autofix-green) ![sarif](https://shields.io/badge/-SARIF-orange) | +| | [**TYPESCRIPT**](https://oxsecurity.github.io/megalinter/beta/descriptors/typescript/) | [eslint](https://oxsecurity.github.io/megalinter/beta/descriptors/typescript_eslint/) | [TYPESCRIPT_ES](https://oxsecurity.github.io/megalinter/beta/descriptors/typescript_eslint/) | [![GitHub stars](https://img.shields.io/github/stars/eslint/eslint?cacheSeconds=3600)](https://github.com/eslint/eslint) ![autofix](https://shields.io/badge/-autofix-green) ![sarif](https://shields.io/badge/-SARIF-orange) | +| | | [standard](https://oxsecurity.github.io/megalinter/beta/descriptors/typescript_standard/) | [TYPESCRIPT_STANDARD](https://oxsecurity.github.io/megalinter/beta/descriptors/typescript_standard/) | [![GitHub stars](https://img.shields.io/github/stars/standard/standard?cacheSeconds=3600)](https://github.com/standard/standard) ![autofix](https://shields.io/badge/-autofix-green) | +| | | [prettier](https://oxsecurity.github.io/megalinter/beta/descriptors/typescript_prettier/) | [TYPESCRIPT_PRETTIER](https://oxsecurity.github.io/megalinter/beta/descriptors/typescript_prettier/) | [![GitHub stars](https://img.shields.io/github/stars/prettier/prettier?cacheSeconds=3600)](https://github.com/prettier/prettier) ![formatter](https://shields.io/badge/-format-yellow) | + +### Formats + +| | Format | Linter | Configuration key | Additional | +|:------------------------------------------------------------------------------------------------------------------------------------------------------------------:|------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| | [**CSS**](https://oxsecurity.github.io/megalinter/beta/descriptors/css/) | [stylelint](https://oxsecurity.github.io/megalinter/beta/descriptors/css_stylelint/) | [CSS_STYLELINT](https://oxsecurity.github.io/megalinter/beta/descriptors/css_stylelint/) | [![GitHub stars](https://img.shields.io/github/stars/stylelint/stylelint?cacheSeconds=3600)](https://github.com/stylelint/stylelint) ![autofix](https://shields.io/badge/-autofix-green) | +| | | [scss-lint](https://oxsecurity.github.io/megalinter/beta/descriptors/css_scss_lint/) | [CSS_SCSS_LINT](https://oxsecurity.github.io/megalinter/beta/descriptors/css_scss_lint/) | [![GitHub stars](https://img.shields.io/github/stars/sds/scss-lint?cacheSeconds=3600)](https://github.com/sds/scss-lint) | +| | [**ENV**](https://oxsecurity.github.io/megalinter/beta/descriptors/env/) | [dotenv-linter](https://oxsecurity.github.io/megalinter/beta/descriptors/env_dotenv_linter/) | [ENV_DOTENV_LINTER](https://oxsecurity.github.io/megalinter/beta/descriptors/env_dotenv_linter/) | [![GitHub stars](https://img.shields.io/github/stars/dotenv-linter/dotenv-linter?cacheSeconds=3600)](https://github.com/dotenv-linter/dotenv-linter) ![autofix](https://shields.io/badge/-autofix-green) | +| | [**GRAPHQL**](https://oxsecurity.github.io/megalinter/beta/descriptors/graphql/) | [graphql-schema-linter](https://oxsecurity.github.io/megalinter/beta/descriptors/graphql_graphql_schema_linter/) | [GRAPHQL_GRAPHQL_SCHEMA_LINTER](https://oxsecurity.github.io/megalinter/beta/descriptors/graphql_graphql_schema_linter/) | [![GitHub stars](https://img.shields.io/github/stars/cjoudrey/graphql-schema-linter?cacheSeconds=3600)](https://github.com/cjoudrey/graphql-schema-linter) | +| | [**HTML**](https://oxsecurity.github.io/megalinter/beta/descriptors/html/) | [djlint](https://oxsecurity.github.io/megalinter/beta/descriptors/html_djlint/) | [HTML_DJLINT](https://oxsecurity.github.io/megalinter/beta/descriptors/html_djlint/) | [![GitHub stars](https://img.shields.io/github/stars/Riverside-Healthcare/djlint?cacheSeconds=3600)](https://github.com/Riverside-Healthcare/djlint) | +| | | [htmlhint](https://oxsecurity.github.io/megalinter/beta/descriptors/html_htmlhint/) | [HTML_HTMLHINT](https://oxsecurity.github.io/megalinter/beta/descriptors/html_htmlhint/) | [![GitHub stars](https://img.shields.io/github/stars/htmlhint/HTMLHint?cacheSeconds=3600)](https://github.com/htmlhint/HTMLHint) | +| | [**JSON**](https://oxsecurity.github.io/megalinter/beta/descriptors/json/) | [jsonlint](https://oxsecurity.github.io/megalinter/beta/descriptors/json_jsonlint/) | [JSON_JSONLINT](https://oxsecurity.github.io/megalinter/beta/descriptors/json_jsonlint/) | [![GitHub stars](https://img.shields.io/github/stars/prantlf/jsonlint?cacheSeconds=3600)](https://github.com/prantlf/jsonlint) | +| | | [eslint-plugin-jsonc](https://oxsecurity.github.io/megalinter/beta/descriptors/json_eslint_plugin_jsonc/) | [JSON_ESLINT_PLUGIN_JSONC](https://oxsecurity.github.io/megalinter/beta/descriptors/json_eslint_plugin_jsonc/) | [![GitHub stars](https://img.shields.io/github/stars/ota-meshi/eslint-plugin-jsonc?cacheSeconds=3600)](https://github.com/ota-meshi/eslint-plugin-jsonc) ![autofix](https://shields.io/badge/-autofix-green) ![sarif](https://shields.io/badge/-SARIF-orange) | +| | | [v8r](https://oxsecurity.github.io/megalinter/beta/descriptors/json_v8r/) | [JSON_V8R](https://oxsecurity.github.io/megalinter/beta/descriptors/json_v8r/) | [![GitHub stars](https://img.shields.io/github/stars/chris48s/v8r?cacheSeconds=3600)](https://github.com/chris48s/v8r) | +| | | [prettier](https://oxsecurity.github.io/megalinter/beta/descriptors/json_prettier/) | [JSON_PRETTIER](https://oxsecurity.github.io/megalinter/beta/descriptors/json_prettier/) | [![GitHub stars](https://img.shields.io/github/stars/prettier/prettier?cacheSeconds=3600)](https://github.com/prettier/prettier) ![formatter](https://shields.io/badge/-format-yellow) | +| | [**MARKDOWN**](https://oxsecurity.github.io/megalinter/beta/descriptors/markdown/) | [markdownlint](https://oxsecurity.github.io/megalinter/beta/descriptors/markdown_markdownlint/) | [MARKDOWN_MARKDOWNLINT](https://oxsecurity.github.io/megalinter/beta/descriptors/markdown_markdownlint/) | [![GitHub stars](https://img.shields.io/github/stars/DavidAnson/markdownlint?cacheSeconds=3600)](https://github.com/DavidAnson/markdownlint) ![formatter](https://shields.io/badge/-format-yellow) | +| | | [markdown-link-check](https://oxsecurity.github.io/megalinter/beta/descriptors/markdown_markdown_link_check/) | [MARKDOWN_MARKDOWN_LINK_CHECK](https://oxsecurity.github.io/megalinter/beta/descriptors/markdown_markdown_link_check/) | [![GitHub stars](https://img.shields.io/github/stars/tcort/markdown-link-check?cacheSeconds=3600)](https://github.com/tcort/markdown-link-check) | +| | | [markdown-table-formatter](https://oxsecurity.github.io/megalinter/beta/descriptors/markdown_markdown_table_formatter/) | [MARKDOWN_MARKDOWN_TABLE_FORMATTER](https://oxsecurity.github.io/megalinter/beta/descriptors/markdown_markdown_table_formatter/) | [![GitHub stars](https://img.shields.io/github/stars/nvuillam/markdown-table-formatter?cacheSeconds=3600)](https://github.com/nvuillam/markdown-table-formatter) ![formatter](https://shields.io/badge/-format-yellow) | +| | [**RST**](https://oxsecurity.github.io/megalinter/beta/descriptors/rst/) | [rst-lint](https://oxsecurity.github.io/megalinter/beta/descriptors/rst_rst_lint/) | [RST_RST_LINT](https://oxsecurity.github.io/megalinter/beta/descriptors/rst_rst_lint/) | [![GitHub stars](https://img.shields.io/github/stars/twolfson/restructuredtext-lint?cacheSeconds=3600)](https://github.com/twolfson/restructuredtext-lint) | +| | | [rstcheck](https://oxsecurity.github.io/megalinter/beta/descriptors/rst_rstcheck/) | [RST_RSTCHECK](https://oxsecurity.github.io/megalinter/beta/descriptors/rst_rstcheck/) | [![GitHub stars](https://img.shields.io/github/stars/myint/rstcheck?cacheSeconds=3600)](https://github.com/myint/rstcheck) | +| | [**XML**](https://oxsecurity.github.io/megalinter/beta/descriptors/xml/) | [xmllint](https://oxsecurity.github.io/megalinter/beta/descriptors/xml_xmllint/) | [XML_XMLLINT](https://oxsecurity.github.io/megalinter/beta/descriptors/xml_xmllint/) | | +| | [**YAML**](https://oxsecurity.github.io/megalinter/beta/descriptors/yaml/) | [prettier](https://oxsecurity.github.io/megalinter/beta/descriptors/yaml_prettier/) | [YAML_PRETTIER](https://oxsecurity.github.io/megalinter/beta/descriptors/yaml_prettier/) | [![GitHub stars](https://img.shields.io/github/stars/prettier/prettier?cacheSeconds=3600)](https://github.com/prettier/prettier) ![formatter](https://shields.io/badge/-format-yellow) | +| | | [yamllint](https://oxsecurity.github.io/megalinter/beta/descriptors/yaml_yamllint/) | [YAML_YAMLLINT](https://oxsecurity.github.io/megalinter/beta/descriptors/yaml_yamllint/) | [![GitHub stars](https://img.shields.io/github/stars/adrienverge/yamllint?cacheSeconds=3600)](https://github.com/adrienverge/yamllint) | +| | | [v8r](https://oxsecurity.github.io/megalinter/beta/descriptors/yaml_v8r/) | [YAML_V8R](https://oxsecurity.github.io/megalinter/beta/descriptors/yaml_v8r/) | [![GitHub stars](https://img.shields.io/github/stars/chris48s/v8r?cacheSeconds=3600)](https://github.com/chris48s/v8r) | + +### Tooling formats + +| | Tooling format | Linter | Configuration key | Additional | +|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| | [**ACTION**](https://oxsecurity.github.io/megalinter/beta/descriptors/action/) | [actionlint](https://oxsecurity.github.io/megalinter/beta/descriptors/action_actionlint/) | [ACTION_ACTIONLINT](https://oxsecurity.github.io/megalinter/beta/descriptors/action_actionlint/) | [![GitHub stars](https://img.shields.io/github/stars/rhysd/actionlint?cacheSeconds=3600)](https://github.com/rhysd/actionlint) | +| | [**ANSIBLE**](https://oxsecurity.github.io/megalinter/beta/descriptors/ansible/) | [ansible-lint](https://oxsecurity.github.io/megalinter/beta/descriptors/ansible_ansible_lint/) | [ANSIBLE_ANSIBLE_LINT](https://oxsecurity.github.io/megalinter/beta/descriptors/ansible_ansible_lint/) | [![GitHub stars](https://img.shields.io/github/stars/ansible/ansible-lint?cacheSeconds=3600)](https://github.com/ansible/ansible-lint) ![sarif](https://shields.io/badge/-SARIF-orange) | +| | [**CLOUDFORMATION**](https://oxsecurity.github.io/megalinter/beta/descriptors/cloudformation/) | [cfn-lint](https://oxsecurity.github.io/megalinter/beta/descriptors/cloudformation_cfn_lint/) | [CLOUDFORMATION_CFN_LINT](https://oxsecurity.github.io/megalinter/beta/descriptors/cloudformation_cfn_lint/) | [![GitHub stars](https://img.shields.io/github/stars/aws-cloudformation/cfn-lint?cacheSeconds=3600)](https://github.com/aws-cloudformation/cfn-lint) ![sarif](https://shields.io/badge/-SARIF-orange) | +| | [**DOCKERFILE**](https://oxsecurity.github.io/megalinter/beta/descriptors/dockerfile/) | [hadolint](https://oxsecurity.github.io/megalinter/beta/descriptors/dockerfile_hadolint/) | [DOCKERFILE_HADOLINT](https://oxsecurity.github.io/megalinter/beta/descriptors/dockerfile_hadolint/) | [![GitHub stars](https://img.shields.io/github/stars/hadolint/hadolint?cacheSeconds=3600)](https://github.com/hadolint/hadolint) ![sarif](https://shields.io/badge/-SARIF-orange) | +| | [**EDITORCONFIG**](https://oxsecurity.github.io/megalinter/beta/descriptors/editorconfig/) | [editorconfig-checker](https://oxsecurity.github.io/megalinter/beta/descriptors/editorconfig_editorconfig_checker/) | [EDITORCONFIG_EDITORCONFIG_CHECKER](https://oxsecurity.github.io/megalinter/beta/descriptors/editorconfig_editorconfig_checker/) | [![GitHub stars](https://img.shields.io/github/stars/editorconfig-checker/editorconfig-checker?cacheSeconds=3600)](https://github.com/editorconfig-checker/editorconfig-checker) | +| | [**KUBERNETES**](https://oxsecurity.github.io/megalinter/beta/descriptors/kubernetes/) | [kubeval](https://oxsecurity.github.io/megalinter/beta/descriptors/kubernetes_kubeval/) | [KUBERNETES_KUBEVAL](https://oxsecurity.github.io/megalinter/beta/descriptors/kubernetes_kubeval/) | [![GitHub stars](https://img.shields.io/github/stars/instrumenta/kubeval?cacheSeconds=3600)](https://github.com/instrumenta/kubeval) | +| | | [kubeconform](https://oxsecurity.github.io/megalinter/beta/descriptors/kubernetes_kubeconform/) | [KUBERNETES_KUBECONFORM](https://oxsecurity.github.io/megalinter/beta/descriptors/kubernetes_kubeconform/) | [![GitHub stars](https://img.shields.io/github/stars/yannh/kubeconform?cacheSeconds=3600)](https://github.com/yannh/kubeconform) | +| | [**TERRAFORM**](https://oxsecurity.github.io/megalinter/beta/descriptors/terraform/) | [tflint](https://oxsecurity.github.io/megalinter/beta/descriptors/terraform_tflint/) | [TERRAFORM_TFLINT](https://oxsecurity.github.io/megalinter/beta/descriptors/terraform_tflint/) | [![GitHub stars](https://img.shields.io/github/stars/terraform-linters/tflint?cacheSeconds=3600)](https://github.com/terraform-linters/tflint) ![sarif](https://shields.io/badge/-SARIF-orange) | +| | | [terrascan](https://oxsecurity.github.io/megalinter/beta/descriptors/terraform_terrascan/) | [TERRAFORM_TERRASCAN](https://oxsecurity.github.io/megalinter/beta/descriptors/terraform_terrascan/) | [![GitHub stars](https://img.shields.io/github/stars/accurics/terrascan?cacheSeconds=3600)](https://github.com/accurics/terrascan) ![sarif](https://shields.io/badge/-SARIF-orange) | +| | | [terragrunt](https://oxsecurity.github.io/megalinter/beta/descriptors/terraform_terragrunt/) | [TERRAFORM_TERRAGRUNT](https://oxsecurity.github.io/megalinter/beta/descriptors/terraform_terragrunt/) | [![GitHub stars](https://img.shields.io/github/stars/gruntwork-io/terragrunt?cacheSeconds=3600)](https://github.com/gruntwork-io/terragrunt) ![autofix](https://shields.io/badge/-autofix-green) | +| | | [terraform-fmt](https://oxsecurity.github.io/megalinter/beta/descriptors/terraform_terraform_fmt/) | [TERRAFORM_TERRAFORM_FMT](https://oxsecurity.github.io/megalinter/beta/descriptors/terraform_terraform_fmt/) | [![GitHub stars](https://img.shields.io/github/stars/hashicorp/terraform?cacheSeconds=3600)](https://github.com/hashicorp/terraform) ![formatter](https://shields.io/badge/-format-yellow) | +| | | [kics](https://oxsecurity.github.io/megalinter/beta/descriptors/terraform_kics/) | [TERRAFORM_KICS](https://oxsecurity.github.io/megalinter/beta/descriptors/terraform_kics/) | [![GitHub stars](https://img.shields.io/github/stars/checkmarx/kics?cacheSeconds=3600)](https://github.com/checkmarx/kics) | + +### Other + +| | Code quality checker | Linter | Configuration key | Additional | +|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------:|----------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| | [**COPYPASTE**](https://oxsecurity.github.io/megalinter/beta/descriptors/copypaste/) | [jscpd](https://oxsecurity.github.io/megalinter/beta/descriptors/copypaste_jscpd/) | [COPYPASTE_JSCPD](https://oxsecurity.github.io/megalinter/beta/descriptors/copypaste_jscpd/) | [![GitHub stars](https://img.shields.io/github/stars/kucherenko/jscpd?cacheSeconds=3600)](https://github.com/kucherenko/jscpd) | +| | [**REPOSITORY**](https://oxsecurity.github.io/megalinter/beta/descriptors/repository/) | [checkov](https://oxsecurity.github.io/megalinter/beta/descriptors/repository_checkov/) | [REPOSITORY_CHECKOV](https://oxsecurity.github.io/megalinter/beta/descriptors/repository_checkov/) | [![GitHub stars](https://img.shields.io/github/stars/bridgecrewio/checkov?cacheSeconds=3600)](https://github.com/bridgecrewio/checkov) ![sarif](https://shields.io/badge/-SARIF-orange) | +| | | [git_diff](https://oxsecurity.github.io/megalinter/beta/descriptors/repository_git_diff/) | [REPOSITORY_GIT_DIFF](https://oxsecurity.github.io/megalinter/beta/descriptors/repository_git_diff/) | [![GitHub stars](https://img.shields.io/github/stars/git/git?cacheSeconds=3600)](https://github.com/git/git) | +| | | [gitleaks](https://oxsecurity.github.io/megalinter/beta/descriptors/repository_gitleaks/) | [REPOSITORY_GITLEAKS](https://oxsecurity.github.io/megalinter/beta/descriptors/repository_gitleaks/) | [![GitHub stars](https://img.shields.io/github/stars/zricethezav/gitleaks?cacheSeconds=3600)](https://github.com/zricethezav/gitleaks) ![sarif](https://shields.io/badge/-SARIF-orange) | +| | | [goodcheck](https://oxsecurity.github.io/megalinter/beta/descriptors/repository_goodcheck/) | [REPOSITORY_GOODCHECK](https://oxsecurity.github.io/megalinter/beta/descriptors/repository_goodcheck/) | [![GitHub stars](https://img.shields.io/github/stars/sider/goodcheck?cacheSeconds=3600)](https://github.com/sider/goodcheck) | +| | | [secretlint](https://oxsecurity.github.io/megalinter/beta/descriptors/repository_secretlint/) | [REPOSITORY_SECRETLINT](https://oxsecurity.github.io/megalinter/beta/descriptors/repository_secretlint/) | [![GitHub stars](https://img.shields.io/github/stars/secretlint/secretlint?cacheSeconds=3600)](https://github.com/secretlint/secretlint) ![sarif](https://shields.io/badge/-SARIF-orange) | +| | | [semgrep](https://oxsecurity.github.io/megalinter/beta/descriptors/repository_semgrep/) | [REPOSITORY_SEMGREP](https://oxsecurity.github.io/megalinter/beta/descriptors/repository_semgrep/) | [![GitHub stars](https://img.shields.io/github/stars/returntocorp/semgrep?cacheSeconds=3600)](https://github.com/returntocorp/semgrep) ![sarif](https://shields.io/badge/-SARIF-orange) | +| | | [trivy](https://oxsecurity.github.io/megalinter/beta/descriptors/repository_trivy/) | [REPOSITORY_TRIVY](https://oxsecurity.github.io/megalinter/beta/descriptors/repository_trivy/) | [![GitHub stars](https://img.shields.io/github/stars/aquasecurity/trivy?cacheSeconds=3600)](https://github.com/aquasecurity/trivy) ![sarif](https://shields.io/badge/-SARIF-orange) | +| | [**SPELL**](https://oxsecurity.github.io/megalinter/beta/descriptors/spell/) | [misspell](https://oxsecurity.github.io/megalinter/beta/descriptors/spell_misspell/) | [SPELL_MISSPELL](https://oxsecurity.github.io/megalinter/beta/descriptors/spell_misspell/) | [![GitHub stars](https://img.shields.io/github/stars/client9/misspell?cacheSeconds=3600)](https://github.com/client9/misspell) ![autofix](https://shields.io/badge/-autofix-green) | +| | | [cspell](https://oxsecurity.github.io/megalinter/beta/descriptors/spell_cspell/) | [SPELL_CSPELL](https://oxsecurity.github.io/megalinter/beta/descriptors/spell_cspell/) | [![GitHub stars](https://img.shields.io/github/stars/streetsidesoftware/cspell?cacheSeconds=3600)](https://github.com/streetsidesoftware/cspell) | +| | | [proselint](https://oxsecurity.github.io/megalinter/beta/descriptors/spell_proselint/) | [SPELL_PROSELINT](https://oxsecurity.github.io/megalinter/beta/descriptors/spell_proselint/) | [![GitHub stars](https://img.shields.io/github/stars/amperser/proselint?cacheSeconds=3600)](https://github.com/amperser/proselint) | + diff --git a/flavors/cupcake/Dockerfile b/flavors/cupcake/Dockerfile new file mode 100644 index 00000000000..c8ef3ac296a --- /dev/null +++ b/flavors/cupcake/Dockerfile @@ -0,0 +1,481 @@ +# MEGA-LINTER FLAVOR [cupcake]: MegaLinter for the most commonly used languages +########################################### +########################################### +## Dockerfile to run MegaLinter ## +########################################### +########################################### + +# @not-generated + +############################################################################################# +## @generated by .automation/build.py using descriptor files, please do not update manually ## +############################################################################################# +#FROM__START +FROM mvdan/shfmt:latest-alpine as shfmt +FROM cljkondo/clj-kondo:2022.10.05-alpine as clj-kondo +FROM hadolint/hadolint:v2.10.0-alpine as hadolint +FROM mstruebing/editorconfig-checker:2.4.0 as editorconfig-checker +FROM zricethezav/gitleaks:v8.14.1 as gitleaks +FROM ghcr.io/terraform-linters/tflint:v0.41.0 as tflint +FROM tenable/terrascan:latest as terrascan +FROM alpine/terragrunt:latest as terragrunt +FROM checkmarx/kics:alpine as kics +#FROM__END + +################## +# Get base image # +################## +# 3.10.5 is not usable until https://github.com/jruere/multiprocessing-logging/issues/56 is fixed +FROM python:3.10.4-alpine3.15 + +############################################################################################# +## @generated by .automation/build.py using descriptor files, please do not update manually ## +############################################################################################# +#ARG__START +ARG PMD_VERSION=6.48.0 +#ARG__END + +#################### +# Run APK installs # +#################### + +WORKDIR / + +############################################################################################# +## @generated by .automation/build.py using descriptor files, please do not update manually ## +############################################################################################# +#APK__START +RUN apk add --update --no-cache \ + bash \ + ca-certificates \ + curl \ + gcc \ + git \ + git-lfs \ + libffi-dev \ + make \ + musl-dev \ + openssh \ + docker \ + openrc \ + go \ + openjdk11 \ + gnupg \ + php7 \ + php7-phar \ + php7-json \ + php7-mbstring \ + php7-xmlwriter \ + php7-tokenizer \ + php7-ctype \ + php7-curl \ + php7-dom \ + php7-simplexml \ + php8 \ + php8-phar \ + php8-mbstring \ + php8-xmlwriter \ + php8-tokenizer \ + php8-ctype \ + php8-curl \ + php8-dom \ + php8-simplexml \ + composer \ + dpkg \ + nodejs \ + npm \ + yarn \ + libc-dev \ + libxml2-dev \ + libxml2-utils \ + libgcc \ + nodejs-current \ + ruby \ + ruby-dev \ + ruby-bundler \ + ruby-rdoc \ + && git config --global core.autocrlf true +#APK__END + +# PATH for golang & python +ENV GOROOT=/usr/lib/go \ + GOPATH=/go + # PYTHONPYCACHEPREFIX="$HOME/.cache/cpython/" NV: not working for all packages :/ +# hadolint ignore=DL3044 +ENV PATH="$PATH":"$GOROOT"/bin:"$GOPATH"/bin +RUN mkdir -p ${GOPATH}/src ${GOPATH}/bin || true && \ + # Ignore npm package issues + yarn config set ignore-engines true || true + +############################################################################################# +## @generated by .automation/build.py using descriptor files, please do not update manually ## +############################################################################################# +#PIP__START + +#PIP__END + +#PIPVENV__START +RUN PYTHONDONTWRITEBYTECODE=1 pip3 install --no-cache-dir --upgrade pip virtualenv \ + && mkdir -p "/venvs/ansible-lint" && cd "/venvs/ansible-lint" && virtualenv . && source bin/activate && PYTHONDONTWRITEBYTECODE=1 pip3 install --no-cache-dir ansible-lint==6.7.0 && deactivate && cd ./../.. \ + && mkdir -p "/venvs/cpplint" && cd "/venvs/cpplint" && virtualenv . && source bin/activate && PYTHONDONTWRITEBYTECODE=1 pip3 install --no-cache-dir cpplint && deactivate && cd ./../.. \ + && mkdir -p "/venvs/cfn-lint" && cd "/venvs/cfn-lint" && virtualenv . && source bin/activate && PYTHONDONTWRITEBYTECODE=1 pip3 install --no-cache-dir cfn-lint && deactivate && cd ./../.. \ + && mkdir -p "/venvs/djlint" && cd "/venvs/djlint" && virtualenv . && source bin/activate && PYTHONDONTWRITEBYTECODE=1 pip3 install --no-cache-dir djlint && deactivate && cd ./../.. \ + && mkdir -p "/venvs/pylint" && cd "/venvs/pylint" && virtualenv . && source bin/activate && PYTHONDONTWRITEBYTECODE=1 pip3 install --no-cache-dir pylint && deactivate && cd ./../.. \ + && mkdir -p "/venvs/black" && cd "/venvs/black" && virtualenv . && source bin/activate && PYTHONDONTWRITEBYTECODE=1 pip3 install --no-cache-dir black && deactivate && cd ./../.. \ + && mkdir -p "/venvs/flake8" && cd "/venvs/flake8" && virtualenv . && source bin/activate && PYTHONDONTWRITEBYTECODE=1 pip3 install --no-cache-dir flake8 && deactivate && cd ./../.. \ + && mkdir -p "/venvs/isort" && cd "/venvs/isort" && virtualenv . && source bin/activate && PYTHONDONTWRITEBYTECODE=1 pip3 install --no-cache-dir isort black && deactivate && cd ./../.. \ + && mkdir -p "/venvs/mypy" && cd "/venvs/mypy" && virtualenv . && source bin/activate && PYTHONDONTWRITEBYTECODE=1 pip3 install --no-cache-dir mypy && deactivate && cd ./../.. \ + && mkdir -p "/venvs/pyright" && cd "/venvs/pyright" && virtualenv . && source bin/activate && PYTHONDONTWRITEBYTECODE=1 pip3 install --no-cache-dir pyright==1.1.270 && deactivate && cd ./../.. \ + && mkdir -p "/venvs/semgrep" && cd "/venvs/semgrep" && virtualenv . && source bin/activate && PYTHONDONTWRITEBYTECODE=1 pip3 install --no-cache-dir semgrep && deactivate && cd ./../.. \ + && mkdir -p "/venvs/rst-lint" && cd "/venvs/rst-lint" && virtualenv . && source bin/activate && PYTHONDONTWRITEBYTECODE=1 pip3 install --no-cache-dir restructuredtext_lint && deactivate && cd ./../.. \ + && mkdir -p "/venvs/rstcheck" && cd "/venvs/rstcheck" && virtualenv . && source bin/activate && PYTHONDONTWRITEBYTECODE=1 pip3 install --no-cache-dir rstcheck && deactivate && cd ./../.. \ + && mkdir -p "/venvs/proselint" && cd "/venvs/proselint" && virtualenv . && source bin/activate && PYTHONDONTWRITEBYTECODE=1 pip3 install --no-cache-dir proselint && deactivate && cd ./../.. \ + && mkdir -p "/venvs/sqlfluff" && cd "/venvs/sqlfluff" && virtualenv . && source bin/activate && PYTHONDONTWRITEBYTECODE=1 pip3 install --no-cache-dir sqlfluff && deactivate && cd ./../.. \ + && mkdir -p "/venvs/yamllint" && cd "/venvs/yamllint" && virtualenv . && source bin/activate && PYTHONDONTWRITEBYTECODE=1 pip3 install --no-cache-dir yamllint && deactivate && cd ./../.. \ + && find . | grep -E "(/__pycache__$|\.pyc$|\.pyo$)" | xargs rm -rf && rm -rf /root/.cache +ENV PATH="${PATH}":/venvs/ansible-lint/bin:/venvs/cpplint/bin:/venvs/cfn-lint/bin:/venvs/djlint/bin:/venvs/pylint/bin:/venvs/black/bin:/venvs/flake8/bin:/venvs/isort/bin:/venvs/mypy/bin:/venvs/pyright/bin:/venvs/semgrep/bin:/venvs/rst-lint/bin:/venvs/rstcheck/bin:/venvs/proselint/bin:/venvs/sqlfluff/bin:/venvs/yamllint/bin +#PIPVENV__END + +############################ +# Install NPM dependencies # +############################################################################################# +## @generated by .automation/build.py using descriptor files, please do not update manually ## +############################################################################################# + +ENV NODE_OPTIONS="--max-old-space-size=8192" \ + NODE_ENV=production +#NPM__START +WORKDIR /node-deps +RUN npm --no-cache install --ignore-scripts \ + typescript \ + jscpd@3.3.26 \ + stylelint \ + stylelint-config-standard \ + stylelint-config-sass-guidelines \ + stylelint-scss \ + graphql \ + graphql-schema-linter \ + npm-groovy-lint \ + htmlhint \ + eslint \ + eslint-config-airbnb \ + eslint-config-prettier \ + eslint-config-standard \ + eslint-plugin-import \ + eslint-plugin-jest \ + eslint-plugin-node \ + eslint-plugin-prettier \ + eslint-plugin-promise \ + eslint-plugin-vue \ + babel-eslint \ + @babel/core \ + @babel/eslint-parser \ + @microsoft/eslint-formatter-sarif \ + standard \ + prettier \ + @prantlf/jsonlint \ + eslint-plugin-jsonc \ + v8r \ + eslint-plugin-react \ + eslint-plugin-jsx-a11y \ + markdownlint-cli \ + markdown-link-check \ + markdown-table-formatter \ + secretlint \ + @secretlint/secretlint-rule-preset-recommend \ + @secretlint/secretlint-formatter-sarif \ + cspell \ + sql-lint \ + prettyjson \ + @typescript-eslint/eslint-plugin \ + @typescript-eslint/parser && \ + npm audit fix --audit-level=critical || true \ + && npm cache clean --force || true \ + && rm -rf /root/.npm/_cacache \ + && find . -name "*.d.ts" -delete \ + && find . -name "*.map" -delete \ + && find . -name "*.npmignore" -delete \ + && find . -name "*.travis.yml" -delete \ + && find . -name "CHANGELOG.md" -delete \ + && find . -name "README.md" -delete \ + && find . -name ".package-lock.json" -delete \ + && find . -name "package-lock.json" -delete \ + && find . -name "README.md" -delete +WORKDIR / + +#NPM__END + +# Add node packages to path # +ENV PATH="/node-deps/node_modules/.bin:${PATH}" \ + NODE_PATH="/node-deps/node_modules" + +############################## +# Installs ruby dependencies # +############################################################################################# +## @generated by .automation/build.py using descriptor files, please do not update manually ## +############################################################################################# + +#GEM__START +RUN echo 'gem: --no-document' >> ~/.gemrc && \ + gem install \ + scss_lint \ + goodcheck \ + rubocop \ + rubocop-github \ + rubocop-performance \ + rubocop-rails \ + rubocop-rspec +#GEM__END + +############################## +# Installs rust dependencies # +############################################################################################# +## @generated by .automation/build.py using descriptor files, please do not update manually ## +############################################################################################# + +#CARGO__START +RUN curl https://sh.rustup.rs -sSf | sh -s -- -y --profile minimal --default-toolchain stable \ + && export PATH="/root/.cargo/bin:${PATH}" \ + && rustup component add clippy && cargo install sarif-fmt shellcheck-sarif \ + && rm -rf /root/.cargo/registry /root/.cargo/git /root/.cache/sccache +ENV PATH="/root/.cargo/bin:${PATH}" +#CARGO__END + +############################## +# COPY instructions # +############################################################################################# +## @generated by .automation/build.py using descriptor files, please do not update manually ## +############################################################################################# + +#COPY__START +COPY --from=shfmt /bin/shfmt /usr/bin/ +COPY --from=clj-kondo /bin/clj-kondo /usr/bin/ +COPY --from=hadolint /bin/hadolint /usr/bin/hadolint +COPY --from=editorconfig-checker /usr/bin/ec /usr/bin/editorconfig-checker +COPY --from=gitleaks /usr/bin/gitleaks /usr/bin/ +COPY --from=tflint /usr/local/bin/tflint /usr/bin/ +COPY --from=terrascan /go/bin/terrascan /usr/bin/ +COPY --from=terragrunt /usr/local/bin/terragrunt /usr/bin/ +COPY --from=terragrunt /bin/terraform /usr/bin/ +COPY --from=kics /app/bin/kics /usr/bin/ +COPY --from=kics /app/bin/assets /opt/kics/assets/ +#COPY__END + +############################################################################################# +## @generated by .automation/build.py using descriptor files, please do not update manually ## +############################################################################################# +#OTHER__START +RUN rc-update add docker boot && rc-service docker start || true +# JAVA installation +ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk +ENV PATH="$JAVA_HOME/bin:${PATH}" + +# PHP installation +RUN wget --tries=5 -q -O phive.phar https://phar.io/releases/phive.phar \ + && wget --tries=5 -q -O phive.phar.asc https://phar.io/releases/phive.phar.asc \ + && PHAR_KEY_ID="0x9D8A98B29B2D5D79" \ + && ( gpg --keyserver keyserver.pgp.com --recv-keys "$PHAR_KEY_ID" \ + || gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$PHAR_KEY_ID" \ + || gpg --keyserver pgp.mit.edu --recv-keys "$PHAR_KEY_ID" \ + || gpg --keyserver hkps://keyserver.ubuntu.com --recv-keys "$PHAR_KEY_ID" ) \ + && gpg --verify phive.phar.asc phive.phar \ + && chmod +x phive.phar \ + && mv phive.phar /usr/local/bin/phive \ + && rm phive.phar.asc \ + && update-alternatives --install /usr/bin/php php /usr/bin/php7 100 \ + && update-alternatives --install /usr/bin/php php /usr/bin/php8 10 + + +# actionlint installation +ENV GO111MODULE=on +RUN go install github.com/rhysd/actionlint/cmd/actionlint@latest && go clean --cache \ + +# bash-exec installation + && printf '#!/bin/bash \n\nif [[ -x "$1" ]]; then exit 0; else echo "Error: File:[$1] is not executable"; exit 1; fi' > /usr/bin/bash-exec \ + && chmod +x /usr/bin/bash-exec \ + +# shellcheck installation + && ML_THIRD_PARTY_DIR="/third-party/shellcheck" \ + && mkdir -p ${ML_THIRD_PARTY_DIR} \ + && wget -qO- "https://github.com/koalaman/shellcheck/releases/download/stable/shellcheck-stable.linux.x86_64.tar.xz" | tar -xJv --directory ${ML_THIRD_PARTY_DIR} \ + && mv "${ML_THIRD_PARTY_DIR}/shellcheck-stable/shellcheck" /usr/bin/ \ + && find ${ML_THIRD_PARTY_DIR} -type f -not -name 'LICENSE*' -delete -o -type d -empty -delete \ + +# shfmt installation +# Managed with COPY --from=shfmt /bin/shfmt /usr/bin/ + +# clj-kondo installation +# Managed with COPY --from=clj-kondo /bin/clj-kondo /usr/bin/ + +# hadolint installation +# Managed with COPY --from=hadolint /bin/hadolint /usr/bin/hadolint + +# editorconfig-checker installation +# Managed with COPY --from=editorconfig-checker /usr/bin/ec /usr/bin/editorconfig-checker + +# dotenv-linter installation + && wget -q -O - https://raw.githubusercontent.com/dotenv-linter/dotenv-linter/master/install.sh | sh -s \ + +# golangci-lint installation + && wget -O- -nv https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh \ + && golangci-lint --version \ + +# revive installation + && go install github.com/mgechev/revive@latest && go clean --cache \ + +# checkstyle installation + && CHECKSTYLE_LATEST=$(curl -s https://api.github.com/repos/checkstyle/checkstyle/releases/latest \ + | grep browser_download_url \ + | grep ".jar" \ + | cut -d '"' -f 4) \ + && curl --retry 5 --retry-delay 5 -sSL $CHECKSTYLE_LATEST \ + --output /usr/bin/checkstyle \ + +# pmd installation + && wget --quiet https://github.com/pmd/pmd/releases/download/pmd_releases%2F${PMD_VERSION}/pmd-bin-${PMD_VERSION}.zip && \ + unzip pmd-bin-${PMD_VERSION}.zip && \ + rm pmd-bin-${PMD_VERSION}.zip && \ + mv pmd-bin-${PMD_VERSION} /usr/bin/pmd && \ + chmod +x /usr/bin/pmd/bin/run.sh \ + +# ktlint installation + && curl --retry 5 --retry-delay 5 -sSLO https://github.com/pinterest/ktlint/releases/latest/download/ktlint && \ + chmod a+x ktlint && \ + mv "ktlint" /usr/bin/ \ + +# kubeval installation + && ML_THIRD_PARTY_DIR="/third-party/kubeval" \ + && mkdir -p ${ML_THIRD_PARTY_DIR} \ + && wget -P ${ML_THIRD_PARTY_DIR} -q https://github.com/instrumenta/kubeval/releases/latest/download/kubeval-linux-amd64.tar.gz \ + && tar xf ${ML_THIRD_PARTY_DIR}/kubeval-linux-amd64.tar.gz --directory ${ML_THIRD_PARTY_DIR} \ + && mv ${ML_THIRD_PARTY_DIR}/kubeval /usr/local/bin \ + && rm ${ML_THIRD_PARTY_DIR}/kubeval-linux-amd64.tar.gz \ + && find ${ML_THIRD_PARTY_DIR} -type f -not -name 'LICENSE*' -delete -o -type d -empty -delete \ + +# kubeconform installation + && ML_THIRD_PARTY_DIR="/third-party/kubeconform" \ + && KUBECONFORM_VERSION=v0.4.12 \ + && mkdir -p ${ML_THIRD_PARTY_DIR} \ + && wget -P ${ML_THIRD_PARTY_DIR} -q https://github.com/yannh/kubeconform/releases/download/$KUBECONFORM_VERSION/kubeconform-linux-amd64.tar.gz \ + && tar xf ${ML_THIRD_PARTY_DIR}/kubeconform-linux-amd64.tar.gz --directory ${ML_THIRD_PARTY_DIR} \ + && mv ${ML_THIRD_PARTY_DIR}/kubeconform /usr/local/bin \ + && rm ${ML_THIRD_PARTY_DIR}/kubeconform-linux-amd64.tar.gz \ + && find ${ML_THIRD_PARTY_DIR} -type f -not -name 'LICENSE*' -delete -o -type d -empty -delete \ + +# checkmake installation + && ( [ -d /usr/local/bin ] || mkdir -p /usr/local/bin ) \ + && wget -q "https://github.com/mrtazz/checkmake/releases/download/0.2.1/checkmake-0.2.1.linux.amd64" -O /usr/local/bin/checkmake \ + && chmod 755 /usr/local/bin/checkmake \ + +# phpcs installation + && phive --no-progress install phpcs -g --trust-gpg-keys 31C7E470E2138192 \ + +# phpstan installation + && phive --no-progress install phpstan -g --trust-gpg-keys CF1A108D0E7AE720 \ + +# psalm installation + && phive --no-progress install psalm -g --trust-gpg-keys 8A03EA3B385DBAA1,12CE0F1D262429A5 \ + +# phplint installation + && composer global require --ignore-platform-reqs overtrue/phplint ^3.0 \ + && composer global config bin-dir --absolute \ + && wget --tries=5 -q -O phplint.phar https://github.com/overtrue/phplint/releases/download/3.1.1/phplint.phar \ + && chmod +x phplint.phar \ + && mv phplint.phar /usr/local/bin/phplint \ + +# checkov installation + && PYTHONDONTWRITEBYTECODE=1 pip3 install --upgrade --no-cache-dir pip && PYTHONDONTWRITEBYTECODE=1 pip3 install --upgrade --no-cache-dir setuptools \ + && PYTHONDONTWRITEBYTECODE=1 pip3 install --no-cache-dir checkov && find . | grep -E "(/__pycache__$|\.pyc$|\.pyo$)" | xargs rm -rf \ + +# gitleaks installation +# Managed with COPY --from=gitleaks /usr/bin/gitleaks /usr/bin/ + +# trivy installation + && wget --tries=5 -q -O - https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin v0.29.2 && \ + wget --tries=5 -q -O /usr/local/bin/sarif.tpl https://raw.githubusercontent.com/aquasecurity/trivy/714b5ca2460363e082d42a8d933c7a0cb7eff7a8/contrib/sarif.tpl && \ + chmod 644 /usr/local/bin/sarif.tpl \ + +# misspell installation + && ML_THIRD_PARTY_DIR="/third-party/misspell" \ + && mkdir -p ${ML_THIRD_PARTY_DIR} \ + && curl -L -o ${ML_THIRD_PARTY_DIR}/install-misspell.sh https://git.io/misspell \ + && sh .${ML_THIRD_PARTY_DIR}/install-misspell.sh \ + && find ${ML_THIRD_PARTY_DIR} -type f -not -name 'LICENSE*' -delete -o -type d -empty -delete \ + && find /tmp -path '/tmp/tmp.*' -type f -name 'misspell*' -delete -o -type d -empty -delete \ + +# tflint installation +# Managed with COPY --from=tflint /usr/local/bin/tflint /usr/bin/ + +# terrascan installation +# Managed with COPY --from=terrascan /go/bin/terrascan /usr/bin/ + +# terragrunt installation +# Managed with COPY --from=terragrunt /usr/local/bin/terragrunt /usr/bin/ + +# terraform-fmt installation +# Managed with COPY --from=terragrunt /bin/terraform /usr/bin/ + +# kics installation +# Managed with COPY --from=kics /app/bin/kics /usr/bin/ + && mkdir -p /opt/kics/assets +ENV KICS_QUERIES_PATH=/opt/kics/assets/queries KICS_LIBRARIES_PATH=/opt/kics/assets/libraries +# Managed with COPY --from=kics /app/bin/assets /opt/kics/assets/ + +#OTHER__END + +################################ +# Installs python dependencies # +################################ +COPY megalinter /megalinter +RUN PYTHONDONTWRITEBYTECODE=1 python /megalinter/setup.py install \ + && PYTHONDONTWRITEBYTECODE=1 python /megalinter/setup.py clean --all \ + && rm -rf /var/cache/apk/* \ + && find . | grep -E "(/__pycache__$|\.pyc$|\.pyo$)" | xargs rm -rf + +####################################### +# Copy scripts and rules to container # +####################################### +COPY megalinter/descriptors /megalinter-descriptors +COPY TEMPLATES /action/lib/.automation + +########################### +# Get the build arguments # +########################### +ARG BUILD_DATE +ARG BUILD_REVISION +ARG BUILD_VERSION + +################################################# +# Set ENV values used for debugging the version # +################################################# +ENV BUILD_DATE=$BUILD_DATE \ + BUILD_REVISION=$BUILD_REVISION \ + BUILD_VERSION=$BUILD_VERSION + +#FLAVOR__START +ENV MEGALINTER_FLAVOR=cupcake +#FLAVOR__END + +######################################### +# Label the instance and set maintainer # +######################################### +LABEL com.github.actions.name="MegaLinter" \ + com.github.actions.description="The ultimate linters aggregator to make sure your projects are clean" \ + com.github.actions.icon="code" \ + com.github.actions.color="red" \ + maintainer="Nicolas Vuillamy " \ + org.opencontainers.image.created=$BUILD_DATE \ + org.opencontainers.image.revision=$BUILD_REVISION \ + org.opencontainers.image.version=$BUILD_VERSION \ + org.opencontainers.image.authors="Nicolas Vuillamy " \ + org.opencontainers.image.url="https://oxsecurity.github.io/megalinter" \ + org.opencontainers.image.source="https://github.com/oxsecurity/megalinter" \ + org.opencontainers.image.documentation="https://oxsecurity.github.io/megalinter" \ + org.opencontainers.image.vendor="Nicolas Vuillamy" \ + org.opencontainers.image.description="Lint your code base with GitHub Actions" + +#EXTRA_DOCKERFILE_LINES__START +COPY entrypoint.sh /entrypoint.sh +RUN chmod +x entrypoint.sh +ENTRYPOINT ["/bin/bash", "/entrypoint.sh"] +#EXTRA_DOCKERFILE_LINES__END diff --git a/flavors/cupcake/action.yml b/flavors/cupcake/action.yml new file mode 100644 index 00000000000..961b82dce95 --- /dev/null +++ b/flavors/cupcake/action.yml @@ -0,0 +1,16 @@ + # Automatically @generated by build.py +name: "MegaLinter" +author: "Nicolas Vuillamy" +description: "[cupcake flavor] Combine all available linters to automatically validate your sources without configuration !" +outputs: + has_updated_sources: + description: "0 if no source file has been updated, 1 if source files has been updated" +runs: + using: "docker" + image: "docker://oxsecurity/megalinter-cupcake:v6" + args: + - "-v" + - "/var/run/docker.sock:/var/run/docker.sock:rw" +branding: + icon: "check" + color: "green" diff --git a/flavors/cupcake/flavor.json b/flavors/cupcake/flavor.json new file mode 100644 index 00000000000..dd41df32c05 --- /dev/null +++ b/flavors/cupcake/flavor.json @@ -0,0 +1,92 @@ +{ + "descriptors": [ + "ACTION", + "BASH", + "GO", + "JAVA", + "KOTLIN", + "PHP", + "TYPESCRIPT" + ], + "label": "MegaLinter for the most commonly used languages", + "linters": [ + "ACTION_ACTIONLINT", + "ANSIBLE_ANSIBLE_LINT", + "BASH_EXEC", + "BASH_SHELLCHECK", + "BASH_SHFMT", + "C_CPPLINT", + "CLOJURE_CLJ_KONDO", + "CLOUDFORMATION_CFN_LINT", + "COPYPASTE_JSCPD", + "CPP_CPPLINT", + "CSS_STYLELINT", + "CSS_SCSS_LINT", + "DOCKERFILE_HADOLINT", + "EDITORCONFIG_EDITORCONFIG_CHECKER", + "ENV_DOTENV_LINTER", + "GO_GOLANGCI_LINT", + "GO_REVIVE", + "GRAPHQL_GRAPHQL_SCHEMA_LINTER", + "GROOVY_NPM_GROOVY_LINT", + "HTML_DJLINT", + "HTML_HTMLHINT", + "JAVA_CHECKSTYLE", + "JAVA_PMD", + "JAVASCRIPT_ES", + "JAVASCRIPT_STANDARD", + "JAVASCRIPT_PRETTIER", + "JSON_JSONLINT", + "JSON_ESLINT_PLUGIN_JSONC", + "JSON_V8R", + "JSON_PRETTIER", + "JSX_ESLINT", + "KOTLIN_KTLINT", + "KUBERNETES_KUBEVAL", + "KUBERNETES_KUBECONFORM", + "MAKEFILE_CHECKMAKE", + "MARKDOWN_MARKDOWNLINT", + "MARKDOWN_MARKDOWN_LINK_CHECK", + "MARKDOWN_MARKDOWN_TABLE_FORMATTER", + "PHP_PHPCS", + "PHP_PHPSTAN", + "PHP_PSALM", + "PHP_PHPLINT", + "PYTHON_PYLINT", + "PYTHON_BLACK", + "PYTHON_FLAKE8", + "PYTHON_ISORT", + "PYTHON_MYPY", + "PYTHON_PYRIGHT", + "REPOSITORY_CHECKOV", + "REPOSITORY_GIT_DIFF", + "REPOSITORY_GITLEAKS", + "REPOSITORY_GOODCHECK", + "REPOSITORY_SECRETLINT", + "REPOSITORY_SEMGREP", + "REPOSITORY_TRIVY", + "RST_RST_LINT", + "RST_RSTCHECK", + "RUBY_RUBOCOP", + "RUST_CLIPPY", + "SPELL_MISSPELL", + "SPELL_CSPELL", + "SPELL_PROSELINT", + "SQL_SQL_LINT", + "SQL_SQLFLUFF", + "SWIFT_SWIFTLINT", + "TERRAFORM_TFLINT", + "TERRAFORM_TERRASCAN", + "TERRAFORM_TERRAGRUNT", + "TERRAFORM_TERRAFORM_FMT", + "TERRAFORM_KICS", + "TSX_ESLINT", + "TYPESCRIPT_ES", + "TYPESCRIPT_STANDARD", + "TYPESCRIPT_PRETTIER", + "XML_XMLLINT", + "YAML_PRETTIER", + "YAML_YAMLLINT", + "YAML_V8R" + ] +} diff --git a/megalinter/descriptors/action.megalinter-descriptor.yml b/megalinter/descriptors/action.megalinter-descriptor.yml index d409f57ab03..32ae1c4e060 100644 --- a/megalinter/descriptors/action.megalinter-descriptor.yml +++ b/megalinter/descriptors/action.megalinter-descriptor.yml @@ -2,6 +2,7 @@ descriptor_id: ACTION descriptor_type: tooling_format descriptor_flavors: - all_flavors # Applicable to CI in any language project + - cupcake files_sub_directory: .github/workflows file_extensions: - ".yml" diff --git a/megalinter/descriptors/all_flavors.json b/megalinter/descriptors/all_flavors.json index 9f4f2f1c50d..0e62b4786d6 100644 --- a/megalinter/descriptors/all_flavors.json +++ b/megalinter/descriptors/all_flavors.json @@ -27,6 +27,98 @@ "YAML_V8R" ] }, + "cupcake": { + "descriptors": [ + "ACTION", + "BASH", + "GO", + "JAVA", + "KOTLIN", + "PHP", + "TYPESCRIPT" + ], + "label": "MegaLinter for the most commonly used languages", + "linters": [ + "ACTION_ACTIONLINT", + "ANSIBLE_ANSIBLE_LINT", + "BASH_EXEC", + "BASH_SHELLCHECK", + "BASH_SHFMT", + "C_CPPLINT", + "CLOJURE_CLJ_KONDO", + "CLOUDFORMATION_CFN_LINT", + "COPYPASTE_JSCPD", + "CPP_CPPLINT", + "CSS_STYLELINT", + "CSS_SCSS_LINT", + "DOCKERFILE_HADOLINT", + "EDITORCONFIG_EDITORCONFIG_CHECKER", + "ENV_DOTENV_LINTER", + "GO_GOLANGCI_LINT", + "GO_REVIVE", + "GRAPHQL_GRAPHQL_SCHEMA_LINTER", + "GROOVY_NPM_GROOVY_LINT", + "HTML_DJLINT", + "HTML_HTMLHINT", + "JAVA_CHECKSTYLE", + "JAVA_PMD", + "JAVASCRIPT_ES", + "JAVASCRIPT_STANDARD", + "JAVASCRIPT_PRETTIER", + "JSON_JSONLINT", + "JSON_ESLINT_PLUGIN_JSONC", + "JSON_V8R", + "JSON_PRETTIER", + "JSX_ESLINT", + "KOTLIN_KTLINT", + "KUBERNETES_KUBEVAL", + "KUBERNETES_KUBECONFORM", + "MAKEFILE_CHECKMAKE", + "MARKDOWN_MARKDOWNLINT", + "MARKDOWN_MARKDOWN_LINK_CHECK", + "MARKDOWN_MARKDOWN_TABLE_FORMATTER", + "PHP_PHPCS", + "PHP_PHPSTAN", + "PHP_PSALM", + "PHP_PHPLINT", + "PYTHON_PYLINT", + "PYTHON_BLACK", + "PYTHON_FLAKE8", + "PYTHON_ISORT", + "PYTHON_MYPY", + "PYTHON_PYRIGHT", + "REPOSITORY_CHECKOV", + "REPOSITORY_GIT_DIFF", + "REPOSITORY_GITLEAKS", + "REPOSITORY_GOODCHECK", + "REPOSITORY_SECRETLINT", + "REPOSITORY_SEMGREP", + "REPOSITORY_TRIVY", + "RST_RST_LINT", + "RST_RSTCHECK", + "RUBY_RUBOCOP", + "RUST_CLIPPY", + "SPELL_MISSPELL", + "SPELL_CSPELL", + "SPELL_PROSELINT", + "SQL_SQL_LINT", + "SQL_SQLFLUFF", + "SWIFT_SWIFTLINT", + "TERRAFORM_TFLINT", + "TERRAFORM_TERRASCAN", + "TERRAFORM_TERRAGRUNT", + "TERRAFORM_TERRAFORM_FMT", + "TERRAFORM_KICS", + "TSX_ESLINT", + "TYPESCRIPT_ES", + "TYPESCRIPT_STANDARD", + "TYPESCRIPT_PRETTIER", + "XML_XMLLINT", + "YAML_PRETTIER", + "YAML_YAMLLINT", + "YAML_V8R" + ] + }, "documentation": { "descriptors": [ "ACTION", diff --git a/megalinter/descriptors/ansible.megalinter-descriptor.yml b/megalinter/descriptors/ansible.megalinter-descriptor.yml index ef702acfcae..147728001b4 100644 --- a/megalinter/descriptors/ansible.megalinter-descriptor.yml +++ b/megalinter/descriptors/ansible.megalinter-descriptor.yml @@ -2,6 +2,7 @@ descriptor_id: ANSIBLE descriptor_type: tooling_format descriptor_flavors: - all_flavors # Applicable to CI in any language project + - cupcake - security files_sub_directory: ansible file_names_not_ends_with: diff --git a/megalinter/descriptors/bash.megalinter-descriptor.yml b/megalinter/descriptors/bash.megalinter-descriptor.yml index 8d3fa588126..396b1e9c073 100644 --- a/megalinter/descriptors/bash.megalinter-descriptor.yml +++ b/megalinter/descriptors/bash.megalinter-descriptor.yml @@ -3,6 +3,7 @@ descriptor_type: language descriptor_flavors: - all_flavors # Applicable to CI in any language project - ci_light + - cupcake file_extensions: - ".sh" - ".bash" @@ -25,6 +26,7 @@ linters: name: BASH_EXEC descriptor_flavors: - all_flavors + - cupcake - security cli_executable_help: bash cli_executable_version: bash @@ -47,6 +49,7 @@ linters: can_output_sarif: true descriptor_flavors: - all_flavors + - cupcake - ci_light - security linter_url: https://github.com/koalaman/shellcheck diff --git a/megalinter/descriptors/c.megalinter-descriptor.yml b/megalinter/descriptors/c.megalinter-descriptor.yml index 6bc35588ac0..7cc381edc73 100644 --- a/megalinter/descriptors/c.megalinter-descriptor.yml +++ b/megalinter/descriptors/c.megalinter-descriptor.yml @@ -1,6 +1,7 @@ descriptor_id: C descriptor_type: language descriptor_flavors: + - cupcake - dotnet file_extensions: - ".c" diff --git a/megalinter/descriptors/clojure.megalinter-descriptor.yml b/megalinter/descriptors/clojure.megalinter-descriptor.yml index d5dc9e21f05..eacc368ef06 100644 --- a/megalinter/descriptors/clojure.megalinter-descriptor.yml +++ b/megalinter/descriptors/clojure.megalinter-descriptor.yml @@ -1,6 +1,7 @@ descriptor_id: CLOJURE descriptor_type: language descriptor_flavors: + - cupcake - java file_extensions: - ".clj" diff --git a/megalinter/descriptors/cloudformation.megalinter-descriptor.yml b/megalinter/descriptors/cloudformation.megalinter-descriptor.yml index eb8776a5061..8da13c738bf 100644 --- a/megalinter/descriptors/cloudformation.megalinter-descriptor.yml +++ b/megalinter/descriptors/cloudformation.megalinter-descriptor.yml @@ -1,6 +1,7 @@ descriptor_id: CLOUDFORMATION descriptor_type: tooling_format descriptor_flavors: + - cupcake - security file_extensions: - ".yml" diff --git a/megalinter/descriptors/copypaste.megalinter-descriptor.yml b/megalinter/descriptors/copypaste.megalinter-descriptor.yml index 4dd54df162c..20ccac836df 100644 --- a/megalinter/descriptors/copypaste.megalinter-descriptor.yml +++ b/megalinter/descriptors/copypaste.megalinter-descriptor.yml @@ -3,6 +3,7 @@ descriptor_type: other descriptor_flavors: - all_flavors # Applicable to CI in any language project - ci_light + - cupcake lint_all_files: true linters: # JSCPD diff --git a/megalinter/descriptors/cpp.megalinter-descriptor.yml b/megalinter/descriptors/cpp.megalinter-descriptor.yml index 4911188c356..d829e666721 100644 --- a/megalinter/descriptors/cpp.megalinter-descriptor.yml +++ b/megalinter/descriptors/cpp.megalinter-descriptor.yml @@ -2,6 +2,7 @@ descriptor_id: CPP descriptor_label: "C++" descriptor_type: language descriptor_flavors: + - cupcake - dotnet file_extensions: - ".cpp" diff --git a/megalinter/descriptors/css.megalinter-descriptor.yml b/megalinter/descriptors/css.megalinter-descriptor.yml index d131b95ed7e..e00098c4ea6 100644 --- a/megalinter/descriptors/css.megalinter-descriptor.yml +++ b/megalinter/descriptors/css.megalinter-descriptor.yml @@ -2,6 +2,7 @@ descriptor_id: CSS descriptor_type: format descriptor_flavors: - all_flavors # Any project can contain CSS + - cupcake file_extensions: - ".css" - ".scss" diff --git a/megalinter/descriptors/dockerfile.megalinter-descriptor.yml b/megalinter/descriptors/dockerfile.megalinter-descriptor.yml index 70ba4de693d..8505fea1722 100644 --- a/megalinter/descriptors/dockerfile.megalinter-descriptor.yml +++ b/megalinter/descriptors/dockerfile.megalinter-descriptor.yml @@ -3,6 +3,7 @@ descriptor_type: tooling_format descriptor_flavors: - all_flavors # Applicable to CI in any language project - ci_light + - cupcake file_names_regex: - "Dockerfile" test_folder: docker @@ -14,6 +15,7 @@ linters: descriptor_flavors: - all_flavors # Applicable to CI in any language project - ci_light + - cupcake - security linter_url: https://github.com/hadolint/hadolint linter_repo: https://github.com/hadolint/hadolint diff --git a/megalinter/descriptors/editorconfig.megalinter-descriptor.yml b/megalinter/descriptors/editorconfig.megalinter-descriptor.yml index af779aefeaa..b3cf4d633e3 100644 --- a/megalinter/descriptors/editorconfig.megalinter-descriptor.yml +++ b/megalinter/descriptors/editorconfig.megalinter-descriptor.yml @@ -2,6 +2,7 @@ descriptor_id: EDITORCONFIG descriptor_type: tooling_format descriptor_flavors: - all_flavors # Applicable to CI in any language project + - cupcake file_extensions: - "*" active_only_if_file_found: diff --git a/megalinter/descriptors/env.megalinter-descriptor.yml b/megalinter/descriptors/env.megalinter-descriptor.yml index 4a3bf3d86a6..93530b1e6e4 100644 --- a/megalinter/descriptors/env.megalinter-descriptor.yml +++ b/megalinter/descriptors/env.megalinter-descriptor.yml @@ -3,6 +3,7 @@ descriptor_type: format descriptor_flavors: - all_flavors # Applicable to CI in any language project - ci_light + - cupcake file_extensions: - ".env" linters: diff --git a/megalinter/descriptors/go.megalinter-descriptor.yml b/megalinter/descriptors/go.megalinter-descriptor.yml index 13e7c4590ca..7d8b8fbd2d5 100644 --- a/megalinter/descriptors/go.megalinter-descriptor.yml +++ b/megalinter/descriptors/go.megalinter-descriptor.yml @@ -1,6 +1,7 @@ descriptor_id: GO descriptor_type: language descriptor_flavors: + - cupcake - go file_extensions: - ".go" diff --git a/megalinter/descriptors/graphql.megalinter-descriptor.yml b/megalinter/descriptors/graphql.megalinter-descriptor.yml index b4a772ea1a5..6f91afcc674 100644 --- a/megalinter/descriptors/graphql.megalinter-descriptor.yml +++ b/megalinter/descriptors/graphql.megalinter-descriptor.yml @@ -2,6 +2,7 @@ descriptor_id: GRAPHQL descriptor_type: format descriptor_flavors: - all_flavors # Can be found in any language project + - cupcake file_extensions: - ".graphql" linters: diff --git a/megalinter/descriptors/groovy.megalinter-descriptor.yml b/megalinter/descriptors/groovy.megalinter-descriptor.yml index 2a591e56e9c..5457d5c61d3 100644 --- a/megalinter/descriptors/groovy.megalinter-descriptor.yml +++ b/megalinter/descriptors/groovy.megalinter-descriptor.yml @@ -3,6 +3,7 @@ descriptor_type: language descriptor_flavors: - all_flavors # Jenkinsfile are written in groovy so can be found in any language project - ci_light # Jenkinsfile are written in groovy so can be found in any language project + - cupcake file_extensions: - ".groovy" - ".gvy" diff --git a/megalinter/descriptors/html.megalinter-descriptor.yml b/megalinter/descriptors/html.megalinter-descriptor.yml index 40590b378dd..6c2b67e7315 100644 --- a/megalinter/descriptors/html.megalinter-descriptor.yml +++ b/megalinter/descriptors/html.megalinter-descriptor.yml @@ -2,6 +2,7 @@ descriptor_id: HTML descriptor_type: format descriptor_flavors: - all_flavors # Any project can contain HTML + - cupcake file_extensions: - ".html" - ".htm" diff --git a/megalinter/descriptors/java.megalinter-descriptor.yml b/megalinter/descriptors/java.megalinter-descriptor.yml index 460f4b8613c..a3abd3c2dab 100644 --- a/megalinter/descriptors/java.megalinter-descriptor.yml +++ b/megalinter/descriptors/java.megalinter-descriptor.yml @@ -1,6 +1,7 @@ descriptor_id: JAVA descriptor_type: language descriptor_flavors: + - cupcake - java file_extensions: - ".java" diff --git a/megalinter/descriptors/javascript.megalinter-descriptor.yml b/megalinter/descriptors/javascript.megalinter-descriptor.yml index c3caab22372..ed953d53c4f 100644 --- a/megalinter/descriptors/javascript.megalinter-descriptor.yml +++ b/megalinter/descriptors/javascript.megalinter-descriptor.yml @@ -1,6 +1,7 @@ descriptor_id: JAVASCRIPT descriptor_type: language descriptor_flavors: + - cupcake - javascript file_extensions: - ".js" diff --git a/megalinter/descriptors/json.megalinter-descriptor.yml b/megalinter/descriptors/json.megalinter-descriptor.yml index ef4e3c94284..9e9e9b2f659 100644 --- a/megalinter/descriptors/json.megalinter-descriptor.yml +++ b/megalinter/descriptors/json.megalinter-descriptor.yml @@ -3,6 +3,7 @@ descriptor_type: format descriptor_flavors: - all_flavors # Any project can contain JSON - ci_light + - cupcake file_extensions: - ".json" linters: diff --git a/megalinter/descriptors/jsx.megalinter-descriptor.yml b/megalinter/descriptors/jsx.megalinter-descriptor.yml index cbab9af2e1d..f738db7f102 100644 --- a/megalinter/descriptors/jsx.megalinter-descriptor.yml +++ b/megalinter/descriptors/jsx.megalinter-descriptor.yml @@ -1,6 +1,7 @@ descriptor_id: JSX descriptor_type: language descriptor_flavors: + - cupcake - javascript file_extensions: - ".jsx" diff --git a/megalinter/descriptors/kotlin.megalinter-descriptor.yml b/megalinter/descriptors/kotlin.megalinter-descriptor.yml index ee46aa6823e..b6d71531218 100644 --- a/megalinter/descriptors/kotlin.megalinter-descriptor.yml +++ b/megalinter/descriptors/kotlin.megalinter-descriptor.yml @@ -2,6 +2,7 @@ descriptor_id: KOTLIN descriptor_type: language descriptor_flavors: - all_flavors # As TeamCity uses Kotlin, any project can contain KOTLIN for its CI + - cupcake file_extensions: - ".kt" - ".kts" diff --git a/megalinter/descriptors/kubernetes.megalinter-descriptor.yml b/megalinter/descriptors/kubernetes.megalinter-descriptor.yml index 8b0dbec29b7..a810611e178 100644 --- a/megalinter/descriptors/kubernetes.megalinter-descriptor.yml +++ b/megalinter/descriptors/kubernetes.megalinter-descriptor.yml @@ -2,6 +2,7 @@ descriptor_id: KUBERNETES descriptor_type: tooling_format descriptor_flavors: - all_flavors # Applicable to CI in any language project + - cupcake - security files_sub_directory: kubernetes file_extensions: diff --git a/megalinter/descriptors/makefile.megalinter-descriptor.yml b/megalinter/descriptors/makefile.megalinter-descriptor.yml index 7b8968ecdd3..5fda51ab007 100644 --- a/megalinter/descriptors/makefile.megalinter-descriptor.yml +++ b/megalinter/descriptors/makefile.megalinter-descriptor.yml @@ -3,6 +3,7 @@ descriptor_type: language descriptor_flavors: - all # Applicable to CI in any language project - ci_light + - cupcake - dotnet - go - java diff --git a/megalinter/descriptors/markdown.megalinter-descriptor.yml b/megalinter/descriptors/markdown.megalinter-descriptor.yml index 342ff2adeaf..c64d9a8bc75 100644 --- a/megalinter/descriptors/markdown.megalinter-descriptor.yml +++ b/megalinter/descriptors/markdown.megalinter-descriptor.yml @@ -2,6 +2,7 @@ descriptor_id: MARKDOWN descriptor_type: format descriptor_flavors: - all_flavors # Any project can contain Markdown + - cupcake file_extensions: - ".md" linters: diff --git a/megalinter/descriptors/php.megalinter-descriptor.yml b/megalinter/descriptors/php.megalinter-descriptor.yml index 33078366624..26110562e8f 100644 --- a/megalinter/descriptors/php.megalinter-descriptor.yml +++ b/megalinter/descriptors/php.megalinter-descriptor.yml @@ -1,6 +1,7 @@ descriptor_id: PHP descriptor_type: language descriptor_flavors: + - cupcake - php file_extensions: - ".php" diff --git a/megalinter/descriptors/python.megalinter-descriptor.yml b/megalinter/descriptors/python.megalinter-descriptor.yml index 7f636b88189..54e6e3ddec7 100644 --- a/megalinter/descriptors/python.megalinter-descriptor.yml +++ b/megalinter/descriptors/python.megalinter-descriptor.yml @@ -1,6 +1,7 @@ descriptor_id: PYTHON descriptor_type: language descriptor_flavors: + - cupcake - python file_extensions: - ".py" diff --git a/megalinter/descriptors/repository.megalinter-descriptor.yml b/megalinter/descriptors/repository.megalinter-descriptor.yml index 55037e56cd9..b5a708225c4 100644 --- a/megalinter/descriptors/repository.megalinter-descriptor.yml +++ b/megalinter/descriptors/repository.megalinter-descriptor.yml @@ -3,6 +3,7 @@ descriptor_type: other descriptor_flavors: - all_flavors # Applicable to CI in any language project - ci_light + - cupcake lint_all_files: true linters: # CHECKOV @@ -11,6 +12,7 @@ linters: can_output_sarif: true descriptor_flavors: - all_flavors # Applicable to CI in any language project + - cupcake - terraform - security linter_url: https://www.checkov.io/ @@ -161,6 +163,7 @@ linters: descriptor_flavors: - all_flavors # Applicable to CI in any language project - ci_light + - cupcake - security linter_url: https://github.com/zricethezav/gitleaks linter_repo: https://github.com/zricethezav/gitleaks @@ -200,6 +203,7 @@ linters: descriptor_flavors: - all_flavors # Applicable to CI in any language project - ci_light + - cupcake linter_url: https://sider.github.io/goodcheck/ linter_repo: https://github.com/sider/goodcheck linter_speed: 2 @@ -228,6 +232,7 @@ linters: descriptor_flavors: - all_flavors # Applicable to CI in any language project - ci_light + - cupcake - security linter_url: https://github.com/secretlint/secretlint linter_repo: https://github.com/secretlint/secretlint @@ -263,6 +268,7 @@ linters: can_output_sarif: true descriptor_flavors: - all_flavors # Applicable to CI in any language project + - cupcake - security linter_url: https://semgrep.dev/ linter_repo: https://github.com/returntocorp/semgrep @@ -348,6 +354,7 @@ linters: descriptor_flavors: - all_flavors # Applicable to CI in any language project - ci_light + - cupcake - security linter_text: | You can ignore a list of errors by defining a [.trivyignore file](https://aquasecurity.github.io/trivy/v0.21.1/vulnerability/examples/filter/#by-vulnerability-ids) diff --git a/megalinter/descriptors/rst.megalinter-descriptor.yml b/megalinter/descriptors/rst.megalinter-descriptor.yml index 77ee4903c57..299ffda453e 100644 --- a/megalinter/descriptors/rst.megalinter-descriptor.yml +++ b/megalinter/descriptors/rst.megalinter-descriptor.yml @@ -1,6 +1,7 @@ descriptor_id: RST descriptor_type: format descriptor_flavors: + - cupcake - python # RST is usually used in python projects file_extensions: - ".rst" diff --git a/megalinter/descriptors/ruby.megalinter-descriptor.yml b/megalinter/descriptors/ruby.megalinter-descriptor.yml index 740854601bf..dc6d5887f8a 100644 --- a/megalinter/descriptors/ruby.megalinter-descriptor.yml +++ b/megalinter/descriptors/ruby.megalinter-descriptor.yml @@ -1,6 +1,7 @@ descriptor_id: RUBY descriptor_type: language descriptor_flavors: + - cupcake - ruby file_extensions: - ".rb" diff --git a/megalinter/descriptors/rust.megalinter-descriptor.yml b/megalinter/descriptors/rust.megalinter-descriptor.yml index f22af518b20..21c8df8e498 100644 --- a/megalinter/descriptors/rust.megalinter-descriptor.yml +++ b/megalinter/descriptors/rust.megalinter-descriptor.yml @@ -1,6 +1,7 @@ descriptor_id: RUST descriptor_type: language descriptor_flavors: + - cupcake - rust file_extensions: - ".rs" diff --git a/megalinter/descriptors/schemas/megalinter-descriptor.jsonschema.json b/megalinter/descriptors/schemas/megalinter-descriptor.jsonschema.json index 9c2675945e6..f6d71fc7408 100644 --- a/megalinter/descriptors/schemas/megalinter-descriptor.jsonschema.json +++ b/megalinter/descriptors/schemas/megalinter-descriptor.jsonschema.json @@ -42,6 +42,7 @@ "all_flavors", "all", "ci_light", + "cupcake", "documentation", "dotnet", "go", diff --git a/megalinter/descriptors/spell.megalinter-descriptor.yml b/megalinter/descriptors/spell.megalinter-descriptor.yml index 77e46e028d8..c77614d3315 100644 --- a/megalinter/descriptors/spell.megalinter-descriptor.yml +++ b/megalinter/descriptors/spell.megalinter-descriptor.yml @@ -2,6 +2,7 @@ descriptor_id: SPELL descriptor_type: other descriptor_flavors: - all_flavors # Applicable to CI in any language project + - cupcake lint_all_other_linters_files: true linters: # MISSPELL diff --git a/megalinter/descriptors/sql.megalinter-descriptor.yml b/megalinter/descriptors/sql.megalinter-descriptor.yml index b09476ff1ab..455e2f1c44c 100644 --- a/megalinter/descriptors/sql.megalinter-descriptor.yml +++ b/megalinter/descriptors/sql.megalinter-descriptor.yml @@ -2,6 +2,7 @@ descriptor_id: SQL descriptor_type: language descriptor_flavors: - all_flavors # SQL can be found in any project type + - cupcake file_extensions: - ".sql" linters: diff --git a/megalinter/descriptors/swift.megalinter-descriptor.yml b/megalinter/descriptors/swift.megalinter-descriptor.yml index b7c6627e12a..b277589e16c 100644 --- a/megalinter/descriptors/swift.megalinter-descriptor.yml +++ b/megalinter/descriptors/swift.megalinter-descriptor.yml @@ -1,6 +1,7 @@ descriptor_id: SWIFT descriptor_type: language descriptor_flavors: + - cupcake - swift file_extensions: - ".swift" diff --git a/megalinter/descriptors/terraform.megalinter-descriptor.yml b/megalinter/descriptors/terraform.megalinter-descriptor.yml index c53f82f3c2a..c2066fde042 100644 --- a/megalinter/descriptors/terraform.megalinter-descriptor.yml +++ b/megalinter/descriptors/terraform.megalinter-descriptor.yml @@ -1,6 +1,7 @@ descriptor_id: TERRAFORM descriptor_type: tooling_format descriptor_flavors: + - cupcake - terraform file_extensions: - ".tf" @@ -11,6 +12,7 @@ linters: linter_name: tflint name: TERRAFORM_TFLINT descriptor_flavors: + - cupcake - terraform - security linter_url: https://github.com/terraform-linters/tflint @@ -35,6 +37,7 @@ linters: can_output_sarif: true name: TERRAFORM_TERRASCAN descriptor_flavors: + - cupcake - terraform - security linter_url: https://www.accurics.com/products/terrascan/ @@ -73,6 +76,7 @@ linters: file_names_not_ends_with: - ".tflint.hcl" descriptor_flavors: + - cupcake - terraform - security linter_url: https://terragrunt.gruntwork.io @@ -172,6 +176,7 @@ linters: - linter_name: kics name: TERRAFORM_KICS descriptor_flavors: + - cupcake - terraform - security linter_url: https://www.kics.io diff --git a/megalinter/descriptors/tsx.megalinter-descriptor.yml b/megalinter/descriptors/tsx.megalinter-descriptor.yml index 42829ed2b7c..b9e4de4d810 100644 --- a/megalinter/descriptors/tsx.megalinter-descriptor.yml +++ b/megalinter/descriptors/tsx.megalinter-descriptor.yml @@ -1,6 +1,7 @@ descriptor_id: TSX descriptor_type: language descriptor_flavors: + - cupcake - javascript file_extensions: - ".tsx" diff --git a/megalinter/descriptors/typescript.megalinter-descriptor.yml b/megalinter/descriptors/typescript.megalinter-descriptor.yml index 5262cadefe1..17fa0c6b619 100644 --- a/megalinter/descriptors/typescript.megalinter-descriptor.yml +++ b/megalinter/descriptors/typescript.megalinter-descriptor.yml @@ -1,6 +1,7 @@ descriptor_id: TYPESCRIPT descriptor_type: language descriptor_flavors: + - cupcake - javascript file_extensions: - ".ts" diff --git a/megalinter/descriptors/xml.megalinter-descriptor.yml b/megalinter/descriptors/xml.megalinter-descriptor.yml index 1f998bcce52..af3b1e72204 100644 --- a/megalinter/descriptors/xml.megalinter-descriptor.yml +++ b/megalinter/descriptors/xml.megalinter-descriptor.yml @@ -3,6 +3,7 @@ descriptor_type: format descriptor_flavors: - all_flavors # Any project can contain XML - ci_light + - cupcake file_extensions: - ".xml" linters: diff --git a/megalinter/descriptors/yaml.megalinter-descriptor.yml b/megalinter/descriptors/yaml.megalinter-descriptor.yml index 871b9db38e6..58384258c5d 100644 --- a/megalinter/descriptors/yaml.megalinter-descriptor.yml +++ b/megalinter/descriptors/yaml.megalinter-descriptor.yml @@ -3,6 +3,7 @@ descriptor_type: format descriptor_flavors: - all_flavors # Any project can contain YAML - ci_light + - cupcake file_extensions: - ".yml" - ".yaml" diff --git a/megalinter/flavor_factory.py b/megalinter/flavor_factory.py index 1f7608350a6..5e7e901123e 100644 --- a/megalinter/flavor_factory.py +++ b/megalinter/flavor_factory.py @@ -44,6 +44,7 @@ def list_megalinter_flavors(): "ci_light": { "label": "Optimized for CI items (Dockerfile, Jenkinsfile, JSON/YAML schemas, XML)" }, + "cupcake": {"label": "MegaLinter for the most commonly used languages"}, "documentation": {"label": "Optimized for documentation projects"}, "dotnet": {"label": "Optimized for C, C++, C# or VB based projects"}, "go": {"label": "Optimized for GO based projects"}, diff --git a/mkdocs.yml b/mkdocs.yml index c5189f73cea..ebca9a78be2 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -319,6 +319,7 @@ nav: - "All flavors": "flavors.md" # flavors-start - "ci_light": "flavors/ci_light.md" + - "cupcake": "flavors/cupcake.md" - "documentation": "flavors/documentation.md" - "dotnet": "flavors/dotnet.md" - "go": "flavors/go.md" From a67b29e7bf18b479d0723586f7a6235e4c745e16 Mon Sep 17 00:00:00 2001 From: Nicolas Vuillamy Date: Sat, 22 Oct 2022 15:13:01 +0200 Subject: [PATCH 3/3] [automation] Auto-update linters version, help and documentation (#1989) --- .automation/generated/flavors-stats.json | 48 +- .automation/generated/linter-helps.json | 944 +++++++++++++++++- .automation/generated/linter-versions.json | 2 +- .automation/generated/megalinter-users.json | 24 +- CHANGELOG.md | 1 + docs/all_linters.md | 2 +- docs/descriptors/go_golangci_lint.md | 2 +- docs/descriptors/python_black.md | 4 +- docs/descriptors/repository_checkov.md | 4 +- .../salesforce_sfdx_scanner_apex.md | 312 +++++- .../salesforce_sfdx_scanner_aura.md | 312 +++++- .../salesforce_sfdx_scanner_lwc.md | 312 +++++- docs/descriptors/terraform_checkov.md | 4 +- 13 files changed, 1904 insertions(+), 67 deletions(-) diff --git a/.automation/generated/flavors-stats.json b/.automation/generated/flavors-stats.json index f8a0300127e..064d1301ed9 100644 --- a/.automation/generated/flavors-stats.json +++ b/.automation/generated/flavors-stats.json @@ -1021,8 +1021,8 @@ 2626933 ], [ - "2022-10-22T12:16:42", - 2633233 + "2022-10-22T11:41:20", + 2633257 ] ], "ci_light": [ @@ -2047,14 +2047,14 @@ 28838 ], [ - "2022-10-22T12:16:42", - 29340 + "2022-10-22T11:41:20", + 29341 ] ], "cupcake": [ [ - "2022-10-22T12:16:42", - 0 + "2022-10-22T11:41:20", + 1 ] ], "dart": [ @@ -3989,7 +3989,7 @@ 78557 ], [ - "2022-10-22T12:16:42", + "2022-10-22T11:41:20", 79788 ] ], @@ -5015,8 +5015,8 @@ 316688 ], [ - "2022-10-22T12:16:42", - 317452 + "2022-10-22T11:41:20", + 317453 ] ], "go": [ @@ -6041,7 +6041,7 @@ 14338 ], [ - "2022-10-22T12:16:42", + "2022-10-22T11:41:20", 14450 ] ], @@ -7067,8 +7067,8 @@ 96074 ], [ - "2022-10-22T12:16:42", - 96614 + "2022-10-22T11:41:20", + 96615 ] ], "javascript": [ @@ -8093,8 +8093,8 @@ 157500 ], [ - "2022-10-22T12:16:42", - 158692 + "2022-10-22T11:41:20", + 158708 ] ], "php": [ @@ -9119,7 +9119,7 @@ 23473 ], [ - "2022-10-22T12:16:42", + "2022-10-22T11:41:20", 24408 ] ], @@ -10145,8 +10145,8 @@ 112995 ], [ - "2022-10-22T12:16:42", - 114712 + "2022-10-22T11:41:20", + 114727 ] ], "ruby": [ @@ -11167,7 +11167,7 @@ 2661 ], [ - "2022-10-22T12:16:42", + "2022-10-22T11:41:20", 2667 ] ], @@ -12189,7 +12189,7 @@ 4035 ], [ - "2022-10-22T12:16:42", + "2022-10-22T11:41:20", 4073 ] ], @@ -13215,7 +13215,7 @@ 14494 ], [ - "2022-10-22T12:16:42", + "2022-10-22T11:41:20", 14625 ] ], @@ -14239,7 +14239,7 @@ 1341 ], [ - "2022-10-22T12:16:42", + "2022-10-22T11:41:20", 1343 ] ], @@ -15261,7 +15261,7 @@ 2596 ], [ - "2022-10-22T12:16:42", + "2022-10-22T11:41:20", 2627 ] ], @@ -16287,8 +16287,8 @@ 122680 ], [ - "2022-10-22T12:16:42", - 124734 + "2022-10-22T11:41:20", + 124743 ] ] } \ No newline at end of file diff --git a/.automation/generated/linter-helps.json b/.automation/generated/linter-helps.json index 154b6b9d85a..38a3fc1a3ba 100644 --- a/.automation/generated/linter-helps.json +++ b/.automation/generated/linter-helps.json @@ -461,8 +461,8 @@ " input).", " --python-cell-magics TEXT When processing Jupyter Notebooks, add the", " given magic to the list of known python-", - " magics (timeit, capture, time, python3,", - " pypy, prun, python). Useful for formatting", + " magics (capture, time, python3, timeit,", + " python, prun, pypy). Useful for formatting", " cells with custom python magics.", " -x, --skip-source-first-line Skip the first line of the source code.", " -S, --skip-string-normalization", @@ -642,7 +642,7 @@ " [--secrets-scan-file-type SECRETS_SCAN_FILE_TYPE]", " [--enable-secret-scan-all-files]", " [--block-list-secret-scan BLOCK_LIST_SECRET_SCAN]", - " [--summary-position {top,bottom}]", + " [--summary-position {bottom,top}]", " [--skip-resources-without-violations]", "", "Infrastructure as code static analysis", @@ -893,7 +893,7 @@ " --block-list-secret-scan BLOCK_LIST_SECRET_SCAN", " List of files to filter out from the secret scanner", " [env var: CKV_SECRETS_SCAN_BLOCK_LIST]", - " --summary-position {top,bottom}", + " --summary-position {bottom,top}", " Chose whether the summary will be appended on top", " (before the checks results) or on bottom (after check", " results), default is on top.", @@ -6006,19 +6006,937 @@ "@typescript-eslint/unbound-method typescript Best Practices Best Practices eslint-typescript" ], "sfdx-scanner-apex": [ - " \u203a Error: Command scanner:run not found.", - " \u203a Warning: scanner:rule:list is not a sfdx command.", - "Did you mean force:auth:list? [y/n]:" + "evaluate a selection of rules against a codebase", + "", + "USAGE", + " $ sfdx scanner:run -t [-c ] [-r ] [-e ]", + " [-f csv|html|json|junit|sarif|table|xml] [-o ] [--tsconfig ]", + " [--eslintconfig ] [--pmdconfig ] [--env ] [-s", + " | undefined | [-v | --json]] [--normalize-severity] [--verbose]", + " [--loglevel", + " trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL]", + "", + "FLAGS", + " -c, --category=", + " categor(ies) of rules to run", + "", + " -e, --engine=", + " engine(s) to run", + "", + " -f, --format=(csv|html|json|junit|sarif|table|xml)", + " format of results", + "", + " -o, --outfile=", + " location of output file", + "", + " -r, --ruleset=", + " [deprecated] ruleset(s) of rules to run", + "", + " -s, --severity-threshold=", + " throws an error when violations of specific severity (or more severe) are", + " detected, invokes --normalize-severity", + "", + " -t, --target=", + " (required) location of source code", + "", + " -v, --violations-cause-error", + " [deprecated] throws an error when violations are detected", + "", + " --env=", + " JSON-formatted string, overrides ESLint's default environment variables", + "", + " --eslintconfig=", + " location of eslintrc config to customize eslint engine", + "", + " --json", + " format output as json", + "", + " --loglevel=(trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATA", + " L)", + " [default: warn] logging level for this command invocation", + "", + " --normalize-severity", + " A normalized severity 1 (high), 2 (moderate), and 3 (low) is returned in", + " addition to the engine specific severity", + "", + " --pmdconfig=", + " location of PMD rule reference XML file to customize rule selection", + "", + " --tsconfig=", + " location of tsconfig.json file", + "", + " --verbose", + " emit additional command output to stdout", + "", + "DESCRIPTION", + " evaluate a selection of rules against a codebase", + "", + "EXAMPLES", + " Invoking without specifying any rules causes all rules to be run.", + " E.g., $ sfdx scanner:run --format xml --target \"somefile.js\"", + " Evaluates all rules against somefile.js.", + " Specifying multiple categories is treated as a logical OR.", + " E.g., $ sfdx scanner:run --format xml --target \"somefile.js\" --category \"Design,Best Practices\"", + " Evaluates all rules in the Design or Best Practices categories.", + " Categories can be excluded by specifying the negation operator, the values must be enclosed in single quotes.", + " E.g., $ sfdx scanner:run --format xml --target \"somefile.js\" --category '!Design,!Best Practices'", + " Evaluates all rules except those in the Design or Best Practices categories.", + " Wrap globs in quotes.", + " Unix example: $ sfdx scanner:run --target './**/*.js,!./**/IgnoreMe.js' ...", + " Windows example: > sfdx scanner:run --target \".\\**\\*.js,!.\\**\\IgnoreMe.js\" ...", + " Evaluate rules against all .js files below the current directory, except for IgnoreMe.js.", + " Specify tsconfig.json if the current working directory does not contain the tsconfig.json that corresponds to the TypeScript files being scanned.", + " E.g., sfdx scanner:run --target \"/my-project/**/*.ts\" --tsconfig \"/my-project/tsconfig.json\"", + " Scans the project contained in '/my-project' if the current working directory is another directory.", + " Use --env to override the default ESLint environment variables to add frameworks.", + " E.g., $ sfdx scanner:run --target \"somefile.js\" --env '{\"jasmine\": true}'", + " Evaluates rules against somefile.js, including Jasmine in the environment variables.", + " Use --violations-cause-error to throw exit with a non-zero code when violations are found.", + " E.g., $ sfdx scanner:run --target \"somefile.js\" --violations-cause-error", + " Evaluates rules against somefile.js. If any rules are violated, the exit code will be the severity of the most severe violation.", + " Use --engine to include or exclude engines. Any engine listed will be run, regardless of its current 'disabled' attribute.", + " E.g., $ sfdx scanner:run --target \"somefile.js\" --engine \"eslint-lwc,pmd\"", + " Evaluates rules against somefile.js, using eslint-lwc and pmd engines.", + " Use --engine to invoke engines that are not enabled by default.", + " E.g, $ sfdx scanner:run --target \"/some/dir\" --engine cpd", + " Executes CPD engine against known file extensions in \"/some/dir\". CPD helps detect blocks of code duplication in selected languages.", + " To use PMD with your own rule reference file, use --pmdconfig. Note that rule filters are not applied.", + " E.g, $ sfdx scanner:run --target \"src\" --pmdconfig \"pmd_rule_ref.xml\"", + " To use Eslint with your own .eslintrc.json file, use --eslintconfig. Make sure that the directory you run the command from has all the NPM dependencies installed.", + " E.g., $ sfdx scanner:run --target \"src\" --eslintconfig \"/home/my/setup/.eslintrc.json\"", + " Use --normalize-severity to output a normalized (across all engines) severity (1 [high], 2 [moderate], and 3 [low]) in addition to the engine specific severity (when shown).", + " E.g., $ sfdx scanner:run --target \"/some-project/\" --format csv --normalize-severity", + " Use --severity-threshold to throw a non-zero exit code when rule violations of a specific severity (or greater) are found. For this example, if there are any rule violations with a severity of 2 or more (which includes 1-high and 2-moderate), the exit code will be equal to the severity of the most severe violation.", + " E.g., $ sfdx scanner:run --target \"/some-project/\" --severity-threshold 2", + "", + "", + "WARNING: We're constantly improving Salesforce Code Analyzer. Tell us what you think! Give feedback at https://research.net/r/SalesforceCA.", + "WARNING: v2.x's End Of Life is approaching.", + " In October 2022, v3.x of the Salesforce Code Analyzer will become the default version,", + " and older versions, including your currently installed version, will no longer be supported.", + " You can manually update to v3.x earlier for a smoother transition.", + "WARNING: As of April 27, 2022, v3.x of the Salesforce Code Analyzer is available as an open pilot.", + " To update to v3.x and try out our pilot features, run these commands:", + " > sfdx plugins:uninstall @salesforce/sfdx-scanner", + " > sfdx plugins:install @salesforce/sfdx-scanner@latest-pilot", + "NAME LANGUAGES CATEGORIES RULESETS [DEP] ENGINE", + "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500", + "VfCsrf visualforce Security Basic VF pmd", + "VfHtmlStyleTagXss visualforce Security pmd", + "VfUnescapeEl visualforce Security Basic VF pmd", + "ApexAssertionsShouldIncludeMessage apex Best Practices pmd", + "ApexUnitTestClassShouldHaveAsserts apex Best Practices quickstart,Default ruleset...,ApexUnit pmd", + "ApexUnitTestMethodShouldHaveIsTestAnnotation apex Best Practices pmd", + "ApexUnitTestShouldNotUseSeeAllDataTrue apex Best Practices quickstart,Default ruleset...,ApexUnit pmd", + "AvoidGlobalModifier apex Best Practices Style,quickstart,Default ruleset... pmd", + "AvoidLogicInTrigger apex Best Practices Style,quickstart,Default ruleset... pmd", + "DebugsShouldUseLoggingLevel apex Best Practices quickstart pmd", + "UnusedLocalVariable apex Best Practices pmd", + "AvoidDebugStatements apex Performance pmd", + "AvoidDmlStatementsInLoops apex Performance Default ruleset...,Performance pmd", + "AvoidSoqlInLoops apex Performance Default ruleset...,Performance pmd", + "AvoidSoslInLoops apex Performance Default ruleset...,Performance pmd", + "EagerlyLoadedDescribeSObjectResult apex Performance pmd", + "OperationWithLimitsInLoop apex Performance quickstart pmd", + "ApexBadCrypto apex Security Security,quickstart,Default ruleset... pmd", + "ApexCRUDViolation apex Security Security,quickstart,Default ruleset... pmd", + "ApexCSRF apex Security Security pmd", + "ApexDangerousMethods apex Security Security,quickstart,Default ruleset... pmd", + "ApexInsecureEndpoint apex Security Security,quickstart,Default ruleset... pmd", + "ApexOpenRedirect apex Security Security,quickstart,Default ruleset... pmd", + "ApexSharingViolations apex Security Security,quickstart,Default ruleset... pmd", + "ApexSOQLInjection apex Security Security,quickstart,Default ruleset... pmd", + "ApexSuggestUsingNamedCred apex Security Security,quickstart,Default ruleset... pmd", + "ApexXSSFromEscapeFalse apex Security Security,quickstart,Default ruleset... pmd", + "ApexXSSFromURLParam apex Security Security,quickstart,Default ruleset... pmd", + "ClassNamingConventions apex Code Style Style,quickstart,Default ruleset... pmd", + "IfElseStmtsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd", + "IfStmtsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd", + "FieldDeclarationsShouldBeAtStart apex Code Style pmd", + "FieldNamingConventions apex Code Style quickstart pmd", + "ForLoopsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd", + "FormalParameterNamingConventions apex Code Style quickstart pmd", + "LocalVariableNamingConventions apex Code Style quickstart pmd", + "MethodNamingConventions apex Code Style Style,quickstart,Default ruleset... pmd", + "OneDeclarationPerLine apex Code Style quickstart,Default ruleset... pmd", + "PropertyNamingConventions apex Code Style quickstart pmd", + "VariableNamingConventions apex Code Style Style,Default ruleset... pmd", + "WhileLoopsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd", + "AvoidDeeplyNestedIfStmts apex Design quickstart,Default ruleset...,Complexity pmd", + "CyclomaticComplexity apex Design Metrics tempora...,quickstart,Default ruleset... pmd", + "CognitiveComplexity apex Design pmd", + "ExcessiveClassLength apex Design quickstart,Default ruleset...,Complexity pmd", + "ExcessiveParameterList apex Design quickstart,Default ruleset...,Complexity pmd", + "ExcessivePublicCount apex Design quickstart,Default ruleset...,Complexity pmd", + "NcssConstructorCount apex Design quickstart,Default ruleset...,Complexity pmd", + "NcssMethodCount apex Design quickstart,Default ruleset...,Complexity pmd", + "NcssTypeCount apex Design quickstart,Default ruleset...,Complexity pmd", + "StdCyclomaticComplexity apex Design quickstart,Default ruleset...,Complexity pmd", + "TooManyFields apex Design quickstart,Default ruleset...,Complexity pmd", + "ApexDoc apex Documentation quickstart,Default ruleset... pmd", + "ApexCSRF apex Error Prone quickstart,Default ruleset... pmd", + "AvoidDirectAccessTriggerMap apex Error Prone Style,quickstart,Default ruleset... pmd", + "AvoidHardcodingId apex Error Prone Style,quickstart,Default ruleset... pmd", + "AvoidNonExistentAnnotations apex Error Prone quickstart,Default ruleset... pmd", + "EmptyCatchBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd", + "EmptyIfStmt apex Error Prone quickstart,Default ruleset...,Empty Code pmd", + "EmptyStatementBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd", + "EmptyTryOrFinallyBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd", + "EmptyWhileStmt apex Error Prone quickstart,Default ruleset...,Empty Code pmd", + "InaccessibleAuraEnabledGetter apex Error Prone pmd", + "MethodWithSameNameAsEnclosingClass apex Error Prone Style,quickstart,Default ruleset... pmd", + "OverrideBothEqualsAndHashcode apex Error Prone pmd", + "TestMethodsMustBeInTestClasses apex Error Prone pmd", + "constructor-super javascript ECMAScript 6 ECMAScript 6 eslint", + "for-direction javascript Possible Errors Possible Errors eslint", + "getter-return javascript Possible Errors Possible Errors eslint", + "no-async-promise-executor javascript Possible Errors Possible Errors eslint", + "no-case-declarations javascript Best Practices Best Practices eslint", + "no-class-assign javascript ECMAScript 6 ECMAScript 6 eslint", + "no-compare-neg-zero javascript Possible Errors Possible Errors eslint", + "no-cond-assign javascript Possible Errors Possible Errors eslint", + "no-const-assign javascript ECMAScript 6 ECMAScript 6 eslint", + "no-constant-condition javascript Possible Errors Possible Errors eslint", + "no-control-regex javascript Possible Errors Possible Errors eslint", + "no-debugger javascript Possible Errors Possible Errors eslint", + "no-delete-var javascript Variables Variables eslint", + "no-dupe-args javascript Possible Errors Possible Errors eslint", + "no-dupe-class-members javascript ECMAScript 6 ECMAScript 6 eslint", + "no-dupe-keys javascript Possible Errors Possible Errors eslint", + "no-duplicate-case javascript Possible Errors Possible Errors eslint", + "no-empty javascript Possible Errors Possible Errors eslint", + "no-empty-character-class javascript Possible Errors Possible Errors eslint", + "no-empty-pattern javascript Best Practices Best Practices eslint", + "no-ex-assign javascript Possible Errors Possible Errors eslint", + "no-extra-boolean-cast javascript Possible Errors Possible Errors eslint", + "no-extra-semi javascript Possible Errors Possible Errors eslint", + "no-fallthrough javascript Best Practices Best Practices eslint", + "no-func-assign javascript Possible Errors Possible Errors eslint", + "no-global-assign javascript Best Practices Best Practices eslint", + "no-inner-declarations javascript Possible Errors Possible Errors eslint", + "no-invalid-regexp javascript Possible Errors Possible Errors eslint", + "no-irregular-whitespace javascript Possible Errors Possible Errors eslint", + "no-misleading-character-class javascript Possible Errors Possible Errors eslint", + "no-mixed-spaces-and-tabs javascript Stylistic Issues Stylistic Issues eslint", + "no-new-symbol javascript ECMAScript 6 ECMAScript 6 eslint", + "no-obj-calls javascript Possible Errors Possible Errors eslint", + "no-octal javascript Best Practices Best Practices eslint", + "no-prototype-builtins javascript Possible Errors Possible Errors eslint", + "no-redeclare javascript Best Practices Best Practices eslint", + "no-regex-spaces javascript Possible Errors Possible Errors eslint", + "no-self-assign javascript Best Practices Best Practices eslint", + "no-shadow-restricted-names javascript Variables Variables eslint", + "no-sparse-arrays javascript Possible Errors Possible Errors eslint", + "no-this-before-super javascript ECMAScript 6 ECMAScript 6 eslint", + "no-undef javascript Variables Variables eslint", + "no-unexpected-multiline javascript Possible Errors Possible Errors eslint", + "no-unreachable javascript Possible Errors Possible Errors eslint", + "no-unsafe-finally javascript Possible Errors Possible Errors eslint", + "no-unsafe-negation javascript Possible Errors Possible Errors eslint", + "no-unused-labels javascript Best Practices Best Practices eslint", + "no-unused-vars javascript Variables Variables eslint", + "no-useless-catch javascript Best Practices Best Practices eslint", + "no-useless-escape javascript Best Practices Best Practices eslint", + "no-with javascript Best Practices Best Practices eslint", + "require-yield javascript ECMAScript 6 ECMAScript 6 eslint", + "use-isnan javascript Possible Errors Possible Errors eslint", + "valid-typeof javascript Possible Errors Possible Errors eslint", + "constructor-super typescript ECMAScript 6 ECMAScript 6 eslint-typescript", + "for-direction typescript Possible Errors Possible Errors eslint-typescript", + "no-async-promise-executor typescript Possible Errors Possible Errors eslint-typescript", + "no-case-declarations typescript Best Practices Best Practices eslint-typescript", + "no-class-assign typescript ECMAScript 6 ECMAScript 6 eslint-typescript", + "no-compare-neg-zero typescript Possible Errors Possible Errors eslint-typescript", + "no-cond-assign typescript Possible Errors Possible Errors eslint-typescript", + "no-constant-condition typescript Possible Errors Possible Errors eslint-typescript", + "no-control-regex typescript Possible Errors Possible Errors eslint-typescript", + "no-debugger typescript Possible Errors Possible Errors eslint-typescript", + "no-delete-var typescript Variables Variables eslint-typescript", + "no-duplicate-case typescript Possible Errors Possible Errors eslint-typescript", + "no-empty typescript Possible Errors Possible Errors eslint-typescript", + "no-empty-character-class typescript Possible Errors Possible Errors eslint-typescript", + "no-empty-pattern typescript Best Practices Best Practices eslint-typescript", + "no-ex-assign typescript Possible Errors Possible Errors eslint-typescript", + "no-extra-boolean-cast typescript Possible Errors Possible Errors eslint-typescript", + "no-fallthrough typescript Best Practices Best Practices eslint-typescript", + "no-func-assign typescript Possible Errors Possible Errors eslint-typescript", + "no-global-assign typescript Best Practices Best Practices eslint-typescript", + "no-inner-declarations typescript Possible Errors Possible Errors eslint-typescript", + "no-invalid-regexp typescript Possible Errors Possible Errors eslint-typescript", + "no-irregular-whitespace typescript Possible Errors Possible Errors eslint-typescript", + "no-misleading-character-class typescript Possible Errors Possible Errors eslint-typescript", + "no-mixed-spaces-and-tabs typescript Stylistic Issues Stylistic Issues eslint-typescript", + "no-obj-calls typescript Possible Errors Possible Errors eslint-typescript", + "no-octal typescript Best Practices Best Practices eslint-typescript", + "no-prototype-builtins typescript Possible Errors Possible Errors eslint-typescript", + "no-regex-spaces typescript Possible Errors Possible Errors eslint-typescript", + "no-self-assign typescript Best Practices Best Practices eslint-typescript", + "no-shadow-restricted-names typescript Variables Variables eslint-typescript", + "no-sparse-arrays typescript Possible Errors Possible Errors eslint-typescript", + "no-unexpected-multiline typescript Possible Errors Possible Errors eslint-typescript", + "no-unsafe-finally typescript Possible Errors Possible Errors eslint-typescript", + "no-unsafe-negation typescript Possible Errors Possible Errors eslint-typescript", + "no-unused-labels typescript Best Practices Best Practices eslint-typescript", + "no-useless-catch typescript Best Practices Best Practices eslint-typescript", + "no-useless-escape typescript Best Practices Best Practices eslint-typescript", + "no-var typescript ECMAScript 6 ECMAScript 6 eslint-typescript", + "no-with typescript Best Practices Best Practices eslint-typescript", + "prefer-const typescript ECMAScript 6 ECMAScript 6 eslint-typescript", + "prefer-rest-params typescript ECMAScript 6 ECMAScript 6 eslint-typescript", + "prefer-spread typescript ECMAScript 6 ECMAScript 6 eslint-typescript", + "require-yield typescript ECMAScript 6 ECMAScript 6 eslint-typescript", + "use-isnan typescript Possible Errors Possible Errors eslint-typescript", + "@typescript-eslint/adjacent-overload-signatures typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/await-thenable typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/ban-types typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/consistent-type-assertions typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/explicit-function-return-type typescript Stylistic Issues Stylistic Issues eslint-typescript", + "@typescript-eslint/member-delimiter-style typescript Stylistic Issues Stylistic Issues eslint-typescript", + "@typescript-eslint/no-array-constructor typescript Stylistic Issues Stylistic Issues eslint-typescript", + "@typescript-eslint/no-empty-function typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/no-empty-interface typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/no-explicit-any typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/no-for-in-array typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/no-inferrable-types typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/no-misused-new typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/no-misused-promises typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/no-namespace typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/no-non-null-assertion typescript Stylistic Issues Stylistic Issues eslint-typescript", + "@typescript-eslint/no-this-alias typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/no-unnecessary-type-assertion typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/no-unused-vars typescript Variables Variables eslint-typescript", + "@typescript-eslint/no-use-before-define typescript Variables Variables eslint-typescript", + "@typescript-eslint/no-var-requires typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/prefer-includes typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/prefer-namespace-keyword typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/prefer-regexp-exec typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/prefer-string-starts-ends-with typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/require-await typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/triple-slash-reference typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/type-annotation-spacing typescript Stylistic Issues Stylistic Issues eslint-typescript", + "@typescript-eslint/unbound-method typescript Best Practices Best Practices eslint-typescript" ], "sfdx-scanner-aura": [ - " \u203a Error: Command scanner:run not found.", - " \u203a Warning: scanner:rule:list is not a sfdx command.", - "Did you mean force:auth:list? [y/n]:" + "evaluate a selection of rules against a codebase", + "", + "USAGE", + " $ sfdx scanner:run -t [-c ] [-r ] [-e ]", + " [-f csv|html|json|junit|sarif|table|xml] [-o ] [--tsconfig ]", + " [--eslintconfig ] [--pmdconfig ] [--env ] [-s", + " | undefined | [-v | --json]] [--normalize-severity] [--verbose]", + " [--loglevel", + " trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL]", + "", + "FLAGS", + " -c, --category=", + " categor(ies) of rules to run", + "", + " -e, --engine=", + " engine(s) to run", + "", + " -f, --format=(csv|html|json|junit|sarif|table|xml)", + " format of results", + "", + " -o, --outfile=", + " location of output file", + "", + " -r, --ruleset=", + " [deprecated] ruleset(s) of rules to run", + "", + " -s, --severity-threshold=", + " throws an error when violations of specific severity (or more severe) are", + " detected, invokes --normalize-severity", + "", + " -t, --target=", + " (required) location of source code", + "", + " -v, --violations-cause-error", + " [deprecated] throws an error when violations are detected", + "", + " --env=", + " JSON-formatted string, overrides ESLint's default environment variables", + "", + " --eslintconfig=", + " location of eslintrc config to customize eslint engine", + "", + " --json", + " format output as json", + "", + " --loglevel=(trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATA", + " L)", + " [default: warn] logging level for this command invocation", + "", + " --normalize-severity", + " A normalized severity 1 (high), 2 (moderate), and 3 (low) is returned in", + " addition to the engine specific severity", + "", + " --pmdconfig=", + " location of PMD rule reference XML file to customize rule selection", + "", + " --tsconfig=", + " location of tsconfig.json file", + "", + " --verbose", + " emit additional command output to stdout", + "", + "DESCRIPTION", + " evaluate a selection of rules against a codebase", + "", + "EXAMPLES", + " Invoking without specifying any rules causes all rules to be run.", + " E.g., $ sfdx scanner:run --format xml --target \"somefile.js\"", + " Evaluates all rules against somefile.js.", + " Specifying multiple categories is treated as a logical OR.", + " E.g., $ sfdx scanner:run --format xml --target \"somefile.js\" --category \"Design,Best Practices\"", + " Evaluates all rules in the Design or Best Practices categories.", + " Categories can be excluded by specifying the negation operator, the values must be enclosed in single quotes.", + " E.g., $ sfdx scanner:run --format xml --target \"somefile.js\" --category '!Design,!Best Practices'", + " Evaluates all rules except those in the Design or Best Practices categories.", + " Wrap globs in quotes.", + " Unix example: $ sfdx scanner:run --target './**/*.js,!./**/IgnoreMe.js' ...", + " Windows example: > sfdx scanner:run --target \".\\**\\*.js,!.\\**\\IgnoreMe.js\" ...", + " Evaluate rules against all .js files below the current directory, except for IgnoreMe.js.", + " Specify tsconfig.json if the current working directory does not contain the tsconfig.json that corresponds to the TypeScript files being scanned.", + " E.g., sfdx scanner:run --target \"/my-project/**/*.ts\" --tsconfig \"/my-project/tsconfig.json\"", + " Scans the project contained in '/my-project' if the current working directory is another directory.", + " Use --env to override the default ESLint environment variables to add frameworks.", + " E.g., $ sfdx scanner:run --target \"somefile.js\" --env '{\"jasmine\": true}'", + " Evaluates rules against somefile.js, including Jasmine in the environment variables.", + " Use --violations-cause-error to throw exit with a non-zero code when violations are found.", + " E.g., $ sfdx scanner:run --target \"somefile.js\" --violations-cause-error", + " Evaluates rules against somefile.js. If any rules are violated, the exit code will be the severity of the most severe violation.", + " Use --engine to include or exclude engines. Any engine listed will be run, regardless of its current 'disabled' attribute.", + " E.g., $ sfdx scanner:run --target \"somefile.js\" --engine \"eslint-lwc,pmd\"", + " Evaluates rules against somefile.js, using eslint-lwc and pmd engines.", + " Use --engine to invoke engines that are not enabled by default.", + " E.g, $ sfdx scanner:run --target \"/some/dir\" --engine cpd", + " Executes CPD engine against known file extensions in \"/some/dir\". CPD helps detect blocks of code duplication in selected languages.", + " To use PMD with your own rule reference file, use --pmdconfig. Note that rule filters are not applied.", + " E.g, $ sfdx scanner:run --target \"src\" --pmdconfig \"pmd_rule_ref.xml\"", + " To use Eslint with your own .eslintrc.json file, use --eslintconfig. Make sure that the directory you run the command from has all the NPM dependencies installed.", + " E.g., $ sfdx scanner:run --target \"src\" --eslintconfig \"/home/my/setup/.eslintrc.json\"", + " Use --normalize-severity to output a normalized (across all engines) severity (1 [high], 2 [moderate], and 3 [low]) in addition to the engine specific severity (when shown).", + " E.g., $ sfdx scanner:run --target \"/some-project/\" --format csv --normalize-severity", + " Use --severity-threshold to throw a non-zero exit code when rule violations of a specific severity (or greater) are found. For this example, if there are any rule violations with a severity of 2 or more (which includes 1-high and 2-moderate), the exit code will be equal to the severity of the most severe violation.", + " E.g., $ sfdx scanner:run --target \"/some-project/\" --severity-threshold 2", + "", + "", + "WARNING: We're constantly improving Salesforce Code Analyzer. Tell us what you think! Give feedback at https://research.net/r/SalesforceCA.", + "WARNING: v2.x's End Of Life is approaching.", + " In October 2022, v3.x of the Salesforce Code Analyzer will become the default version,", + " and older versions, including your currently installed version, will no longer be supported.", + " You can manually update to v3.x earlier for a smoother transition.", + "WARNING: As of April 27, 2022, v3.x of the Salesforce Code Analyzer is available as an open pilot.", + " To update to v3.x and try out our pilot features, run these commands:", + " > sfdx plugins:uninstall @salesforce/sfdx-scanner", + " > sfdx plugins:install @salesforce/sfdx-scanner@latest-pilot", + "NAME LANGUAGES CATEGORIES RULESETS [DEP] ENGINE", + "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500", + "VfCsrf visualforce Security Basic VF pmd", + "VfHtmlStyleTagXss visualforce Security pmd", + "VfUnescapeEl visualforce Security Basic VF pmd", + "ApexAssertionsShouldIncludeMessage apex Best Practices pmd", + "ApexUnitTestClassShouldHaveAsserts apex Best Practices quickstart,Default ruleset...,ApexUnit pmd", + "ApexUnitTestMethodShouldHaveIsTestAnnotation apex Best Practices pmd", + "ApexUnitTestShouldNotUseSeeAllDataTrue apex Best Practices quickstart,Default ruleset...,ApexUnit pmd", + "AvoidGlobalModifier apex Best Practices Style,quickstart,Default ruleset... pmd", + "AvoidLogicInTrigger apex Best Practices Style,quickstart,Default ruleset... pmd", + "DebugsShouldUseLoggingLevel apex Best Practices quickstart pmd", + "UnusedLocalVariable apex Best Practices pmd", + "AvoidDebugStatements apex Performance pmd", + "AvoidDmlStatementsInLoops apex Performance Default ruleset...,Performance pmd", + "AvoidSoqlInLoops apex Performance Default ruleset...,Performance pmd", + "AvoidSoslInLoops apex Performance Default ruleset...,Performance pmd", + "EagerlyLoadedDescribeSObjectResult apex Performance pmd", + "OperationWithLimitsInLoop apex Performance quickstart pmd", + "ApexBadCrypto apex Security Security,quickstart,Default ruleset... pmd", + "ApexCRUDViolation apex Security Security,quickstart,Default ruleset... pmd", + "ApexCSRF apex Security Security pmd", + "ApexDangerousMethods apex Security Security,quickstart,Default ruleset... pmd", + "ApexInsecureEndpoint apex Security Security,quickstart,Default ruleset... pmd", + "ApexOpenRedirect apex Security Security,quickstart,Default ruleset... pmd", + "ApexSharingViolations apex Security Security,quickstart,Default ruleset... pmd", + "ApexSOQLInjection apex Security Security,quickstart,Default ruleset... pmd", + "ApexSuggestUsingNamedCred apex Security Security,quickstart,Default ruleset... pmd", + "ApexXSSFromEscapeFalse apex Security Security,quickstart,Default ruleset... pmd", + "ApexXSSFromURLParam apex Security Security,quickstart,Default ruleset... pmd", + "ClassNamingConventions apex Code Style Style,quickstart,Default ruleset... pmd", + "IfElseStmtsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd", + "IfStmtsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd", + "FieldDeclarationsShouldBeAtStart apex Code Style pmd", + "FieldNamingConventions apex Code Style quickstart pmd", + "ForLoopsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd", + "FormalParameterNamingConventions apex Code Style quickstart pmd", + "LocalVariableNamingConventions apex Code Style quickstart pmd", + "MethodNamingConventions apex Code Style Style,quickstart,Default ruleset... pmd", + "OneDeclarationPerLine apex Code Style quickstart,Default ruleset... pmd", + "PropertyNamingConventions apex Code Style quickstart pmd", + "VariableNamingConventions apex Code Style Style,Default ruleset... pmd", + "WhileLoopsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd", + "AvoidDeeplyNestedIfStmts apex Design quickstart,Default ruleset...,Complexity pmd", + "CyclomaticComplexity apex Design Metrics tempora...,quickstart,Default ruleset... pmd", + "CognitiveComplexity apex Design pmd", + "ExcessiveClassLength apex Design quickstart,Default ruleset...,Complexity pmd", + "ExcessiveParameterList apex Design quickstart,Default ruleset...,Complexity pmd", + "ExcessivePublicCount apex Design quickstart,Default ruleset...,Complexity pmd", + "NcssConstructorCount apex Design quickstart,Default ruleset...,Complexity pmd", + "NcssMethodCount apex Design quickstart,Default ruleset...,Complexity pmd", + "NcssTypeCount apex Design quickstart,Default ruleset...,Complexity pmd", + "StdCyclomaticComplexity apex Design quickstart,Default ruleset...,Complexity pmd", + "TooManyFields apex Design quickstart,Default ruleset...,Complexity pmd", + "ApexDoc apex Documentation quickstart,Default ruleset... pmd", + "ApexCSRF apex Error Prone quickstart,Default ruleset... pmd", + "AvoidDirectAccessTriggerMap apex Error Prone Style,quickstart,Default ruleset... pmd", + "AvoidHardcodingId apex Error Prone Style,quickstart,Default ruleset... pmd", + "AvoidNonExistentAnnotations apex Error Prone quickstart,Default ruleset... pmd", + "EmptyCatchBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd", + "EmptyIfStmt apex Error Prone quickstart,Default ruleset...,Empty Code pmd", + "EmptyStatementBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd", + "EmptyTryOrFinallyBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd", + "EmptyWhileStmt apex Error Prone quickstart,Default ruleset...,Empty Code pmd", + "InaccessibleAuraEnabledGetter apex Error Prone pmd", + "MethodWithSameNameAsEnclosingClass apex Error Prone Style,quickstart,Default ruleset... pmd", + "OverrideBothEqualsAndHashcode apex Error Prone pmd", + "TestMethodsMustBeInTestClasses apex Error Prone pmd", + "constructor-super javascript ECMAScript 6 ECMAScript 6 eslint", + "for-direction javascript Possible Errors Possible Errors eslint", + "getter-return javascript Possible Errors Possible Errors eslint", + "no-async-promise-executor javascript Possible Errors Possible Errors eslint", + "no-case-declarations javascript Best Practices Best Practices eslint", + "no-class-assign javascript ECMAScript 6 ECMAScript 6 eslint", + "no-compare-neg-zero javascript Possible Errors Possible Errors eslint", + "no-cond-assign javascript Possible Errors Possible Errors eslint", + "no-const-assign javascript ECMAScript 6 ECMAScript 6 eslint", + "no-constant-condition javascript Possible Errors Possible Errors eslint", + "no-control-regex javascript Possible Errors Possible Errors eslint", + "no-debugger javascript Possible Errors Possible Errors eslint", + "no-delete-var javascript Variables Variables eslint", + "no-dupe-args javascript Possible Errors Possible Errors eslint", + "no-dupe-class-members javascript ECMAScript 6 ECMAScript 6 eslint", + "no-dupe-keys javascript Possible Errors Possible Errors eslint", + "no-duplicate-case javascript Possible Errors Possible Errors eslint", + "no-empty javascript Possible Errors Possible Errors eslint", + "no-empty-character-class javascript Possible Errors Possible Errors eslint", + "no-empty-pattern javascript Best Practices Best Practices eslint", + "no-ex-assign javascript Possible Errors Possible Errors eslint", + "no-extra-boolean-cast javascript Possible Errors Possible Errors eslint", + "no-extra-semi javascript Possible Errors Possible Errors eslint", + "no-fallthrough javascript Best Practices Best Practices eslint", + "no-func-assign javascript Possible Errors Possible Errors eslint", + "no-global-assign javascript Best Practices Best Practices eslint", + "no-inner-declarations javascript Possible Errors Possible Errors eslint", + "no-invalid-regexp javascript Possible Errors Possible Errors eslint", + "no-irregular-whitespace javascript Possible Errors Possible Errors eslint", + "no-misleading-character-class javascript Possible Errors Possible Errors eslint", + "no-mixed-spaces-and-tabs javascript Stylistic Issues Stylistic Issues eslint", + "no-new-symbol javascript ECMAScript 6 ECMAScript 6 eslint", + "no-obj-calls javascript Possible Errors Possible Errors eslint", + "no-octal javascript Best Practices Best Practices eslint", + "no-prototype-builtins javascript Possible Errors Possible Errors eslint", + "no-redeclare javascript Best Practices Best Practices eslint", + "no-regex-spaces javascript Possible Errors Possible Errors eslint", + "no-self-assign javascript Best Practices Best Practices eslint", + "no-shadow-restricted-names javascript Variables Variables eslint", + "no-sparse-arrays javascript Possible Errors Possible Errors eslint", + "no-this-before-super javascript ECMAScript 6 ECMAScript 6 eslint", + "no-undef javascript Variables Variables eslint", + "no-unexpected-multiline javascript Possible Errors Possible Errors eslint", + "no-unreachable javascript Possible Errors Possible Errors eslint", + "no-unsafe-finally javascript Possible Errors Possible Errors eslint", + "no-unsafe-negation javascript Possible Errors Possible Errors eslint", + "no-unused-labels javascript Best Practices Best Practices eslint", + "no-unused-vars javascript Variables Variables eslint", + "no-useless-catch javascript Best Practices Best Practices eslint", + "no-useless-escape javascript Best Practices Best Practices eslint", + "no-with javascript Best Practices Best Practices eslint", + "require-yield javascript ECMAScript 6 ECMAScript 6 eslint", + "use-isnan javascript Possible Errors Possible Errors eslint", + "valid-typeof javascript Possible Errors Possible Errors eslint", + "constructor-super typescript ECMAScript 6 ECMAScript 6 eslint-typescript", + "for-direction typescript Possible Errors Possible Errors eslint-typescript", + "no-async-promise-executor typescript Possible Errors Possible Errors eslint-typescript", + "no-case-declarations typescript Best Practices Best Practices eslint-typescript", + "no-class-assign typescript ECMAScript 6 ECMAScript 6 eslint-typescript", + "no-compare-neg-zero typescript Possible Errors Possible Errors eslint-typescript", + "no-cond-assign typescript Possible Errors Possible Errors eslint-typescript", + "no-constant-condition typescript Possible Errors Possible Errors eslint-typescript", + "no-control-regex typescript Possible Errors Possible Errors eslint-typescript", + "no-debugger typescript Possible Errors Possible Errors eslint-typescript", + "no-delete-var typescript Variables Variables eslint-typescript", + "no-duplicate-case typescript Possible Errors Possible Errors eslint-typescript", + "no-empty typescript Possible Errors Possible Errors eslint-typescript", + "no-empty-character-class typescript Possible Errors Possible Errors eslint-typescript", + "no-empty-pattern typescript Best Practices Best Practices eslint-typescript", + "no-ex-assign typescript Possible Errors Possible Errors eslint-typescript", + "no-extra-boolean-cast typescript Possible Errors Possible Errors eslint-typescript", + "no-fallthrough typescript Best Practices Best Practices eslint-typescript", + "no-func-assign typescript Possible Errors Possible Errors eslint-typescript", + "no-global-assign typescript Best Practices Best Practices eslint-typescript", + "no-inner-declarations typescript Possible Errors Possible Errors eslint-typescript", + "no-invalid-regexp typescript Possible Errors Possible Errors eslint-typescript", + "no-irregular-whitespace typescript Possible Errors Possible Errors eslint-typescript", + "no-misleading-character-class typescript Possible Errors Possible Errors eslint-typescript", + "no-mixed-spaces-and-tabs typescript Stylistic Issues Stylistic Issues eslint-typescript", + "no-obj-calls typescript Possible Errors Possible Errors eslint-typescript", + "no-octal typescript Best Practices Best Practices eslint-typescript", + "no-prototype-builtins typescript Possible Errors Possible Errors eslint-typescript", + "no-regex-spaces typescript Possible Errors Possible Errors eslint-typescript", + "no-self-assign typescript Best Practices Best Practices eslint-typescript", + "no-shadow-restricted-names typescript Variables Variables eslint-typescript", + "no-sparse-arrays typescript Possible Errors Possible Errors eslint-typescript", + "no-unexpected-multiline typescript Possible Errors Possible Errors eslint-typescript", + "no-unsafe-finally typescript Possible Errors Possible Errors eslint-typescript", + "no-unsafe-negation typescript Possible Errors Possible Errors eslint-typescript", + "no-unused-labels typescript Best Practices Best Practices eslint-typescript", + "no-useless-catch typescript Best Practices Best Practices eslint-typescript", + "no-useless-escape typescript Best Practices Best Practices eslint-typescript", + "no-var typescript ECMAScript 6 ECMAScript 6 eslint-typescript", + "no-with typescript Best Practices Best Practices eslint-typescript", + "prefer-const typescript ECMAScript 6 ECMAScript 6 eslint-typescript", + "prefer-rest-params typescript ECMAScript 6 ECMAScript 6 eslint-typescript", + "prefer-spread typescript ECMAScript 6 ECMAScript 6 eslint-typescript", + "require-yield typescript ECMAScript 6 ECMAScript 6 eslint-typescript", + "use-isnan typescript Possible Errors Possible Errors eslint-typescript", + "@typescript-eslint/adjacent-overload-signatures typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/await-thenable typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/ban-types typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/consistent-type-assertions typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/explicit-function-return-type typescript Stylistic Issues Stylistic Issues eslint-typescript", + "@typescript-eslint/member-delimiter-style typescript Stylistic Issues Stylistic Issues eslint-typescript", + "@typescript-eslint/no-array-constructor typescript Stylistic Issues Stylistic Issues eslint-typescript", + "@typescript-eslint/no-empty-function typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/no-empty-interface typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/no-explicit-any typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/no-for-in-array typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/no-inferrable-types typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/no-misused-new typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/no-misused-promises typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/no-namespace typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/no-non-null-assertion typescript Stylistic Issues Stylistic Issues eslint-typescript", + "@typescript-eslint/no-this-alias typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/no-unnecessary-type-assertion typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/no-unused-vars typescript Variables Variables eslint-typescript", + "@typescript-eslint/no-use-before-define typescript Variables Variables eslint-typescript", + "@typescript-eslint/no-var-requires typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/prefer-includes typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/prefer-namespace-keyword typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/prefer-regexp-exec typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/prefer-string-starts-ends-with typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/require-await typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/triple-slash-reference typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/type-annotation-spacing typescript Stylistic Issues Stylistic Issues eslint-typescript", + "@typescript-eslint/unbound-method typescript Best Practices Best Practices eslint-typescript" ], "sfdx-scanner-lwc": [ - " \u203a Error: Command scanner:run not found.", - " \u203a Warning: scanner:rule:list is not a sfdx command.", - "Did you mean force:auth:list? [y/n]:" + "evaluate a selection of rules against a codebase", + "", + "USAGE", + " $ sfdx scanner:run -t [-c ] [-r ] [-e ]", + " [-f csv|html|json|junit|sarif|table|xml] [-o ] [--tsconfig ]", + " [--eslintconfig ] [--pmdconfig ] [--env ] [-s", + " | undefined | [-v | --json]] [--normalize-severity] [--verbose]", + " [--loglevel", + " trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL]", + "", + "FLAGS", + " -c, --category=", + " categor(ies) of rules to run", + "", + " -e, --engine=", + " engine(s) to run", + "", + " -f, --format=(csv|html|json|junit|sarif|table|xml)", + " format of results", + "", + " -o, --outfile=", + " location of output file", + "", + " -r, --ruleset=", + " [deprecated] ruleset(s) of rules to run", + "", + " -s, --severity-threshold=", + " throws an error when violations of specific severity (or more severe) are", + " detected, invokes --normalize-severity", + "", + " -t, --target=", + " (required) location of source code", + "", + " -v, --violations-cause-error", + " [deprecated] throws an error when violations are detected", + "", + " --env=", + " JSON-formatted string, overrides ESLint's default environment variables", + "", + " --eslintconfig=", + " location of eslintrc config to customize eslint engine", + "", + " --json", + " format output as json", + "", + " --loglevel=(trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATA", + " L)", + " [default: warn] logging level for this command invocation", + "", + " --normalize-severity", + " A normalized severity 1 (high), 2 (moderate), and 3 (low) is returned in", + " addition to the engine specific severity", + "", + " --pmdconfig=", + " location of PMD rule reference XML file to customize rule selection", + "", + " --tsconfig=", + " location of tsconfig.json file", + "", + " --verbose", + " emit additional command output to stdout", + "", + "DESCRIPTION", + " evaluate a selection of rules against a codebase", + "", + "EXAMPLES", + " Invoking without specifying any rules causes all rules to be run.", + " E.g., $ sfdx scanner:run --format xml --target \"somefile.js\"", + " Evaluates all rules against somefile.js.", + " Specifying multiple categories is treated as a logical OR.", + " E.g., $ sfdx scanner:run --format xml --target \"somefile.js\" --category \"Design,Best Practices\"", + " Evaluates all rules in the Design or Best Practices categories.", + " Categories can be excluded by specifying the negation operator, the values must be enclosed in single quotes.", + " E.g., $ sfdx scanner:run --format xml --target \"somefile.js\" --category '!Design,!Best Practices'", + " Evaluates all rules except those in the Design or Best Practices categories.", + " Wrap globs in quotes.", + " Unix example: $ sfdx scanner:run --target './**/*.js,!./**/IgnoreMe.js' ...", + " Windows example: > sfdx scanner:run --target \".\\**\\*.js,!.\\**\\IgnoreMe.js\" ...", + " Evaluate rules against all .js files below the current directory, except for IgnoreMe.js.", + " Specify tsconfig.json if the current working directory does not contain the tsconfig.json that corresponds to the TypeScript files being scanned.", + " E.g., sfdx scanner:run --target \"/my-project/**/*.ts\" --tsconfig \"/my-project/tsconfig.json\"", + " Scans the project contained in '/my-project' if the current working directory is another directory.", + " Use --env to override the default ESLint environment variables to add frameworks.", + " E.g., $ sfdx scanner:run --target \"somefile.js\" --env '{\"jasmine\": true}'", + " Evaluates rules against somefile.js, including Jasmine in the environment variables.", + " Use --violations-cause-error to throw exit with a non-zero code when violations are found.", + " E.g., $ sfdx scanner:run --target \"somefile.js\" --violations-cause-error", + " Evaluates rules against somefile.js. If any rules are violated, the exit code will be the severity of the most severe violation.", + " Use --engine to include or exclude engines. Any engine listed will be run, regardless of its current 'disabled' attribute.", + " E.g., $ sfdx scanner:run --target \"somefile.js\" --engine \"eslint-lwc,pmd\"", + " Evaluates rules against somefile.js, using eslint-lwc and pmd engines.", + " Use --engine to invoke engines that are not enabled by default.", + " E.g, $ sfdx scanner:run --target \"/some/dir\" --engine cpd", + " Executes CPD engine against known file extensions in \"/some/dir\". CPD helps detect blocks of code duplication in selected languages.", + " To use PMD with your own rule reference file, use --pmdconfig. Note that rule filters are not applied.", + " E.g, $ sfdx scanner:run --target \"src\" --pmdconfig \"pmd_rule_ref.xml\"", + " To use Eslint with your own .eslintrc.json file, use --eslintconfig. Make sure that the directory you run the command from has all the NPM dependencies installed.", + " E.g., $ sfdx scanner:run --target \"src\" --eslintconfig \"/home/my/setup/.eslintrc.json\"", + " Use --normalize-severity to output a normalized (across all engines) severity (1 [high], 2 [moderate], and 3 [low]) in addition to the engine specific severity (when shown).", + " E.g., $ sfdx scanner:run --target \"/some-project/\" --format csv --normalize-severity", + " Use --severity-threshold to throw a non-zero exit code when rule violations of a specific severity (or greater) are found. For this example, if there are any rule violations with a severity of 2 or more (which includes 1-high and 2-moderate), the exit code will be equal to the severity of the most severe violation.", + " E.g., $ sfdx scanner:run --target \"/some-project/\" --severity-threshold 2", + "", + "", + "WARNING: We're constantly improving Salesforce Code Analyzer. Tell us what you think! Give feedback at https://research.net/r/SalesforceCA.", + "WARNING: v2.x's End Of Life is approaching.", + " In October 2022, v3.x of the Salesforce Code Analyzer will become the default version,", + " and older versions, including your currently installed version, will no longer be supported.", + " You can manually update to v3.x earlier for a smoother transition.", + "WARNING: As of April 27, 2022, v3.x of the Salesforce Code Analyzer is available as an open pilot.", + " To update to v3.x and try out our pilot features, run these commands:", + " > sfdx plugins:uninstall @salesforce/sfdx-scanner", + " > sfdx plugins:install @salesforce/sfdx-scanner@latest-pilot", + "NAME LANGUAGES CATEGORIES RULESETS [DEP] ENGINE", + "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500", + "VfCsrf visualforce Security Basic VF pmd", + "VfHtmlStyleTagXss visualforce Security pmd", + "VfUnescapeEl visualforce Security Basic VF pmd", + "ApexAssertionsShouldIncludeMessage apex Best Practices pmd", + "ApexUnitTestClassShouldHaveAsserts apex Best Practices quickstart,Default ruleset...,ApexUnit pmd", + "ApexUnitTestMethodShouldHaveIsTestAnnotation apex Best Practices pmd", + "ApexUnitTestShouldNotUseSeeAllDataTrue apex Best Practices quickstart,Default ruleset...,ApexUnit pmd", + "AvoidGlobalModifier apex Best Practices Style,quickstart,Default ruleset... pmd", + "AvoidLogicInTrigger apex Best Practices Style,quickstart,Default ruleset... pmd", + "DebugsShouldUseLoggingLevel apex Best Practices quickstart pmd", + "UnusedLocalVariable apex Best Practices pmd", + "AvoidDebugStatements apex Performance pmd", + "AvoidDmlStatementsInLoops apex Performance Default ruleset...,Performance pmd", + "AvoidSoqlInLoops apex Performance Default ruleset...,Performance pmd", + "AvoidSoslInLoops apex Performance Default ruleset...,Performance pmd", + "EagerlyLoadedDescribeSObjectResult apex Performance pmd", + "OperationWithLimitsInLoop apex Performance quickstart pmd", + "ApexBadCrypto apex Security Security,quickstart,Default ruleset... pmd", + "ApexCRUDViolation apex Security Security,quickstart,Default ruleset... pmd", + "ApexCSRF apex Security Security pmd", + "ApexDangerousMethods apex Security Security,quickstart,Default ruleset... pmd", + "ApexInsecureEndpoint apex Security Security,quickstart,Default ruleset... pmd", + "ApexOpenRedirect apex Security Security,quickstart,Default ruleset... pmd", + "ApexSharingViolations apex Security Security,quickstart,Default ruleset... pmd", + "ApexSOQLInjection apex Security Security,quickstart,Default ruleset... pmd", + "ApexSuggestUsingNamedCred apex Security Security,quickstart,Default ruleset... pmd", + "ApexXSSFromEscapeFalse apex Security Security,quickstart,Default ruleset... pmd", + "ApexXSSFromURLParam apex Security Security,quickstart,Default ruleset... pmd", + "ClassNamingConventions apex Code Style Style,quickstart,Default ruleset... pmd", + "IfElseStmtsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd", + "IfStmtsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd", + "FieldDeclarationsShouldBeAtStart apex Code Style pmd", + "FieldNamingConventions apex Code Style quickstart pmd", + "ForLoopsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd", + "FormalParameterNamingConventions apex Code Style quickstart pmd", + "LocalVariableNamingConventions apex Code Style quickstart pmd", + "MethodNamingConventions apex Code Style Style,quickstart,Default ruleset... pmd", + "OneDeclarationPerLine apex Code Style quickstart,Default ruleset... pmd", + "PropertyNamingConventions apex Code Style quickstart pmd", + "VariableNamingConventions apex Code Style Style,Default ruleset... pmd", + "WhileLoopsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd", + "AvoidDeeplyNestedIfStmts apex Design quickstart,Default ruleset...,Complexity pmd", + "CyclomaticComplexity apex Design Metrics tempora...,quickstart,Default ruleset... pmd", + "CognitiveComplexity apex Design pmd", + "ExcessiveClassLength apex Design quickstart,Default ruleset...,Complexity pmd", + "ExcessiveParameterList apex Design quickstart,Default ruleset...,Complexity pmd", + "ExcessivePublicCount apex Design quickstart,Default ruleset...,Complexity pmd", + "NcssConstructorCount apex Design quickstart,Default ruleset...,Complexity pmd", + "NcssMethodCount apex Design quickstart,Default ruleset...,Complexity pmd", + "NcssTypeCount apex Design quickstart,Default ruleset...,Complexity pmd", + "StdCyclomaticComplexity apex Design quickstart,Default ruleset...,Complexity pmd", + "TooManyFields apex Design quickstart,Default ruleset...,Complexity pmd", + "ApexDoc apex Documentation quickstart,Default ruleset... pmd", + "ApexCSRF apex Error Prone quickstart,Default ruleset... pmd", + "AvoidDirectAccessTriggerMap apex Error Prone Style,quickstart,Default ruleset... pmd", + "AvoidHardcodingId apex Error Prone Style,quickstart,Default ruleset... pmd", + "AvoidNonExistentAnnotations apex Error Prone quickstart,Default ruleset... pmd", + "EmptyCatchBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd", + "EmptyIfStmt apex Error Prone quickstart,Default ruleset...,Empty Code pmd", + "EmptyStatementBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd", + "EmptyTryOrFinallyBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd", + "EmptyWhileStmt apex Error Prone quickstart,Default ruleset...,Empty Code pmd", + "InaccessibleAuraEnabledGetter apex Error Prone pmd", + "MethodWithSameNameAsEnclosingClass apex Error Prone Style,quickstart,Default ruleset... pmd", + "OverrideBothEqualsAndHashcode apex Error Prone pmd", + "TestMethodsMustBeInTestClasses apex Error Prone pmd", + "constructor-super javascript ECMAScript 6 ECMAScript 6 eslint", + "for-direction javascript Possible Errors Possible Errors eslint", + "getter-return javascript Possible Errors Possible Errors eslint", + "no-async-promise-executor javascript Possible Errors Possible Errors eslint", + "no-case-declarations javascript Best Practices Best Practices eslint", + "no-class-assign javascript ECMAScript 6 ECMAScript 6 eslint", + "no-compare-neg-zero javascript Possible Errors Possible Errors eslint", + "no-cond-assign javascript Possible Errors Possible Errors eslint", + "no-const-assign javascript ECMAScript 6 ECMAScript 6 eslint", + "no-constant-condition javascript Possible Errors Possible Errors eslint", + "no-control-regex javascript Possible Errors Possible Errors eslint", + "no-debugger javascript Possible Errors Possible Errors eslint", + "no-delete-var javascript Variables Variables eslint", + "no-dupe-args javascript Possible Errors Possible Errors eslint", + "no-dupe-class-members javascript ECMAScript 6 ECMAScript 6 eslint", + "no-dupe-keys javascript Possible Errors Possible Errors eslint", + "no-duplicate-case javascript Possible Errors Possible Errors eslint", + "no-empty javascript Possible Errors Possible Errors eslint", + "no-empty-character-class javascript Possible Errors Possible Errors eslint", + "no-empty-pattern javascript Best Practices Best Practices eslint", + "no-ex-assign javascript Possible Errors Possible Errors eslint", + "no-extra-boolean-cast javascript Possible Errors Possible Errors eslint", + "no-extra-semi javascript Possible Errors Possible Errors eslint", + "no-fallthrough javascript Best Practices Best Practices eslint", + "no-func-assign javascript Possible Errors Possible Errors eslint", + "no-global-assign javascript Best Practices Best Practices eslint", + "no-inner-declarations javascript Possible Errors Possible Errors eslint", + "no-invalid-regexp javascript Possible Errors Possible Errors eslint", + "no-irregular-whitespace javascript Possible Errors Possible Errors eslint", + "no-misleading-character-class javascript Possible Errors Possible Errors eslint", + "no-mixed-spaces-and-tabs javascript Stylistic Issues Stylistic Issues eslint", + "no-new-symbol javascript ECMAScript 6 ECMAScript 6 eslint", + "no-obj-calls javascript Possible Errors Possible Errors eslint", + "no-octal javascript Best Practices Best Practices eslint", + "no-prototype-builtins javascript Possible Errors Possible Errors eslint", + "no-redeclare javascript Best Practices Best Practices eslint", + "no-regex-spaces javascript Possible Errors Possible Errors eslint", + "no-self-assign javascript Best Practices Best Practices eslint", + "no-shadow-restricted-names javascript Variables Variables eslint", + "no-sparse-arrays javascript Possible Errors Possible Errors eslint", + "no-this-before-super javascript ECMAScript 6 ECMAScript 6 eslint", + "no-undef javascript Variables Variables eslint", + "no-unexpected-multiline javascript Possible Errors Possible Errors eslint", + "no-unreachable javascript Possible Errors Possible Errors eslint", + "no-unsafe-finally javascript Possible Errors Possible Errors eslint", + "no-unsafe-negation javascript Possible Errors Possible Errors eslint", + "no-unused-labels javascript Best Practices Best Practices eslint", + "no-unused-vars javascript Variables Variables eslint", + "no-useless-catch javascript Best Practices Best Practices eslint", + "no-useless-escape javascript Best Practices Best Practices eslint", + "no-with javascript Best Practices Best Practices eslint", + "require-yield javascript ECMAScript 6 ECMAScript 6 eslint", + "use-isnan javascript Possible Errors Possible Errors eslint", + "valid-typeof javascript Possible Errors Possible Errors eslint", + "constructor-super typescript ECMAScript 6 ECMAScript 6 eslint-typescript", + "for-direction typescript Possible Errors Possible Errors eslint-typescript", + "no-async-promise-executor typescript Possible Errors Possible Errors eslint-typescript", + "no-case-declarations typescript Best Practices Best Practices eslint-typescript", + "no-class-assign typescript ECMAScript 6 ECMAScript 6 eslint-typescript", + "no-compare-neg-zero typescript Possible Errors Possible Errors eslint-typescript", + "no-cond-assign typescript Possible Errors Possible Errors eslint-typescript", + "no-constant-condition typescript Possible Errors Possible Errors eslint-typescript", + "no-control-regex typescript Possible Errors Possible Errors eslint-typescript", + "no-debugger typescript Possible Errors Possible Errors eslint-typescript", + "no-delete-var typescript Variables Variables eslint-typescript", + "no-duplicate-case typescript Possible Errors Possible Errors eslint-typescript", + "no-empty typescript Possible Errors Possible Errors eslint-typescript", + "no-empty-character-class typescript Possible Errors Possible Errors eslint-typescript", + "no-empty-pattern typescript Best Practices Best Practices eslint-typescript", + "no-ex-assign typescript Possible Errors Possible Errors eslint-typescript", + "no-extra-boolean-cast typescript Possible Errors Possible Errors eslint-typescript", + "no-fallthrough typescript Best Practices Best Practices eslint-typescript", + "no-func-assign typescript Possible Errors Possible Errors eslint-typescript", + "no-global-assign typescript Best Practices Best Practices eslint-typescript", + "no-inner-declarations typescript Possible Errors Possible Errors eslint-typescript", + "no-invalid-regexp typescript Possible Errors Possible Errors eslint-typescript", + "no-irregular-whitespace typescript Possible Errors Possible Errors eslint-typescript", + "no-misleading-character-class typescript Possible Errors Possible Errors eslint-typescript", + "no-mixed-spaces-and-tabs typescript Stylistic Issues Stylistic Issues eslint-typescript", + "no-obj-calls typescript Possible Errors Possible Errors eslint-typescript", + "no-octal typescript Best Practices Best Practices eslint-typescript", + "no-prototype-builtins typescript Possible Errors Possible Errors eslint-typescript", + "no-regex-spaces typescript Possible Errors Possible Errors eslint-typescript", + "no-self-assign typescript Best Practices Best Practices eslint-typescript", + "no-shadow-restricted-names typescript Variables Variables eslint-typescript", + "no-sparse-arrays typescript Possible Errors Possible Errors eslint-typescript", + "no-unexpected-multiline typescript Possible Errors Possible Errors eslint-typescript", + "no-unsafe-finally typescript Possible Errors Possible Errors eslint-typescript", + "no-unsafe-negation typescript Possible Errors Possible Errors eslint-typescript", + "no-unused-labels typescript Best Practices Best Practices eslint-typescript", + "no-useless-catch typescript Best Practices Best Practices eslint-typescript", + "no-useless-escape typescript Best Practices Best Practices eslint-typescript", + "no-var typescript ECMAScript 6 ECMAScript 6 eslint-typescript", + "no-with typescript Best Practices Best Practices eslint-typescript", + "prefer-const typescript ECMAScript 6 ECMAScript 6 eslint-typescript", + "prefer-rest-params typescript ECMAScript 6 ECMAScript 6 eslint-typescript", + "prefer-spread typescript ECMAScript 6 ECMAScript 6 eslint-typescript", + "require-yield typescript ECMAScript 6 ECMAScript 6 eslint-typescript", + "use-isnan typescript Possible Errors Possible Errors eslint-typescript", + "@typescript-eslint/adjacent-overload-signatures typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/await-thenable typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/ban-types typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/consistent-type-assertions typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/explicit-function-return-type typescript Stylistic Issues Stylistic Issues eslint-typescript", + "@typescript-eslint/member-delimiter-style typescript Stylistic Issues Stylistic Issues eslint-typescript", + "@typescript-eslint/no-array-constructor typescript Stylistic Issues Stylistic Issues eslint-typescript", + "@typescript-eslint/no-empty-function typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/no-empty-interface typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/no-explicit-any typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/no-for-in-array typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/no-inferrable-types typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/no-misused-new typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/no-misused-promises typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/no-namespace typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/no-non-null-assertion typescript Stylistic Issues Stylistic Issues eslint-typescript", + "@typescript-eslint/no-this-alias typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/no-unnecessary-type-assertion typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/no-unused-vars typescript Variables Variables eslint-typescript", + "@typescript-eslint/no-use-before-define typescript Variables Variables eslint-typescript", + "@typescript-eslint/no-var-requires typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/prefer-includes typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/prefer-namespace-keyword typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/prefer-regexp-exec typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/prefer-string-starts-ends-with typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/require-await typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/triple-slash-reference typescript Best Practices Best Practices eslint-typescript", + "@typescript-eslint/type-annotation-spacing typescript Stylistic Issues Stylistic Issues eslint-typescript", + "@typescript-eslint/unbound-method typescript Best Practices Best Practices eslint-typescript" ], "shellcheck": [ "Usage: shellcheck [OPTIONS...] FILES...", diff --git a/.automation/generated/linter-versions.json b/.automation/generated/linter-versions.json index d881fc04800..6c7f1b7f680 100644 --- a/.automation/generated/linter-versions.json +++ b/.automation/generated/linter-versions.json @@ -30,7 +30,7 @@ "gherkin-lint": "0.0.0", "git_diff": "2.34.5", "gitleaks": "8.14.1", - "golangci-lint": "1.50.0", + "golangci-lint": "1.50.1", "goodcheck": "3.1.0", "graphql-schema-linter": "3.0.1", "hadolint": "2.10.0", diff --git a/.automation/generated/megalinter-users.json b/.automation/generated/megalinter-users.json index 48c4964c6f3..00294bfdfab 100644 --- a/.automation/generated/megalinter-users.json +++ b/.automation/generated/megalinter-users.json @@ -804,8 +804,8 @@ "network_count": 131, "node_id": "MDEwOlJlcG9zaXRvcnkzMDQ4MzAyMjY=", "notifications_url": "https://api.github.com/repos/oxsecurity/megalinter/notifications{?since,all,participating}", - "open_issues": 50, - "open_issues_count": 50, + "open_issues": 49, + "open_issues_count": 49, "organization": { "avatar_url": "https://avatars.githubusercontent.com/u/89921661?v=4", "events_url": "https://api.github.com/users/oxsecurity/events{/privacy}", @@ -848,9 +848,9 @@ }, "private": false, "pulls_url": "https://api.github.com/repos/oxsecurity/megalinter/pulls{/number}", - "pushed_at": "2022-10-22T10:15:30Z", + "pushed_at": "2022-10-22T11:12:36Z", "releases_url": "https://api.github.com/repos/oxsecurity/megalinter/releases{/id}", - "size": 260032, + "size": 263465, "ssh_url": "git@github.com:oxsecurity/megalinter.git", "stargazers_count": 891, "stargazers_url": "https://api.github.com/repos/oxsecurity/megalinter/stargazers", @@ -2056,8 +2056,8 @@ "downloads_url": "https://api.github.com/repos/ruzickap/packer-templates/downloads", "events_url": "https://api.github.com/repos/ruzickap/packer-templates/events", "fork": false, - "forks": 99, - "forks_count": 99, + "forks": 98, + "forks_count": 98, "forks_url": "https://api.github.com/repos/ruzickap/packer-templates/forks", "full_name": "ruzickap/packer-templates", "git_commits_url": "https://api.github.com/repos/ruzickap/packer-templates/git/commits{/sha}", @@ -2092,7 +2092,7 @@ "milestones_url": "https://api.github.com/repos/ruzickap/packer-templates/milestones{/number}", "mirror_url": null, "name": "packer-templates", - "network_count": 99, + "network_count": 98, "node_id": "MDEwOlJlcG9zaXRvcnk2MjAyNjA3NQ==", "notifications_url": "https://api.github.com/repos/ruzickap/packer-templates/notifications{?since,all,participating}", "open_issues": 3, @@ -3774,7 +3774,7 @@ "releases_url": "https://api.github.com/repos/cbg-ethz/V-pipe/releases{/id}", "size": 13147, "ssh_url": "git@github.com:cbg-ethz/V-pipe.git", - "stargazers_count": 94, + "stargazers_count": 95, "stargazers_url": "https://api.github.com/repos/cbg-ethz/V-pipe/stargazers", "statuses_url": "https://api.github.com/repos/cbg-ethz/V-pipe/statuses/{sha}", "subscribers_count": 6, @@ -3801,15 +3801,15 @@ "virus" ], "trees_url": "https://api.github.com/repos/cbg-ethz/V-pipe/git/trees{/sha}", - "updated_at": "2022-10-10T13:31:13Z", + "updated_at": "2022-10-22T11:35:17Z", "url": "https://api.github.com/repos/cbg-ethz/V-pipe", "visibility": "public", - "watchers": 94, - "watchers_count": 94, + "watchers": 95, + "watchers_count": 95, "web_commit_signoff_required": false }, "repo_url": "https://github.com/cbg-ethz/V-pipe", - "stargazers": 94 + "stargazers": 95 }, { "info": { diff --git a/CHANGELOG.md b/CHANGELOG.md index d113c641a6c..57a8fb7d657 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ Note: Can be used with `oxsecurity/megalinter@beta` in your GitHub Action mega-l - [snakemake](https://snakemake.readthedocs.io/en/stable/) from 7.16.0 to **7.16.1** on 2022-10-22 - [terraform-fmt](https://www.terraform.io/docs/cli/commands/fmt.html) from 1.3.2 to **1.3.3** on 2022-10-22 - [terrascan](https://www.accurics.com/products/terrascan/) from 1.15.2 to **1.16.0** on 2022-10-22 + - [golangci-lint](https://golangci-lint.run/) from 1.50.0 to **1.50.1** on 2022-10-22 ## [v6.12.0] - 2022-10-16 diff --git a/docs/all_linters.md b/docs/all_linters.md index 1be6fb0cac5..6f1652806f8 100644 --- a/docs/all_linters.md +++ b/docs/all_linters.md @@ -35,7 +35,7 @@ | [**gherkin-lint**](https://github.com/vsiakka/gherkin-lint){target=_blank} | N/A | [ISC](licenses/gherkin-lint.md) | [![GitHub stars](https://img.shields.io/github/stars/vsiakka/gherkin-lint?cacheSeconds=3600)](https://github.com/vsiakka/gherkin-lint){target=_blank} | [GHERKIN](descriptors/gherkin_gherkin_lint.md) | :white_circle: | [Repository](https://github.com/vsiakka/gherkin-lint){target=_blank} | | [**git_diff**](https://github.com/git/git){target=_blank} | 2.34.5 | [LGPL-2.1](licenses/git_diff.md) | [![GitHub stars](https://img.shields.io/github/stars/git/git?cacheSeconds=3600)](https://github.com/git/git){target=_blank} | [REPOSITORY](descriptors/repository_git_diff.md) | | [Repository](https://github.com/git/git){target=_blank} | | [**gitleaks**](https://github.com/zricethezav/gitleaks){target=_blank} | 8.14.1 | [MIT](licenses/gitleaks.md) | [![GitHub stars](https://img.shields.io/github/stars/zricethezav/gitleaks?cacheSeconds=3600)](https://github.com/zricethezav/gitleaks){target=_blank} | [REPOSITORY](descriptors/repository_gitleaks.md) | :white_circle: | [Repository](https://github.com/zricethezav/gitleaks){target=_blank} | -| [**golangci-lint**](https://github.com/golangci/golangci-lint){target=_blank} | 1.50.0 | [GPL-3.0](licenses/golangci-lint.md) | [![GitHub stars](https://img.shields.io/github/stars/golangci/golangci-lint?cacheSeconds=3600)](https://github.com/golangci/golangci-lint){target=_blank} | [GO](descriptors/go_golangci_lint.md) | :white_circle: | [Repository](https://github.com/golangci/golangci-lint){target=_blank} | +| [**golangci-lint**](https://github.com/golangci/golangci-lint){target=_blank} | 1.50.1 | [GPL-3.0](licenses/golangci-lint.md) | [![GitHub stars](https://img.shields.io/github/stars/golangci/golangci-lint?cacheSeconds=3600)](https://github.com/golangci/golangci-lint){target=_blank} | [GO](descriptors/go_golangci_lint.md) | :white_circle: | [Repository](https://github.com/golangci/golangci-lint){target=_blank} | | [**goodcheck**](https://github.com/sider/goodcheck){target=_blank} | 3.1.0 | [MIT](licenses/goodcheck.md) | [![GitHub stars](https://img.shields.io/github/stars/sider/goodcheck?cacheSeconds=3600)](https://github.com/sider/goodcheck){target=_blank} | [REPOSITORY](descriptors/repository_goodcheck.md) | :white_circle: | [Repository](https://github.com/sider/goodcheck){target=_blank} | | [**graphql-schema-linter**](https://github.com/cjoudrey/graphql-schema-linter){target=_blank} | 3.0.1 | [MIT](licenses/graphql-schema-linter.md) | [![GitHub stars](https://img.shields.io/github/stars/cjoudrey/graphql-schema-linter?cacheSeconds=3600)](https://github.com/cjoudrey/graphql-schema-linter){target=_blank} | [GRAPHQL](descriptors/graphql_graphql_schema_linter.md) | :hammer_and_wrench: | [Pull Request](https://github.com/cjoudrey/graphql-schema-linter/pull/272){target=_blank} | | [**hadolint**](https://github.com/hadolint/hadolint){target=_blank} | 2.10.0 | [GPL-3.0](licenses/hadolint.md) | [![GitHub stars](https://img.shields.io/github/stars/hadolint/hadolint?cacheSeconds=3600)](https://github.com/hadolint/hadolint){target=_blank} | [DOCKERFILE](descriptors/dockerfile_hadolint.md) | :heart: | [MegaLinter reference](https://github.com/hadolint/hadolint/blob/master/docs/INTEGRATION.md#mega-linter){target=_blank} | diff --git a/docs/descriptors/go_golangci_lint.md b/docs/descriptors/go_golangci_lint.md index 247a727f6e1..e53de72305d 100644 --- a/docs/descriptors/go_golangci_lint.md +++ b/docs/descriptors/go_golangci_lint.md @@ -11,7 +11,7 @@ ## golangci-lint documentation -- Version in MegaLinter: **1.50.0** +- Version in MegaLinter: **1.50.1** - Visit [Official Web Site](https://golangci-lint.run/){target=_blank} - See [How to configure golangci-lint rules](https://golangci-lint.run/usage/configuration/#config-file){target=_blank} - If custom `.golangci.yml` config file is not found, [.golangci.yml](https://github.com/oxsecurity/megalinter/tree/main/TEMPLATES/.golangci.yml){target=_blank} will be used diff --git a/docs/descriptors/python_black.md b/docs/descriptors/python_black.md index a3317be8bd9..373b321ea16 100644 --- a/docs/descriptors/python_black.md +++ b/docs/descriptors/python_black.md @@ -115,8 +115,8 @@ Options: input). --python-cell-magics TEXT When processing Jupyter Notebooks, add the given magic to the list of known python- - magics (timeit, capture, time, python3, - pypy, prun, python). Useful for formatting + magics (capture, time, python3, timeit, + python, prun, pypy). Useful for formatting cells with custom python magics. -x, --skip-source-first-line Skip the first line of the source code. -S, --skip-string-normalization diff --git a/docs/descriptors/repository_checkov.md b/docs/descriptors/repository_checkov.md index b4ca13342b4..f4b4c490bc8 100644 --- a/docs/descriptors/repository_checkov.md +++ b/docs/descriptors/repository_checkov.md @@ -124,7 +124,7 @@ usage: checkov [-h] [-v] [-d DIRECTORY] [--add-check] [-f FILE] [--secrets-scan-file-type SECRETS_SCAN_FILE_TYPE] [--enable-secret-scan-all-files] [--block-list-secret-scan BLOCK_LIST_SECRET_SCAN] - [--summary-position {top,bottom}] + [--summary-position {bottom,top}] [--skip-resources-without-violations] Infrastructure as code static analysis @@ -375,7 +375,7 @@ options: --block-list-secret-scan BLOCK_LIST_SECRET_SCAN List of files to filter out from the secret scanner [env var: CKV_SECRETS_SCAN_BLOCK_LIST] - --summary-position {top,bottom} + --summary-position {bottom,top} Chose whether the summary will be appended on top (before the checks results) or on bottom (after check results), default is on top. diff --git a/docs/descriptors/salesforce_sfdx_scanner_apex.md b/docs/descriptors/salesforce_sfdx_scanner_apex.md index f321455c746..d45badc00e5 100644 --- a/docs/descriptors/salesforce_sfdx_scanner_apex.md +++ b/docs/descriptors/salesforce_sfdx_scanner_apex.md @@ -85,9 +85,315 @@ sfdx scanner:run ### Help content ```shell - › Error: Command scanner:run not found. - › Warning: scanner:rule:list is not a sfdx command. -Did you mean force:auth:list? [y/n]: +evaluate a selection of rules against a codebase + +USAGE + $ sfdx scanner:run -t [-c ] [-r ] [-e ] + [-f csv|html|json|junit|sarif|table|xml] [-o ] [--tsconfig ] + [--eslintconfig ] [--pmdconfig ] [--env ] [-s + | undefined | [-v | --json]] [--normalize-severity] [--verbose] + [--loglevel + trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL] + +FLAGS + -c, --category= + categor(ies) of rules to run + + -e, --engine= + engine(s) to run + + -f, --format=(csv|html|json|junit|sarif|table|xml) + format of results + + -o, --outfile= + location of output file + + -r, --ruleset= + [deprecated] ruleset(s) of rules to run + + -s, --severity-threshold= + throws an error when violations of specific severity (or more severe) are + detected, invokes --normalize-severity + + -t, --target= + (required) location of source code + + -v, --violations-cause-error + [deprecated] throws an error when violations are detected + + --env= + JSON-formatted string, overrides ESLint's default environment variables + + --eslintconfig= + location of eslintrc config to customize eslint engine + + --json + format output as json + + --loglevel=(trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATA + L) + [default: warn] logging level for this command invocation + + --normalize-severity + A normalized severity 1 (high), 2 (moderate), and 3 (low) is returned in + addition to the engine specific severity + + --pmdconfig= + location of PMD rule reference XML file to customize rule selection + + --tsconfig= + location of tsconfig.json file + + --verbose + emit additional command output to stdout + +DESCRIPTION + evaluate a selection of rules against a codebase + +EXAMPLES + Invoking without specifying any rules causes all rules to be run. + E.g., $ sfdx scanner:run --format xml --target "somefile.js" + Evaluates all rules against somefile.js. + Specifying multiple categories is treated as a logical OR. + E.g., $ sfdx scanner:run --format xml --target "somefile.js" --category "Design,Best Practices" + Evaluates all rules in the Design or Best Practices categories. + Categories can be excluded by specifying the negation operator, the values must be enclosed in single quotes. + E.g., $ sfdx scanner:run --format xml --target "somefile.js" --category '!Design,!Best Practices' + Evaluates all rules except those in the Design or Best Practices categories. + Wrap globs in quotes. + Unix example: $ sfdx scanner:run --target './**/*.js,!./**/IgnoreMe.js' ... + Windows example: > sfdx scanner:run --target ".\**\*.js,!.\**\IgnoreMe.js" ... + Evaluate rules against all .js files below the current directory, except for IgnoreMe.js. + Specify tsconfig.json if the current working directory does not contain the tsconfig.json that corresponds to the TypeScript files being scanned. + E.g., sfdx scanner:run --target "/my-project/**/*.ts" --tsconfig "/my-project/tsconfig.json" + Scans the project contained in '/my-project' if the current working directory is another directory. + Use --env to override the default ESLint environment variables to add frameworks. + E.g., $ sfdx scanner:run --target "somefile.js" --env '{"jasmine": true}' + Evaluates rules against somefile.js, including Jasmine in the environment variables. + Use --violations-cause-error to throw exit with a non-zero code when violations are found. + E.g., $ sfdx scanner:run --target "somefile.js" --violations-cause-error + Evaluates rules against somefile.js. If any rules are violated, the exit code will be the severity of the most severe violation. + Use --engine to include or exclude engines. Any engine listed will be run, regardless of its current 'disabled' attribute. + E.g., $ sfdx scanner:run --target "somefile.js" --engine "eslint-lwc,pmd" + Evaluates rules against somefile.js, using eslint-lwc and pmd engines. + Use --engine to invoke engines that are not enabled by default. + E.g, $ sfdx scanner:run --target "/some/dir" --engine cpd + Executes CPD engine against known file extensions in "/some/dir". CPD helps detect blocks of code duplication in selected languages. + To use PMD with your own rule reference file, use --pmdconfig. Note that rule filters are not applied. + E.g, $ sfdx scanner:run --target "src" --pmdconfig "pmd_rule_ref.xml" + To use Eslint with your own .eslintrc.json file, use --eslintconfig. Make sure that the directory you run the command from has all the NPM dependencies installed. + E.g., $ sfdx scanner:run --target "src" --eslintconfig "/home/my/setup/.eslintrc.json" + Use --normalize-severity to output a normalized (across all engines) severity (1 [high], 2 [moderate], and 3 [low]) in addition to the engine specific severity (when shown). + E.g., $ sfdx scanner:run --target "/some-project/" --format csv --normalize-severity + Use --severity-threshold to throw a non-zero exit code when rule violations of a specific severity (or greater) are found. For this example, if there are any rule violations with a severity of 2 or more (which includes 1-high and 2-moderate), the exit code will be equal to the severity of the most severe violation. + E.g., $ sfdx scanner:run --target "/some-project/" --severity-threshold 2 + + +WARNING: We're constantly improving Salesforce Code Analyzer. Tell us what you think! Give feedback at https://research.net/r/SalesforceCA. +WARNING: v2.x's End Of Life is approaching. + In October 2022, v3.x of the Salesforce Code Analyzer will become the default version, + and older versions, including your currently installed version, will no longer be supported. + You can manually update to v3.x earlier for a smoother transition. +WARNING: As of April 27, 2022, v3.x of the Salesforce Code Analyzer is available as an open pilot. + To update to v3.x and try out our pilot features, run these commands: + > sfdx plugins:uninstall @salesforce/sfdx-scanner + > sfdx plugins:install @salesforce/sfdx-scanner@latest-pilot +NAME LANGUAGES CATEGORIES RULESETS [DEP] ENGINE +───────────────────────────────────────────────── ─────────── ──────────────── ──────────────────────────────────────────────── ───────────────── +VfCsrf visualforce Security Basic VF pmd +VfHtmlStyleTagXss visualforce Security pmd +VfUnescapeEl visualforce Security Basic VF pmd +ApexAssertionsShouldIncludeMessage apex Best Practices pmd +ApexUnitTestClassShouldHaveAsserts apex Best Practices quickstart,Default ruleset...,ApexUnit pmd +ApexUnitTestMethodShouldHaveIsTestAnnotation apex Best Practices pmd +ApexUnitTestShouldNotUseSeeAllDataTrue apex Best Practices quickstart,Default ruleset...,ApexUnit pmd +AvoidGlobalModifier apex Best Practices Style,quickstart,Default ruleset... pmd +AvoidLogicInTrigger apex Best Practices Style,quickstart,Default ruleset... pmd +DebugsShouldUseLoggingLevel apex Best Practices quickstart pmd +UnusedLocalVariable apex Best Practices pmd +AvoidDebugStatements apex Performance pmd +AvoidDmlStatementsInLoops apex Performance Default ruleset...,Performance pmd +AvoidSoqlInLoops apex Performance Default ruleset...,Performance pmd +AvoidSoslInLoops apex Performance Default ruleset...,Performance pmd +EagerlyLoadedDescribeSObjectResult apex Performance pmd +OperationWithLimitsInLoop apex Performance quickstart pmd +ApexBadCrypto apex Security Security,quickstart,Default ruleset... pmd +ApexCRUDViolation apex Security Security,quickstart,Default ruleset... pmd +ApexCSRF apex Security Security pmd +ApexDangerousMethods apex Security Security,quickstart,Default ruleset... pmd +ApexInsecureEndpoint apex Security Security,quickstart,Default ruleset... pmd +ApexOpenRedirect apex Security Security,quickstart,Default ruleset... pmd +ApexSharingViolations apex Security Security,quickstart,Default ruleset... pmd +ApexSOQLInjection apex Security Security,quickstart,Default ruleset... pmd +ApexSuggestUsingNamedCred apex Security Security,quickstart,Default ruleset... pmd +ApexXSSFromEscapeFalse apex Security Security,quickstart,Default ruleset... pmd +ApexXSSFromURLParam apex Security Security,quickstart,Default ruleset... pmd +ClassNamingConventions apex Code Style Style,quickstart,Default ruleset... pmd +IfElseStmtsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd +IfStmtsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd +FieldDeclarationsShouldBeAtStart apex Code Style pmd +FieldNamingConventions apex Code Style quickstart pmd +ForLoopsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd +FormalParameterNamingConventions apex Code Style quickstart pmd +LocalVariableNamingConventions apex Code Style quickstart pmd +MethodNamingConventions apex Code Style Style,quickstart,Default ruleset... pmd +OneDeclarationPerLine apex Code Style quickstart,Default ruleset... pmd +PropertyNamingConventions apex Code Style quickstart pmd +VariableNamingConventions apex Code Style Style,Default ruleset... pmd +WhileLoopsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd +AvoidDeeplyNestedIfStmts apex Design quickstart,Default ruleset...,Complexity pmd +CyclomaticComplexity apex Design Metrics tempora...,quickstart,Default ruleset... pmd +CognitiveComplexity apex Design pmd +ExcessiveClassLength apex Design quickstart,Default ruleset...,Complexity pmd +ExcessiveParameterList apex Design quickstart,Default ruleset...,Complexity pmd +ExcessivePublicCount apex Design quickstart,Default ruleset...,Complexity pmd +NcssConstructorCount apex Design quickstart,Default ruleset...,Complexity pmd +NcssMethodCount apex Design quickstart,Default ruleset...,Complexity pmd +NcssTypeCount apex Design quickstart,Default ruleset...,Complexity pmd +StdCyclomaticComplexity apex Design quickstart,Default ruleset...,Complexity pmd +TooManyFields apex Design quickstart,Default ruleset...,Complexity pmd +ApexDoc apex Documentation quickstart,Default ruleset... pmd +ApexCSRF apex Error Prone quickstart,Default ruleset... pmd +AvoidDirectAccessTriggerMap apex Error Prone Style,quickstart,Default ruleset... pmd +AvoidHardcodingId apex Error Prone Style,quickstart,Default ruleset... pmd +AvoidNonExistentAnnotations apex Error Prone quickstart,Default ruleset... pmd +EmptyCatchBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd +EmptyIfStmt apex Error Prone quickstart,Default ruleset...,Empty Code pmd +EmptyStatementBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd +EmptyTryOrFinallyBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd +EmptyWhileStmt apex Error Prone quickstart,Default ruleset...,Empty Code pmd +InaccessibleAuraEnabledGetter apex Error Prone pmd +MethodWithSameNameAsEnclosingClass apex Error Prone Style,quickstart,Default ruleset... pmd +OverrideBothEqualsAndHashcode apex Error Prone pmd +TestMethodsMustBeInTestClasses apex Error Prone pmd +constructor-super javascript ECMAScript 6 ECMAScript 6 eslint +for-direction javascript Possible Errors Possible Errors eslint +getter-return javascript Possible Errors Possible Errors eslint +no-async-promise-executor javascript Possible Errors Possible Errors eslint +no-case-declarations javascript Best Practices Best Practices eslint +no-class-assign javascript ECMAScript 6 ECMAScript 6 eslint +no-compare-neg-zero javascript Possible Errors Possible Errors eslint +no-cond-assign javascript Possible Errors Possible Errors eslint +no-const-assign javascript ECMAScript 6 ECMAScript 6 eslint +no-constant-condition javascript Possible Errors Possible Errors eslint +no-control-regex javascript Possible Errors Possible Errors eslint +no-debugger javascript Possible Errors Possible Errors eslint +no-delete-var javascript Variables Variables eslint +no-dupe-args javascript Possible Errors Possible Errors eslint +no-dupe-class-members javascript ECMAScript 6 ECMAScript 6 eslint +no-dupe-keys javascript Possible Errors Possible Errors eslint +no-duplicate-case javascript Possible Errors Possible Errors eslint +no-empty javascript Possible Errors Possible Errors eslint +no-empty-character-class javascript Possible Errors Possible Errors eslint +no-empty-pattern javascript Best Practices Best Practices eslint +no-ex-assign javascript Possible Errors Possible Errors eslint +no-extra-boolean-cast javascript Possible Errors Possible Errors eslint +no-extra-semi javascript Possible Errors Possible Errors eslint +no-fallthrough javascript Best Practices Best Practices eslint +no-func-assign javascript Possible Errors Possible Errors eslint +no-global-assign javascript Best Practices Best Practices eslint +no-inner-declarations javascript Possible Errors Possible Errors eslint +no-invalid-regexp javascript Possible Errors Possible Errors eslint +no-irregular-whitespace javascript Possible Errors Possible Errors eslint +no-misleading-character-class javascript Possible Errors Possible Errors eslint +no-mixed-spaces-and-tabs javascript Stylistic Issues Stylistic Issues eslint +no-new-symbol javascript ECMAScript 6 ECMAScript 6 eslint +no-obj-calls javascript Possible Errors Possible Errors eslint +no-octal javascript Best Practices Best Practices eslint +no-prototype-builtins javascript Possible Errors Possible Errors eslint +no-redeclare javascript Best Practices Best Practices eslint +no-regex-spaces javascript Possible Errors Possible Errors eslint +no-self-assign javascript Best Practices Best Practices eslint +no-shadow-restricted-names javascript Variables Variables eslint +no-sparse-arrays javascript Possible Errors Possible Errors eslint +no-this-before-super javascript ECMAScript 6 ECMAScript 6 eslint +no-undef javascript Variables Variables eslint +no-unexpected-multiline javascript Possible Errors Possible Errors eslint +no-unreachable javascript Possible Errors Possible Errors eslint +no-unsafe-finally javascript Possible Errors Possible Errors eslint +no-unsafe-negation javascript Possible Errors Possible Errors eslint +no-unused-labels javascript Best Practices Best Practices eslint +no-unused-vars javascript Variables Variables eslint +no-useless-catch javascript Best Practices Best Practices eslint +no-useless-escape javascript Best Practices Best Practices eslint +no-with javascript Best Practices Best Practices eslint +require-yield javascript ECMAScript 6 ECMAScript 6 eslint +use-isnan javascript Possible Errors Possible Errors eslint +valid-typeof javascript Possible Errors Possible Errors eslint +constructor-super typescript ECMAScript 6 ECMAScript 6 eslint-typescript +for-direction typescript Possible Errors Possible Errors eslint-typescript +no-async-promise-executor typescript Possible Errors Possible Errors eslint-typescript +no-case-declarations typescript Best Practices Best Practices eslint-typescript +no-class-assign typescript ECMAScript 6 ECMAScript 6 eslint-typescript +no-compare-neg-zero typescript Possible Errors Possible Errors eslint-typescript +no-cond-assign typescript Possible Errors Possible Errors eslint-typescript +no-constant-condition typescript Possible Errors Possible Errors eslint-typescript +no-control-regex typescript Possible Errors Possible Errors eslint-typescript +no-debugger typescript Possible Errors Possible Errors eslint-typescript +no-delete-var typescript Variables Variables eslint-typescript +no-duplicate-case typescript Possible Errors Possible Errors eslint-typescript +no-empty typescript Possible Errors Possible Errors eslint-typescript +no-empty-character-class typescript Possible Errors Possible Errors eslint-typescript +no-empty-pattern typescript Best Practices Best Practices eslint-typescript +no-ex-assign typescript Possible Errors Possible Errors eslint-typescript +no-extra-boolean-cast typescript Possible Errors Possible Errors eslint-typescript +no-fallthrough typescript Best Practices Best Practices eslint-typescript +no-func-assign typescript Possible Errors Possible Errors eslint-typescript +no-global-assign typescript Best Practices Best Practices eslint-typescript +no-inner-declarations typescript Possible Errors Possible Errors eslint-typescript +no-invalid-regexp typescript Possible Errors Possible Errors eslint-typescript +no-irregular-whitespace typescript Possible Errors Possible Errors eslint-typescript +no-misleading-character-class typescript Possible Errors Possible Errors eslint-typescript +no-mixed-spaces-and-tabs typescript Stylistic Issues Stylistic Issues eslint-typescript +no-obj-calls typescript Possible Errors Possible Errors eslint-typescript +no-octal typescript Best Practices Best Practices eslint-typescript +no-prototype-builtins typescript Possible Errors Possible Errors eslint-typescript +no-regex-spaces typescript Possible Errors Possible Errors eslint-typescript +no-self-assign typescript Best Practices Best Practices eslint-typescript +no-shadow-restricted-names typescript Variables Variables eslint-typescript +no-sparse-arrays typescript Possible Errors Possible Errors eslint-typescript +no-unexpected-multiline typescript Possible Errors Possible Errors eslint-typescript +no-unsafe-finally typescript Possible Errors Possible Errors eslint-typescript +no-unsafe-negation typescript Possible Errors Possible Errors eslint-typescript +no-unused-labels typescript Best Practices Best Practices eslint-typescript +no-useless-catch typescript Best Practices Best Practices eslint-typescript +no-useless-escape typescript Best Practices Best Practices eslint-typescript +no-var typescript ECMAScript 6 ECMAScript 6 eslint-typescript +no-with typescript Best Practices Best Practices eslint-typescript +prefer-const typescript ECMAScript 6 ECMAScript 6 eslint-typescript +prefer-rest-params typescript ECMAScript 6 ECMAScript 6 eslint-typescript +prefer-spread typescript ECMAScript 6 ECMAScript 6 eslint-typescript +require-yield typescript ECMAScript 6 ECMAScript 6 eslint-typescript +use-isnan typescript Possible Errors Possible Errors eslint-typescript +@typescript-eslint/adjacent-overload-signatures typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/await-thenable typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/ban-types typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/consistent-type-assertions typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/explicit-function-return-type typescript Stylistic Issues Stylistic Issues eslint-typescript +@typescript-eslint/member-delimiter-style typescript Stylistic Issues Stylistic Issues eslint-typescript +@typescript-eslint/no-array-constructor typescript Stylistic Issues Stylistic Issues eslint-typescript +@typescript-eslint/no-empty-function typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/no-empty-interface typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/no-explicit-any typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/no-for-in-array typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/no-inferrable-types typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/no-misused-new typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/no-misused-promises typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/no-namespace typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/no-non-null-assertion typescript Stylistic Issues Stylistic Issues eslint-typescript +@typescript-eslint/no-this-alias typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/no-unnecessary-type-assertion typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/no-unused-vars typescript Variables Variables eslint-typescript +@typescript-eslint/no-use-before-define typescript Variables Variables eslint-typescript +@typescript-eslint/no-var-requires typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/prefer-includes typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/prefer-namespace-keyword typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/prefer-regexp-exec typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/prefer-string-starts-ends-with typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/require-await typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/triple-slash-reference typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/type-annotation-spacing typescript Stylistic Issues Stylistic Issues eslint-typescript +@typescript-eslint/unbound-method typescript Best Practices Best Practices eslint-typescript ``` ### Installation on mega-linter Docker image diff --git a/docs/descriptors/salesforce_sfdx_scanner_aura.md b/docs/descriptors/salesforce_sfdx_scanner_aura.md index 4ce8d4829b5..b4ba0b4fadb 100644 --- a/docs/descriptors/salesforce_sfdx_scanner_aura.md +++ b/docs/descriptors/salesforce_sfdx_scanner_aura.md @@ -81,9 +81,315 @@ sfdx scanner:run ### Help content ```shell - › Error: Command scanner:run not found. - › Warning: scanner:rule:list is not a sfdx command. -Did you mean force:auth:list? [y/n]: +evaluate a selection of rules against a codebase + +USAGE + $ sfdx scanner:run -t [-c ] [-r ] [-e ] + [-f csv|html|json|junit|sarif|table|xml] [-o ] [--tsconfig ] + [--eslintconfig ] [--pmdconfig ] [--env ] [-s + | undefined | [-v | --json]] [--normalize-severity] [--verbose] + [--loglevel + trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL] + +FLAGS + -c, --category= + categor(ies) of rules to run + + -e, --engine= + engine(s) to run + + -f, --format=(csv|html|json|junit|sarif|table|xml) + format of results + + -o, --outfile= + location of output file + + -r, --ruleset= + [deprecated] ruleset(s) of rules to run + + -s, --severity-threshold= + throws an error when violations of specific severity (or more severe) are + detected, invokes --normalize-severity + + -t, --target= + (required) location of source code + + -v, --violations-cause-error + [deprecated] throws an error when violations are detected + + --env= + JSON-formatted string, overrides ESLint's default environment variables + + --eslintconfig= + location of eslintrc config to customize eslint engine + + --json + format output as json + + --loglevel=(trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATA + L) + [default: warn] logging level for this command invocation + + --normalize-severity + A normalized severity 1 (high), 2 (moderate), and 3 (low) is returned in + addition to the engine specific severity + + --pmdconfig= + location of PMD rule reference XML file to customize rule selection + + --tsconfig= + location of tsconfig.json file + + --verbose + emit additional command output to stdout + +DESCRIPTION + evaluate a selection of rules against a codebase + +EXAMPLES + Invoking without specifying any rules causes all rules to be run. + E.g., $ sfdx scanner:run --format xml --target "somefile.js" + Evaluates all rules against somefile.js. + Specifying multiple categories is treated as a logical OR. + E.g., $ sfdx scanner:run --format xml --target "somefile.js" --category "Design,Best Practices" + Evaluates all rules in the Design or Best Practices categories. + Categories can be excluded by specifying the negation operator, the values must be enclosed in single quotes. + E.g., $ sfdx scanner:run --format xml --target "somefile.js" --category '!Design,!Best Practices' + Evaluates all rules except those in the Design or Best Practices categories. + Wrap globs in quotes. + Unix example: $ sfdx scanner:run --target './**/*.js,!./**/IgnoreMe.js' ... + Windows example: > sfdx scanner:run --target ".\**\*.js,!.\**\IgnoreMe.js" ... + Evaluate rules against all .js files below the current directory, except for IgnoreMe.js. + Specify tsconfig.json if the current working directory does not contain the tsconfig.json that corresponds to the TypeScript files being scanned. + E.g., sfdx scanner:run --target "/my-project/**/*.ts" --tsconfig "/my-project/tsconfig.json" + Scans the project contained in '/my-project' if the current working directory is another directory. + Use --env to override the default ESLint environment variables to add frameworks. + E.g., $ sfdx scanner:run --target "somefile.js" --env '{"jasmine": true}' + Evaluates rules against somefile.js, including Jasmine in the environment variables. + Use --violations-cause-error to throw exit with a non-zero code when violations are found. + E.g., $ sfdx scanner:run --target "somefile.js" --violations-cause-error + Evaluates rules against somefile.js. If any rules are violated, the exit code will be the severity of the most severe violation. + Use --engine to include or exclude engines. Any engine listed will be run, regardless of its current 'disabled' attribute. + E.g., $ sfdx scanner:run --target "somefile.js" --engine "eslint-lwc,pmd" + Evaluates rules against somefile.js, using eslint-lwc and pmd engines. + Use --engine to invoke engines that are not enabled by default. + E.g, $ sfdx scanner:run --target "/some/dir" --engine cpd + Executes CPD engine against known file extensions in "/some/dir". CPD helps detect blocks of code duplication in selected languages. + To use PMD with your own rule reference file, use --pmdconfig. Note that rule filters are not applied. + E.g, $ sfdx scanner:run --target "src" --pmdconfig "pmd_rule_ref.xml" + To use Eslint with your own .eslintrc.json file, use --eslintconfig. Make sure that the directory you run the command from has all the NPM dependencies installed. + E.g., $ sfdx scanner:run --target "src" --eslintconfig "/home/my/setup/.eslintrc.json" + Use --normalize-severity to output a normalized (across all engines) severity (1 [high], 2 [moderate], and 3 [low]) in addition to the engine specific severity (when shown). + E.g., $ sfdx scanner:run --target "/some-project/" --format csv --normalize-severity + Use --severity-threshold to throw a non-zero exit code when rule violations of a specific severity (or greater) are found. For this example, if there are any rule violations with a severity of 2 or more (which includes 1-high and 2-moderate), the exit code will be equal to the severity of the most severe violation. + E.g., $ sfdx scanner:run --target "/some-project/" --severity-threshold 2 + + +WARNING: We're constantly improving Salesforce Code Analyzer. Tell us what you think! Give feedback at https://research.net/r/SalesforceCA. +WARNING: v2.x's End Of Life is approaching. + In October 2022, v3.x of the Salesforce Code Analyzer will become the default version, + and older versions, including your currently installed version, will no longer be supported. + You can manually update to v3.x earlier for a smoother transition. +WARNING: As of April 27, 2022, v3.x of the Salesforce Code Analyzer is available as an open pilot. + To update to v3.x and try out our pilot features, run these commands: + > sfdx plugins:uninstall @salesforce/sfdx-scanner + > sfdx plugins:install @salesforce/sfdx-scanner@latest-pilot +NAME LANGUAGES CATEGORIES RULESETS [DEP] ENGINE +───────────────────────────────────────────────── ─────────── ──────────────── ──────────────────────────────────────────────── ───────────────── +VfCsrf visualforce Security Basic VF pmd +VfHtmlStyleTagXss visualforce Security pmd +VfUnescapeEl visualforce Security Basic VF pmd +ApexAssertionsShouldIncludeMessage apex Best Practices pmd +ApexUnitTestClassShouldHaveAsserts apex Best Practices quickstart,Default ruleset...,ApexUnit pmd +ApexUnitTestMethodShouldHaveIsTestAnnotation apex Best Practices pmd +ApexUnitTestShouldNotUseSeeAllDataTrue apex Best Practices quickstart,Default ruleset...,ApexUnit pmd +AvoidGlobalModifier apex Best Practices Style,quickstart,Default ruleset... pmd +AvoidLogicInTrigger apex Best Practices Style,quickstart,Default ruleset... pmd +DebugsShouldUseLoggingLevel apex Best Practices quickstart pmd +UnusedLocalVariable apex Best Practices pmd +AvoidDebugStatements apex Performance pmd +AvoidDmlStatementsInLoops apex Performance Default ruleset...,Performance pmd +AvoidSoqlInLoops apex Performance Default ruleset...,Performance pmd +AvoidSoslInLoops apex Performance Default ruleset...,Performance pmd +EagerlyLoadedDescribeSObjectResult apex Performance pmd +OperationWithLimitsInLoop apex Performance quickstart pmd +ApexBadCrypto apex Security Security,quickstart,Default ruleset... pmd +ApexCRUDViolation apex Security Security,quickstart,Default ruleset... pmd +ApexCSRF apex Security Security pmd +ApexDangerousMethods apex Security Security,quickstart,Default ruleset... pmd +ApexInsecureEndpoint apex Security Security,quickstart,Default ruleset... pmd +ApexOpenRedirect apex Security Security,quickstart,Default ruleset... pmd +ApexSharingViolations apex Security Security,quickstart,Default ruleset... pmd +ApexSOQLInjection apex Security Security,quickstart,Default ruleset... pmd +ApexSuggestUsingNamedCred apex Security Security,quickstart,Default ruleset... pmd +ApexXSSFromEscapeFalse apex Security Security,quickstart,Default ruleset... pmd +ApexXSSFromURLParam apex Security Security,quickstart,Default ruleset... pmd +ClassNamingConventions apex Code Style Style,quickstart,Default ruleset... pmd +IfElseStmtsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd +IfStmtsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd +FieldDeclarationsShouldBeAtStart apex Code Style pmd +FieldNamingConventions apex Code Style quickstart pmd +ForLoopsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd +FormalParameterNamingConventions apex Code Style quickstart pmd +LocalVariableNamingConventions apex Code Style quickstart pmd +MethodNamingConventions apex Code Style Style,quickstart,Default ruleset... pmd +OneDeclarationPerLine apex Code Style quickstart,Default ruleset... pmd +PropertyNamingConventions apex Code Style quickstart pmd +VariableNamingConventions apex Code Style Style,Default ruleset... pmd +WhileLoopsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd +AvoidDeeplyNestedIfStmts apex Design quickstart,Default ruleset...,Complexity pmd +CyclomaticComplexity apex Design Metrics tempora...,quickstart,Default ruleset... pmd +CognitiveComplexity apex Design pmd +ExcessiveClassLength apex Design quickstart,Default ruleset...,Complexity pmd +ExcessiveParameterList apex Design quickstart,Default ruleset...,Complexity pmd +ExcessivePublicCount apex Design quickstart,Default ruleset...,Complexity pmd +NcssConstructorCount apex Design quickstart,Default ruleset...,Complexity pmd +NcssMethodCount apex Design quickstart,Default ruleset...,Complexity pmd +NcssTypeCount apex Design quickstart,Default ruleset...,Complexity pmd +StdCyclomaticComplexity apex Design quickstart,Default ruleset...,Complexity pmd +TooManyFields apex Design quickstart,Default ruleset...,Complexity pmd +ApexDoc apex Documentation quickstart,Default ruleset... pmd +ApexCSRF apex Error Prone quickstart,Default ruleset... pmd +AvoidDirectAccessTriggerMap apex Error Prone Style,quickstart,Default ruleset... pmd +AvoidHardcodingId apex Error Prone Style,quickstart,Default ruleset... pmd +AvoidNonExistentAnnotations apex Error Prone quickstart,Default ruleset... pmd +EmptyCatchBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd +EmptyIfStmt apex Error Prone quickstart,Default ruleset...,Empty Code pmd +EmptyStatementBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd +EmptyTryOrFinallyBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd +EmptyWhileStmt apex Error Prone quickstart,Default ruleset...,Empty Code pmd +InaccessibleAuraEnabledGetter apex Error Prone pmd +MethodWithSameNameAsEnclosingClass apex Error Prone Style,quickstart,Default ruleset... pmd +OverrideBothEqualsAndHashcode apex Error Prone pmd +TestMethodsMustBeInTestClasses apex Error Prone pmd +constructor-super javascript ECMAScript 6 ECMAScript 6 eslint +for-direction javascript Possible Errors Possible Errors eslint +getter-return javascript Possible Errors Possible Errors eslint +no-async-promise-executor javascript Possible Errors Possible Errors eslint +no-case-declarations javascript Best Practices Best Practices eslint +no-class-assign javascript ECMAScript 6 ECMAScript 6 eslint +no-compare-neg-zero javascript Possible Errors Possible Errors eslint +no-cond-assign javascript Possible Errors Possible Errors eslint +no-const-assign javascript ECMAScript 6 ECMAScript 6 eslint +no-constant-condition javascript Possible Errors Possible Errors eslint +no-control-regex javascript Possible Errors Possible Errors eslint +no-debugger javascript Possible Errors Possible Errors eslint +no-delete-var javascript Variables Variables eslint +no-dupe-args javascript Possible Errors Possible Errors eslint +no-dupe-class-members javascript ECMAScript 6 ECMAScript 6 eslint +no-dupe-keys javascript Possible Errors Possible Errors eslint +no-duplicate-case javascript Possible Errors Possible Errors eslint +no-empty javascript Possible Errors Possible Errors eslint +no-empty-character-class javascript Possible Errors Possible Errors eslint +no-empty-pattern javascript Best Practices Best Practices eslint +no-ex-assign javascript Possible Errors Possible Errors eslint +no-extra-boolean-cast javascript Possible Errors Possible Errors eslint +no-extra-semi javascript Possible Errors Possible Errors eslint +no-fallthrough javascript Best Practices Best Practices eslint +no-func-assign javascript Possible Errors Possible Errors eslint +no-global-assign javascript Best Practices Best Practices eslint +no-inner-declarations javascript Possible Errors Possible Errors eslint +no-invalid-regexp javascript Possible Errors Possible Errors eslint +no-irregular-whitespace javascript Possible Errors Possible Errors eslint +no-misleading-character-class javascript Possible Errors Possible Errors eslint +no-mixed-spaces-and-tabs javascript Stylistic Issues Stylistic Issues eslint +no-new-symbol javascript ECMAScript 6 ECMAScript 6 eslint +no-obj-calls javascript Possible Errors Possible Errors eslint +no-octal javascript Best Practices Best Practices eslint +no-prototype-builtins javascript Possible Errors Possible Errors eslint +no-redeclare javascript Best Practices Best Practices eslint +no-regex-spaces javascript Possible Errors Possible Errors eslint +no-self-assign javascript Best Practices Best Practices eslint +no-shadow-restricted-names javascript Variables Variables eslint +no-sparse-arrays javascript Possible Errors Possible Errors eslint +no-this-before-super javascript ECMAScript 6 ECMAScript 6 eslint +no-undef javascript Variables Variables eslint +no-unexpected-multiline javascript Possible Errors Possible Errors eslint +no-unreachable javascript Possible Errors Possible Errors eslint +no-unsafe-finally javascript Possible Errors Possible Errors eslint +no-unsafe-negation javascript Possible Errors Possible Errors eslint +no-unused-labels javascript Best Practices Best Practices eslint +no-unused-vars javascript Variables Variables eslint +no-useless-catch javascript Best Practices Best Practices eslint +no-useless-escape javascript Best Practices Best Practices eslint +no-with javascript Best Practices Best Practices eslint +require-yield javascript ECMAScript 6 ECMAScript 6 eslint +use-isnan javascript Possible Errors Possible Errors eslint +valid-typeof javascript Possible Errors Possible Errors eslint +constructor-super typescript ECMAScript 6 ECMAScript 6 eslint-typescript +for-direction typescript Possible Errors Possible Errors eslint-typescript +no-async-promise-executor typescript Possible Errors Possible Errors eslint-typescript +no-case-declarations typescript Best Practices Best Practices eslint-typescript +no-class-assign typescript ECMAScript 6 ECMAScript 6 eslint-typescript +no-compare-neg-zero typescript Possible Errors Possible Errors eslint-typescript +no-cond-assign typescript Possible Errors Possible Errors eslint-typescript +no-constant-condition typescript Possible Errors Possible Errors eslint-typescript +no-control-regex typescript Possible Errors Possible Errors eslint-typescript +no-debugger typescript Possible Errors Possible Errors eslint-typescript +no-delete-var typescript Variables Variables eslint-typescript +no-duplicate-case typescript Possible Errors Possible Errors eslint-typescript +no-empty typescript Possible Errors Possible Errors eslint-typescript +no-empty-character-class typescript Possible Errors Possible Errors eslint-typescript +no-empty-pattern typescript Best Practices Best Practices eslint-typescript +no-ex-assign typescript Possible Errors Possible Errors eslint-typescript +no-extra-boolean-cast typescript Possible Errors Possible Errors eslint-typescript +no-fallthrough typescript Best Practices Best Practices eslint-typescript +no-func-assign typescript Possible Errors Possible Errors eslint-typescript +no-global-assign typescript Best Practices Best Practices eslint-typescript +no-inner-declarations typescript Possible Errors Possible Errors eslint-typescript +no-invalid-regexp typescript Possible Errors Possible Errors eslint-typescript +no-irregular-whitespace typescript Possible Errors Possible Errors eslint-typescript +no-misleading-character-class typescript Possible Errors Possible Errors eslint-typescript +no-mixed-spaces-and-tabs typescript Stylistic Issues Stylistic Issues eslint-typescript +no-obj-calls typescript Possible Errors Possible Errors eslint-typescript +no-octal typescript Best Practices Best Practices eslint-typescript +no-prototype-builtins typescript Possible Errors Possible Errors eslint-typescript +no-regex-spaces typescript Possible Errors Possible Errors eslint-typescript +no-self-assign typescript Best Practices Best Practices eslint-typescript +no-shadow-restricted-names typescript Variables Variables eslint-typescript +no-sparse-arrays typescript Possible Errors Possible Errors eslint-typescript +no-unexpected-multiline typescript Possible Errors Possible Errors eslint-typescript +no-unsafe-finally typescript Possible Errors Possible Errors eslint-typescript +no-unsafe-negation typescript Possible Errors Possible Errors eslint-typescript +no-unused-labels typescript Best Practices Best Practices eslint-typescript +no-useless-catch typescript Best Practices Best Practices eslint-typescript +no-useless-escape typescript Best Practices Best Practices eslint-typescript +no-var typescript ECMAScript 6 ECMAScript 6 eslint-typescript +no-with typescript Best Practices Best Practices eslint-typescript +prefer-const typescript ECMAScript 6 ECMAScript 6 eslint-typescript +prefer-rest-params typescript ECMAScript 6 ECMAScript 6 eslint-typescript +prefer-spread typescript ECMAScript 6 ECMAScript 6 eslint-typescript +require-yield typescript ECMAScript 6 ECMAScript 6 eslint-typescript +use-isnan typescript Possible Errors Possible Errors eslint-typescript +@typescript-eslint/adjacent-overload-signatures typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/await-thenable typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/ban-types typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/consistent-type-assertions typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/explicit-function-return-type typescript Stylistic Issues Stylistic Issues eslint-typescript +@typescript-eslint/member-delimiter-style typescript Stylistic Issues Stylistic Issues eslint-typescript +@typescript-eslint/no-array-constructor typescript Stylistic Issues Stylistic Issues eslint-typescript +@typescript-eslint/no-empty-function typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/no-empty-interface typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/no-explicit-any typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/no-for-in-array typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/no-inferrable-types typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/no-misused-new typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/no-misused-promises typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/no-namespace typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/no-non-null-assertion typescript Stylistic Issues Stylistic Issues eslint-typescript +@typescript-eslint/no-this-alias typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/no-unnecessary-type-assertion typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/no-unused-vars typescript Variables Variables eslint-typescript +@typescript-eslint/no-use-before-define typescript Variables Variables eslint-typescript +@typescript-eslint/no-var-requires typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/prefer-includes typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/prefer-namespace-keyword typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/prefer-regexp-exec typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/prefer-string-starts-ends-with typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/require-await typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/triple-slash-reference typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/type-annotation-spacing typescript Stylistic Issues Stylistic Issues eslint-typescript +@typescript-eslint/unbound-method typescript Best Practices Best Practices eslint-typescript ``` ### Installation on mega-linter Docker image diff --git a/docs/descriptors/salesforce_sfdx_scanner_lwc.md b/docs/descriptors/salesforce_sfdx_scanner_lwc.md index 69f1243e677..294bf5eed3d 100644 --- a/docs/descriptors/salesforce_sfdx_scanner_lwc.md +++ b/docs/descriptors/salesforce_sfdx_scanner_lwc.md @@ -81,9 +81,315 @@ sfdx scanner:run ### Help content ```shell - › Error: Command scanner:run not found. - › Warning: scanner:rule:list is not a sfdx command. -Did you mean force:auth:list? [y/n]: +evaluate a selection of rules against a codebase + +USAGE + $ sfdx scanner:run -t [-c ] [-r ] [-e ] + [-f csv|html|json|junit|sarif|table|xml] [-o ] [--tsconfig ] + [--eslintconfig ] [--pmdconfig ] [--env ] [-s + | undefined | [-v | --json]] [--normalize-severity] [--verbose] + [--loglevel + trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL] + +FLAGS + -c, --category= + categor(ies) of rules to run + + -e, --engine= + engine(s) to run + + -f, --format=(csv|html|json|junit|sarif|table|xml) + format of results + + -o, --outfile= + location of output file + + -r, --ruleset= + [deprecated] ruleset(s) of rules to run + + -s, --severity-threshold= + throws an error when violations of specific severity (or more severe) are + detected, invokes --normalize-severity + + -t, --target= + (required) location of source code + + -v, --violations-cause-error + [deprecated] throws an error when violations are detected + + --env= + JSON-formatted string, overrides ESLint's default environment variables + + --eslintconfig= + location of eslintrc config to customize eslint engine + + --json + format output as json + + --loglevel=(trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATA + L) + [default: warn] logging level for this command invocation + + --normalize-severity + A normalized severity 1 (high), 2 (moderate), and 3 (low) is returned in + addition to the engine specific severity + + --pmdconfig= + location of PMD rule reference XML file to customize rule selection + + --tsconfig= + location of tsconfig.json file + + --verbose + emit additional command output to stdout + +DESCRIPTION + evaluate a selection of rules against a codebase + +EXAMPLES + Invoking without specifying any rules causes all rules to be run. + E.g., $ sfdx scanner:run --format xml --target "somefile.js" + Evaluates all rules against somefile.js. + Specifying multiple categories is treated as a logical OR. + E.g., $ sfdx scanner:run --format xml --target "somefile.js" --category "Design,Best Practices" + Evaluates all rules in the Design or Best Practices categories. + Categories can be excluded by specifying the negation operator, the values must be enclosed in single quotes. + E.g., $ sfdx scanner:run --format xml --target "somefile.js" --category '!Design,!Best Practices' + Evaluates all rules except those in the Design or Best Practices categories. + Wrap globs in quotes. + Unix example: $ sfdx scanner:run --target './**/*.js,!./**/IgnoreMe.js' ... + Windows example: > sfdx scanner:run --target ".\**\*.js,!.\**\IgnoreMe.js" ... + Evaluate rules against all .js files below the current directory, except for IgnoreMe.js. + Specify tsconfig.json if the current working directory does not contain the tsconfig.json that corresponds to the TypeScript files being scanned. + E.g., sfdx scanner:run --target "/my-project/**/*.ts" --tsconfig "/my-project/tsconfig.json" + Scans the project contained in '/my-project' if the current working directory is another directory. + Use --env to override the default ESLint environment variables to add frameworks. + E.g., $ sfdx scanner:run --target "somefile.js" --env '{"jasmine": true}' + Evaluates rules against somefile.js, including Jasmine in the environment variables. + Use --violations-cause-error to throw exit with a non-zero code when violations are found. + E.g., $ sfdx scanner:run --target "somefile.js" --violations-cause-error + Evaluates rules against somefile.js. If any rules are violated, the exit code will be the severity of the most severe violation. + Use --engine to include or exclude engines. Any engine listed will be run, regardless of its current 'disabled' attribute. + E.g., $ sfdx scanner:run --target "somefile.js" --engine "eslint-lwc,pmd" + Evaluates rules against somefile.js, using eslint-lwc and pmd engines. + Use --engine to invoke engines that are not enabled by default. + E.g, $ sfdx scanner:run --target "/some/dir" --engine cpd + Executes CPD engine against known file extensions in "/some/dir". CPD helps detect blocks of code duplication in selected languages. + To use PMD with your own rule reference file, use --pmdconfig. Note that rule filters are not applied. + E.g, $ sfdx scanner:run --target "src" --pmdconfig "pmd_rule_ref.xml" + To use Eslint with your own .eslintrc.json file, use --eslintconfig. Make sure that the directory you run the command from has all the NPM dependencies installed. + E.g., $ sfdx scanner:run --target "src" --eslintconfig "/home/my/setup/.eslintrc.json" + Use --normalize-severity to output a normalized (across all engines) severity (1 [high], 2 [moderate], and 3 [low]) in addition to the engine specific severity (when shown). + E.g., $ sfdx scanner:run --target "/some-project/" --format csv --normalize-severity + Use --severity-threshold to throw a non-zero exit code when rule violations of a specific severity (or greater) are found. For this example, if there are any rule violations with a severity of 2 or more (which includes 1-high and 2-moderate), the exit code will be equal to the severity of the most severe violation. + E.g., $ sfdx scanner:run --target "/some-project/" --severity-threshold 2 + + +WARNING: We're constantly improving Salesforce Code Analyzer. Tell us what you think! Give feedback at https://research.net/r/SalesforceCA. +WARNING: v2.x's End Of Life is approaching. + In October 2022, v3.x of the Salesforce Code Analyzer will become the default version, + and older versions, including your currently installed version, will no longer be supported. + You can manually update to v3.x earlier for a smoother transition. +WARNING: As of April 27, 2022, v3.x of the Salesforce Code Analyzer is available as an open pilot. + To update to v3.x and try out our pilot features, run these commands: + > sfdx plugins:uninstall @salesforce/sfdx-scanner + > sfdx plugins:install @salesforce/sfdx-scanner@latest-pilot +NAME LANGUAGES CATEGORIES RULESETS [DEP] ENGINE +───────────────────────────────────────────────── ─────────── ──────────────── ──────────────────────────────────────────────── ───────────────── +VfCsrf visualforce Security Basic VF pmd +VfHtmlStyleTagXss visualforce Security pmd +VfUnescapeEl visualforce Security Basic VF pmd +ApexAssertionsShouldIncludeMessage apex Best Practices pmd +ApexUnitTestClassShouldHaveAsserts apex Best Practices quickstart,Default ruleset...,ApexUnit pmd +ApexUnitTestMethodShouldHaveIsTestAnnotation apex Best Practices pmd +ApexUnitTestShouldNotUseSeeAllDataTrue apex Best Practices quickstart,Default ruleset...,ApexUnit pmd +AvoidGlobalModifier apex Best Practices Style,quickstart,Default ruleset... pmd +AvoidLogicInTrigger apex Best Practices Style,quickstart,Default ruleset... pmd +DebugsShouldUseLoggingLevel apex Best Practices quickstart pmd +UnusedLocalVariable apex Best Practices pmd +AvoidDebugStatements apex Performance pmd +AvoidDmlStatementsInLoops apex Performance Default ruleset...,Performance pmd +AvoidSoqlInLoops apex Performance Default ruleset...,Performance pmd +AvoidSoslInLoops apex Performance Default ruleset...,Performance pmd +EagerlyLoadedDescribeSObjectResult apex Performance pmd +OperationWithLimitsInLoop apex Performance quickstart pmd +ApexBadCrypto apex Security Security,quickstart,Default ruleset... pmd +ApexCRUDViolation apex Security Security,quickstart,Default ruleset... pmd +ApexCSRF apex Security Security pmd +ApexDangerousMethods apex Security Security,quickstart,Default ruleset... pmd +ApexInsecureEndpoint apex Security Security,quickstart,Default ruleset... pmd +ApexOpenRedirect apex Security Security,quickstart,Default ruleset... pmd +ApexSharingViolations apex Security Security,quickstart,Default ruleset... pmd +ApexSOQLInjection apex Security Security,quickstart,Default ruleset... pmd +ApexSuggestUsingNamedCred apex Security Security,quickstart,Default ruleset... pmd +ApexXSSFromEscapeFalse apex Security Security,quickstart,Default ruleset... pmd +ApexXSSFromURLParam apex Security Security,quickstart,Default ruleset... pmd +ClassNamingConventions apex Code Style Style,quickstart,Default ruleset... pmd +IfElseStmtsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd +IfStmtsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd +FieldDeclarationsShouldBeAtStart apex Code Style pmd +FieldNamingConventions apex Code Style quickstart pmd +ForLoopsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd +FormalParameterNamingConventions apex Code Style quickstart pmd +LocalVariableNamingConventions apex Code Style quickstart pmd +MethodNamingConventions apex Code Style Style,quickstart,Default ruleset... pmd +OneDeclarationPerLine apex Code Style quickstart,Default ruleset... pmd +PropertyNamingConventions apex Code Style quickstart pmd +VariableNamingConventions apex Code Style Style,Default ruleset... pmd +WhileLoopsMustUseBraces apex Code Style quickstart,Default ruleset...,Braces pmd +AvoidDeeplyNestedIfStmts apex Design quickstart,Default ruleset...,Complexity pmd +CyclomaticComplexity apex Design Metrics tempora...,quickstart,Default ruleset... pmd +CognitiveComplexity apex Design pmd +ExcessiveClassLength apex Design quickstart,Default ruleset...,Complexity pmd +ExcessiveParameterList apex Design quickstart,Default ruleset...,Complexity pmd +ExcessivePublicCount apex Design quickstart,Default ruleset...,Complexity pmd +NcssConstructorCount apex Design quickstart,Default ruleset...,Complexity pmd +NcssMethodCount apex Design quickstart,Default ruleset...,Complexity pmd +NcssTypeCount apex Design quickstart,Default ruleset...,Complexity pmd +StdCyclomaticComplexity apex Design quickstart,Default ruleset...,Complexity pmd +TooManyFields apex Design quickstart,Default ruleset...,Complexity pmd +ApexDoc apex Documentation quickstart,Default ruleset... pmd +ApexCSRF apex Error Prone quickstart,Default ruleset... pmd +AvoidDirectAccessTriggerMap apex Error Prone Style,quickstart,Default ruleset... pmd +AvoidHardcodingId apex Error Prone Style,quickstart,Default ruleset... pmd +AvoidNonExistentAnnotations apex Error Prone quickstart,Default ruleset... pmd +EmptyCatchBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd +EmptyIfStmt apex Error Prone quickstart,Default ruleset...,Empty Code pmd +EmptyStatementBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd +EmptyTryOrFinallyBlock apex Error Prone quickstart,Default ruleset...,Empty Code pmd +EmptyWhileStmt apex Error Prone quickstart,Default ruleset...,Empty Code pmd +InaccessibleAuraEnabledGetter apex Error Prone pmd +MethodWithSameNameAsEnclosingClass apex Error Prone Style,quickstart,Default ruleset... pmd +OverrideBothEqualsAndHashcode apex Error Prone pmd +TestMethodsMustBeInTestClasses apex Error Prone pmd +constructor-super javascript ECMAScript 6 ECMAScript 6 eslint +for-direction javascript Possible Errors Possible Errors eslint +getter-return javascript Possible Errors Possible Errors eslint +no-async-promise-executor javascript Possible Errors Possible Errors eslint +no-case-declarations javascript Best Practices Best Practices eslint +no-class-assign javascript ECMAScript 6 ECMAScript 6 eslint +no-compare-neg-zero javascript Possible Errors Possible Errors eslint +no-cond-assign javascript Possible Errors Possible Errors eslint +no-const-assign javascript ECMAScript 6 ECMAScript 6 eslint +no-constant-condition javascript Possible Errors Possible Errors eslint +no-control-regex javascript Possible Errors Possible Errors eslint +no-debugger javascript Possible Errors Possible Errors eslint +no-delete-var javascript Variables Variables eslint +no-dupe-args javascript Possible Errors Possible Errors eslint +no-dupe-class-members javascript ECMAScript 6 ECMAScript 6 eslint +no-dupe-keys javascript Possible Errors Possible Errors eslint +no-duplicate-case javascript Possible Errors Possible Errors eslint +no-empty javascript Possible Errors Possible Errors eslint +no-empty-character-class javascript Possible Errors Possible Errors eslint +no-empty-pattern javascript Best Practices Best Practices eslint +no-ex-assign javascript Possible Errors Possible Errors eslint +no-extra-boolean-cast javascript Possible Errors Possible Errors eslint +no-extra-semi javascript Possible Errors Possible Errors eslint +no-fallthrough javascript Best Practices Best Practices eslint +no-func-assign javascript Possible Errors Possible Errors eslint +no-global-assign javascript Best Practices Best Practices eslint +no-inner-declarations javascript Possible Errors Possible Errors eslint +no-invalid-regexp javascript Possible Errors Possible Errors eslint +no-irregular-whitespace javascript Possible Errors Possible Errors eslint +no-misleading-character-class javascript Possible Errors Possible Errors eslint +no-mixed-spaces-and-tabs javascript Stylistic Issues Stylistic Issues eslint +no-new-symbol javascript ECMAScript 6 ECMAScript 6 eslint +no-obj-calls javascript Possible Errors Possible Errors eslint +no-octal javascript Best Practices Best Practices eslint +no-prototype-builtins javascript Possible Errors Possible Errors eslint +no-redeclare javascript Best Practices Best Practices eslint +no-regex-spaces javascript Possible Errors Possible Errors eslint +no-self-assign javascript Best Practices Best Practices eslint +no-shadow-restricted-names javascript Variables Variables eslint +no-sparse-arrays javascript Possible Errors Possible Errors eslint +no-this-before-super javascript ECMAScript 6 ECMAScript 6 eslint +no-undef javascript Variables Variables eslint +no-unexpected-multiline javascript Possible Errors Possible Errors eslint +no-unreachable javascript Possible Errors Possible Errors eslint +no-unsafe-finally javascript Possible Errors Possible Errors eslint +no-unsafe-negation javascript Possible Errors Possible Errors eslint +no-unused-labels javascript Best Practices Best Practices eslint +no-unused-vars javascript Variables Variables eslint +no-useless-catch javascript Best Practices Best Practices eslint +no-useless-escape javascript Best Practices Best Practices eslint +no-with javascript Best Practices Best Practices eslint +require-yield javascript ECMAScript 6 ECMAScript 6 eslint +use-isnan javascript Possible Errors Possible Errors eslint +valid-typeof javascript Possible Errors Possible Errors eslint +constructor-super typescript ECMAScript 6 ECMAScript 6 eslint-typescript +for-direction typescript Possible Errors Possible Errors eslint-typescript +no-async-promise-executor typescript Possible Errors Possible Errors eslint-typescript +no-case-declarations typescript Best Practices Best Practices eslint-typescript +no-class-assign typescript ECMAScript 6 ECMAScript 6 eslint-typescript +no-compare-neg-zero typescript Possible Errors Possible Errors eslint-typescript +no-cond-assign typescript Possible Errors Possible Errors eslint-typescript +no-constant-condition typescript Possible Errors Possible Errors eslint-typescript +no-control-regex typescript Possible Errors Possible Errors eslint-typescript +no-debugger typescript Possible Errors Possible Errors eslint-typescript +no-delete-var typescript Variables Variables eslint-typescript +no-duplicate-case typescript Possible Errors Possible Errors eslint-typescript +no-empty typescript Possible Errors Possible Errors eslint-typescript +no-empty-character-class typescript Possible Errors Possible Errors eslint-typescript +no-empty-pattern typescript Best Practices Best Practices eslint-typescript +no-ex-assign typescript Possible Errors Possible Errors eslint-typescript +no-extra-boolean-cast typescript Possible Errors Possible Errors eslint-typescript +no-fallthrough typescript Best Practices Best Practices eslint-typescript +no-func-assign typescript Possible Errors Possible Errors eslint-typescript +no-global-assign typescript Best Practices Best Practices eslint-typescript +no-inner-declarations typescript Possible Errors Possible Errors eslint-typescript +no-invalid-regexp typescript Possible Errors Possible Errors eslint-typescript +no-irregular-whitespace typescript Possible Errors Possible Errors eslint-typescript +no-misleading-character-class typescript Possible Errors Possible Errors eslint-typescript +no-mixed-spaces-and-tabs typescript Stylistic Issues Stylistic Issues eslint-typescript +no-obj-calls typescript Possible Errors Possible Errors eslint-typescript +no-octal typescript Best Practices Best Practices eslint-typescript +no-prototype-builtins typescript Possible Errors Possible Errors eslint-typescript +no-regex-spaces typescript Possible Errors Possible Errors eslint-typescript +no-self-assign typescript Best Practices Best Practices eslint-typescript +no-shadow-restricted-names typescript Variables Variables eslint-typescript +no-sparse-arrays typescript Possible Errors Possible Errors eslint-typescript +no-unexpected-multiline typescript Possible Errors Possible Errors eslint-typescript +no-unsafe-finally typescript Possible Errors Possible Errors eslint-typescript +no-unsafe-negation typescript Possible Errors Possible Errors eslint-typescript +no-unused-labels typescript Best Practices Best Practices eslint-typescript +no-useless-catch typescript Best Practices Best Practices eslint-typescript +no-useless-escape typescript Best Practices Best Practices eslint-typescript +no-var typescript ECMAScript 6 ECMAScript 6 eslint-typescript +no-with typescript Best Practices Best Practices eslint-typescript +prefer-const typescript ECMAScript 6 ECMAScript 6 eslint-typescript +prefer-rest-params typescript ECMAScript 6 ECMAScript 6 eslint-typescript +prefer-spread typescript ECMAScript 6 ECMAScript 6 eslint-typescript +require-yield typescript ECMAScript 6 ECMAScript 6 eslint-typescript +use-isnan typescript Possible Errors Possible Errors eslint-typescript +@typescript-eslint/adjacent-overload-signatures typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/await-thenable typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/ban-types typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/consistent-type-assertions typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/explicit-function-return-type typescript Stylistic Issues Stylistic Issues eslint-typescript +@typescript-eslint/member-delimiter-style typescript Stylistic Issues Stylistic Issues eslint-typescript +@typescript-eslint/no-array-constructor typescript Stylistic Issues Stylistic Issues eslint-typescript +@typescript-eslint/no-empty-function typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/no-empty-interface typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/no-explicit-any typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/no-for-in-array typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/no-inferrable-types typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/no-misused-new typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/no-misused-promises typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/no-namespace typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/no-non-null-assertion typescript Stylistic Issues Stylistic Issues eslint-typescript +@typescript-eslint/no-this-alias typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/no-unnecessary-type-assertion typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/no-unused-vars typescript Variables Variables eslint-typescript +@typescript-eslint/no-use-before-define typescript Variables Variables eslint-typescript +@typescript-eslint/no-var-requires typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/prefer-includes typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/prefer-namespace-keyword typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/prefer-regexp-exec typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/prefer-string-starts-ends-with typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/require-await typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/triple-slash-reference typescript Best Practices Best Practices eslint-typescript +@typescript-eslint/type-annotation-spacing typescript Stylistic Issues Stylistic Issues eslint-typescript +@typescript-eslint/unbound-method typescript Best Practices Best Practices eslint-typescript ``` ### Installation on mega-linter Docker image diff --git a/docs/descriptors/terraform_checkov.md b/docs/descriptors/terraform_checkov.md index 89cd149465e..17861466648 100644 --- a/docs/descriptors/terraform_checkov.md +++ b/docs/descriptors/terraform_checkov.md @@ -110,7 +110,7 @@ usage: checkov [-h] [-v] [-d DIRECTORY] [--add-check] [-f FILE] [--secrets-scan-file-type SECRETS_SCAN_FILE_TYPE] [--enable-secret-scan-all-files] [--block-list-secret-scan BLOCK_LIST_SECRET_SCAN] - [--summary-position {top,bottom}] + [--summary-position {bottom,top}] [--skip-resources-without-violations] Infrastructure as code static analysis @@ -361,7 +361,7 @@ options: --block-list-secret-scan BLOCK_LIST_SECRET_SCAN List of files to filter out from the secret scanner [env var: CKV_SECRETS_SCAN_BLOCK_LIST] - --summary-position {top,bottom} + --summary-position {bottom,top} Chose whether the summary will be appended on top (before the checks results) or on bottom (after check results), default is on top.