@sun-asterisk/sunlint
Version:
☀️ SunLint - Multi-language static analysis tool for code quality and security | Sun* Engineering Standards
139 lines (134 loc) • 6.95 kB
JSON
{
"comment": "SunLint to ESLint Rule Mapping - Full Implementation Status",
"version": "1.0.0",
"stats": {
"commonRulesTotal": 76,
"commonRulesImplemented": 27,
"commonRulesMissing": 49,
"securityRulesTotal": 59,
"securityRulesImplemented": 43,
"securityRulesMissing": 16,
"reactRulesImplemented": 9,
"typescriptRulesImplemented": 8
},
"missingCommonRules": [
"C001", "C004", "C008", "C009", "C011", "C016",
"C020", "C021", "C022", "C024", "C025", "C026", "C027", "C028", "C036",
"C039", "C044", "C045", "C046", "C048", "C049", "C050", "C051", "C052",
"C053", "C054", "C055", "C056", "C057", "C058", "C059", "C060", "C061",
"C062", "C063", "C064", "C065", "C066", "C067", "C068", "C069", "C070",
"C071", "C073", "C074"
],
"missingSecurityRules": [
"S004", "S021", "S024", "S028", "S031", "S032", "S040", "S049", "S051", "S053",
"S056", "S059", "S060", "S061", "S062", "S063"
],
"mappings": {
"C002": ["custom/c002-no-duplicate-code"],
"C003": ["custom/c003-no-vague-abbreviations"],
"C005": ["max-statements-per-line", "complexity"],
"C006": ["custom/c006-function-name-verb-noun"],
"C007": ["spaced-comment", "no-inline-comments", "no-warning-comments"],
"C010": ["custom/c010-limit-block-nesting"],
"C012": ["consistent-return", "no-void", "@typescript-eslint/no-confusing-void-expression"],
"C013": ["custom/c013-no-dead-code"],
"C014": ["custom/c014-abstract-dependency-preferred"],
"C015": ["@typescript-eslint/naming-convention", "camelcase"],
"C017": ["custom/c017-limit-constructor-logic"],
"C018": ["custom/c018-no-generic-throw"],
"C019": ["no-console", "no-alert", "no-debugger"],
"C023": ["custom/c023-no-duplicate-variable-name-in-scope"],
"C029": ["custom/c029-catch-block-logging"],
"C030": ["custom/c030-use-custom-error-classes"],
"C031": ["no-implicit-coercion", "eqeqeq"],
"C032": ["no-new", "no-constructor-return"],
"C033": ["prefer-const", "no-var"],
"C034": ["no-global-assign", "no-implicit-globals", "@typescript-eslint/no-namespace"],
"C035": ["custom/c035-no-empty-catch"],
"C037": ["consistent-return", "@typescript-eslint/explicit-function-return-type", "@typescript-eslint/explicit-module-boundary-types"],
"C038": ["import/no-dynamic-require", "import/order", "@typescript-eslint/no-var-requires"],
"C040": ["no-duplicate-imports", "import/no-duplicates"],
"C041": ["custom/c041-no-config-inline"],
"C042": ["custom/c042-boolean-name-prefix"],
"C043": ["custom/c043-no-console-or-print"],
"C047": ["custom/c047-no-duplicate-retry-logic"],
"C072": ["custom/c072-one-assert-per-test"],
"C075": ["custom/c075-explicit-function-return-types"],
"C076": ["custom/c076-single-behavior-per-test"],
"T002": ["custom/t002-interface-prefix-i"],
"T003": ["custom/t003-ts-ignore-reason"],
"T004": ["custom/t004-no-empty-type"],
"T007": ["custom/t007-no-fn-in-constructor"],
"T010": ["custom/t010-no-nested-union-tuple"],
"T019": ["custom/t019-no-this-assign"],
"T020": ["custom/t020-no-default-multi-export"],
"T021": ["custom/t021-limit-nested-generics"],
"S001": ["custom/s001-fail-securely"],
"S002": ["custom/s002-idor-check"],
"S003": ["custom/s003-no-unvalidated-redirect"],
"S005": ["custom/s005-no-origin-auth"],
"S006": ["custom/s006-activation-recovery-secret-not-plaintext"],
"S007": ["custom/s007-no-plaintext-otp"],
"S008": ["custom/s008-crypto-agility"],
"S009": ["custom/s009-no-insecure-crypto"],
"S010": ["custom/s010-no-insecure-random-in-sensitive-context"],
"S011": ["custom/s011-no-insecure-uuid"],
"S012": ["custom/s012-hardcode-secret"],
"S013": ["custom/s013-verify-tls-connection"],
"S014": ["custom/s014-insecure-tls-version"],
"S015": ["custom/s015-insecure-tls-certificate"],
"S016": ["custom/s016-sensitive-query-parameter"],
"S017": ["custom/s017-no-sql-injection"],
"S018": ["custom/s018-positive-input-validation"],
"S019": ["custom/s019-no-raw-user-input-in-email"],
"S020": ["custom/s020-no-eval-dynamic-execution"],
"S022": ["custom/s022-output-encoding"],
"S023": ["custom/s023-no-json-injection"],
"S025": ["custom/s025-server-side-input-validation"],
"S026": ["custom/s026-json-schema-validation"],
"S027": ["custom/s027-no-hardcoded-secrets"],
"S029": ["custom/s029-require-csrf-protection"],
"S030": ["custom/s030-no-directory-browsing"],
"S033": ["custom/s033-require-samesite-cookie"],
"S034": ["custom/s034-require-host-cookie-prefix"],
"S035": ["custom/s035-cookie-specific-path"],
"S036": ["custom/s036-no-unsafe-file-include"],
"S037": ["custom/s037-require-anti-cache-headers"],
"S038": ["custom/s038-no-version-disclosure"],
"S039": ["custom/s039-no-session-token-in-url"],
"S041": ["custom/s041-require-session-invalidate-on-logout"],
"S042": ["custom/s042-require-periodic-reauthentication"],
"S043": ["custom/s043-terminate-sessions-on-password-change"],
"S044": ["custom/s044-require-full-session-for-sensitive-operations"],
"S045": ["custom/s045-anti-automation-controls"],
"S046": ["custom/s046-secure-notification-on-auth-change"],
"S047": ["custom/s047-secure-random-passwords"],
"S048": ["custom/s048-password-credential-recovery"],
"S050": ["custom/s050-session-token-weak-hash"],
"S052": ["custom/s052-secure-random-authentication-code"],
"S054": ["custom/s054-verification-default-account"],
"S055": ["custom/s055-verification-rest-check-the-incoming-content-type"],
"S057": ["custom/s057-utc-logging"],
"S058": ["custom/s058-no-ssrf"],
"R001": ["react/no-this-in-sfc", "no-param-reassign", "react/function-component-definition", "react/forbid-component-props"],
"R002": ["react-hooks/rules-of-hooks", "react-hooks/exhaustive-deps", "react/no-did-mount-set-state", "react/no-did-update-set-state"],
"R003": ["react/no-direct-mutation-state", "react/jsx-no-constructed-context-values", "react/forbid-dom-props"],
"R004": ["no-param-reassign", "react/forbid-foreign-prop-types"],
"R005": ["react/jsx-no-bind"],
"R006": ["react/jsx-pascal-case", "react/jsx-uses-react", "react/jsx-uses-vars"],
"R007": ["react-hooks/rules-of-hooks"],
"R008": ["react-hooks/rules-of-hooks"],
"R009": ["react-hooks/rules-of-hooks"]
},
"implementationTodo": {
"commonRules": {
"priority1": ["C001", "C004", "C008", "C009", "C011"],
"priority2": ["C016", "C020", "C021", "C022", "C024", "C025"],
"priority3": ["C026", "C027", "C028", "C036", "C039", "C044", "C045", "C046"]
},
"securityRules": {
"needImplementation": ["S004", "S021", "S024", "S028", "S031", "S032", "S040"],
"needMapping": ["All implemented S001-S058 except missing ones above"]
}
}
}