@specs-feup/clava-misra 1.0.2 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.gitignore +8 -0
- package/README.md +53 -19
- package/dist/MISRA.d.ts +28 -10
- package/dist/MISRA.d.ts.map +1 -1
- package/dist/MISRA.js +30 -10
- package/dist/MISRA.js.map +1 -1
- package/dist/MISRAContext.d.ts +65 -11
- package/dist/MISRAContext.d.ts.map +1 -1
- package/dist/MISRAContext.js +131 -35
- package/dist/MISRAContext.js.map +1 -1
- package/dist/MISRARule.d.ts +38 -25
- package/dist/MISRARule.d.ts.map +1 -1
- package/dist/MISRARule.js +40 -18
- package/dist/MISRARule.js.map +1 -1
- package/dist/MISRATool.d.ts +39 -5
- package/dist/MISRATool.d.ts.map +1 -1
- package/dist/MISRATool.js +102 -46
- package/dist/MISRATool.js.map +1 -1
- package/dist/StandardGuideline.d.ts +22 -0
- package/dist/StandardGuideline.d.ts.map +1 -0
- package/dist/StandardGuideline.js +12 -0
- package/dist/StandardGuideline.js.map +1 -0
- package/dist/ast-visitor/Context.d.ts +11 -0
- package/dist/ast-visitor/Context.d.ts.map +1 -0
- package/dist/ast-visitor/Context.js +15 -0
- package/dist/ast-visitor/Context.js.map +1 -0
- package/dist/ast-visitor/Visit.d.ts +23 -0
- package/dist/ast-visitor/Visit.d.ts.map +1 -0
- package/dist/ast-visitor/Visit.js +18 -0
- package/dist/ast-visitor/Visit.js.map +1 -0
- package/dist/ast-visitor/VisitWithContext.d.ts +32 -0
- package/dist/ast-visitor/VisitWithContext.d.ts.map +1 -0
- package/dist/ast-visitor/VisitWithContext.js +26 -0
- package/dist/ast-visitor/VisitWithContext.js.map +1 -0
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/rules/Section13_SideEffects/Rule_13_6_SafeSizeOfOperand.d.ts +27 -0
- package/dist/rules/Section13_SideEffects/Rule_13_6_SafeSizeOfOperand.d.ts.map +1 -0
- package/dist/rules/Section13_SideEffects/Rule_13_6_SafeSizeOfOperand.js +98 -0
- package/dist/rules/Section13_SideEffects/Rule_13_6_SafeSizeOfOperand.js.map +1 -0
- package/dist/rules/Section16_SwitchStatements/Rule_16_2_TopLevelSwitch.d.ts +45 -6
- package/dist/rules/Section16_SwitchStatements/Rule_16_2_TopLevelSwitch.d.ts.map +1 -1
- package/dist/rules/Section16_SwitchStatements/Rule_16_2_TopLevelSwitch.js +91 -8
- package/dist/rules/Section16_SwitchStatements/Rule_16_2_TopLevelSwitch.js.map +1 -1
- package/dist/rules/Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.d.ts +15 -5
- package/dist/rules/Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.d.ts.map +1 -1
- package/dist/rules/Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.js +20 -6
- package/dist/rules/Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.js.map +1 -1
- package/dist/rules/Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.d.ts +11 -5
- package/dist/rules/Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.d.ts.map +1 -1
- package/dist/rules/Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.js +13 -10
- package/dist/rules/Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.js.map +1 -1
- package/dist/rules/Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.d.ts +11 -6
- package/dist/rules/Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.d.ts.map +1 -1
- package/dist/rules/Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.js +19 -11
- package/dist/rules/Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.js.map +1 -1
- package/dist/rules/Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.d.ts +15 -5
- package/dist/rules/Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.d.ts.map +1 -1
- package/dist/rules/Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.js +24 -10
- package/dist/rules/Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.js.map +1 -1
- package/dist/rules/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.d.ts +22 -6
- package/dist/rules/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.d.ts.map +1 -1
- package/dist/rules/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.js +37 -10
- package/dist/rules/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.js.map +1 -1
- package/dist/rules/Section17_Functions/Rule_17_3_ImplicitFunction.d.ts +66 -0
- package/dist/rules/Section17_Functions/Rule_17_3_ImplicitFunction.d.ts.map +1 -0
- package/dist/rules/Section17_Functions/Rule_17_3_ImplicitFunction.js +209 -0
- package/dist/rules/Section17_Functions/Rule_17_3_ImplicitFunction.js.map +1 -0
- package/dist/rules/Section17_Functions/Rule_17_4_NonVoidReturn.d.ts +37 -12
- package/dist/rules/Section17_Functions/Rule_17_4_NonVoidReturn.d.ts.map +1 -1
- package/dist/rules/Section17_Functions/Rule_17_4_NonVoidReturn.js +112 -39
- package/dist/rules/Section17_Functions/Rule_17_4_NonVoidReturn.js.map +1 -1
- package/dist/rules/Section17_Functions/Rule_17_6_StaticArraySizeParam.d.ts +15 -5
- package/dist/rules/Section17_Functions/Rule_17_6_StaticArraySizeParam.d.ts.map +1 -1
- package/dist/rules/Section17_Functions/Rule_17_6_StaticArraySizeParam.js +21 -7
- package/dist/rules/Section17_Functions/Rule_17_6_StaticArraySizeParam.js.map +1 -1
- package/dist/rules/Section17_Functions/Rule_17_7_UnusedReturnValue.d.ts +11 -6
- package/dist/rules/Section17_Functions/Rule_17_7_UnusedReturnValue.d.ts.map +1 -1
- package/dist/rules/Section17_Functions/Rule_17_7_UnusedReturnValue.js +17 -8
- package/dist/rules/Section17_Functions/Rule_17_7_UnusedReturnValue.js.map +1 -1
- package/dist/rules/Section21-StandardLibraries/DisallowedStdLibFunctionRule.d.ts +105 -0
- package/dist/rules/Section21-StandardLibraries/DisallowedStdLibFunctionRule.d.ts.map +1 -0
- package/dist/rules/Section21-StandardLibraries/DisallowedStdLibFunctionRule.js +258 -0
- package/dist/rules/Section21-StandardLibraries/DisallowedStdLibFunctionRule.js.map +1 -0
- package/dist/rules/Section21-StandardLibraries/Rule_21_10_NoTimeDateFunctions.d.ts +25 -0
- package/dist/rules/Section21-StandardLibraries/Rule_21_10_NoTimeDateFunctions.d.ts.map +1 -0
- package/dist/rules/Section21-StandardLibraries/Rule_21_10_NoTimeDateFunctions.js +27 -0
- package/dist/rules/Section21-StandardLibraries/Rule_21_10_NoTimeDateFunctions.js.map +1 -0
- package/dist/rules/Section21-StandardLibraries/Rule_21_11_NoTgmathFunctions.d.ts +29 -0
- package/dist/rules/Section21-StandardLibraries/Rule_21_11_NoTgmathFunctions.d.ts.map +1 -0
- package/dist/rules/Section21-StandardLibraries/Rule_21_11_NoTgmathFunctions.js +31 -0
- package/dist/rules/Section21-StandardLibraries/Rule_21_11_NoTgmathFunctions.js.map +1 -0
- package/dist/rules/Section21-StandardLibraries/Rule_21_3_NoDynamicMemory.d.ts +25 -0
- package/dist/rules/Section21-StandardLibraries/Rule_21_3_NoDynamicMemory.d.ts.map +1 -0
- package/dist/rules/Section21-StandardLibraries/Rule_21_3_NoDynamicMemory.js +27 -0
- package/dist/rules/Section21-StandardLibraries/Rule_21_3_NoDynamicMemory.js.map +1 -0
- package/dist/rules/Section21-StandardLibraries/Rule_21_6_NoStdIOFunctions.d.ts +25 -0
- package/dist/rules/Section21-StandardLibraries/Rule_21_6_NoStdIOFunctions.d.ts.map +1 -0
- package/dist/rules/Section21-StandardLibraries/Rule_21_6_NoStdIOFunctions.js +27 -0
- package/dist/rules/Section21-StandardLibraries/Rule_21_6_NoStdIOFunctions.js.map +1 -0
- package/dist/rules/Section21-StandardLibraries/Rule_21_7_NoNumericStringConversions.d.ts +25 -0
- package/dist/rules/Section21-StandardLibraries/Rule_21_7_NoNumericStringConversions.d.ts.map +1 -0
- package/dist/rules/Section21-StandardLibraries/Rule_21_7_NoNumericStringConversions.js +27 -0
- package/dist/rules/Section21-StandardLibraries/Rule_21_7_NoNumericStringConversions.js.map +1 -0
- package/dist/rules/Section21-StandardLibraries/Rule_21_8_NoProcessControlFunctions.d.ts +30 -0
- package/dist/rules/Section21-StandardLibraries/Rule_21_8_NoProcessControlFunctions.d.ts.map +1 -0
- package/dist/rules/Section21-StandardLibraries/Rule_21_8_NoProcessControlFunctions.js +32 -0
- package/dist/rules/Section21-StandardLibraries/Rule_21_8_NoProcessControlFunctions.js.map +1 -0
- package/dist/rules/Section21-StandardLibraries/Rule_21_9_NoGenericSearchOrSort.d.ts +25 -0
- package/dist/rules/Section21-StandardLibraries/Rule_21_9_NoGenericSearchOrSort.d.ts.map +1 -0
- package/dist/rules/Section21-StandardLibraries/Rule_21_9_NoGenericSearchOrSort.js +27 -0
- package/dist/rules/Section21-StandardLibraries/Rule_21_9_NoGenericSearchOrSort.js.map +1 -0
- package/dist/rules/Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.d.ts +6 -14
- package/dist/rules/Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.d.ts.map +1 -1
- package/dist/rules/Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.js +17 -27
- package/dist/rules/Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.js.map +1 -1
- package/dist/rules/Section2_UnusedCode/Rule_2_4_UnusedTagDecl.d.ts +13 -7
- package/dist/rules/Section2_UnusedCode/Rule_2_4_UnusedTagDecl.d.ts.map +1 -1
- package/dist/rules/Section2_UnusedCode/Rule_2_4_UnusedTagDecl.js +31 -17
- package/dist/rules/Section2_UnusedCode/Rule_2_4_UnusedTagDecl.js.map +1 -1
- package/dist/rules/Section2_UnusedCode/Rule_2_6_UnusedLabels.d.ts +26 -7
- package/dist/rules/Section2_UnusedCode/Rule_2_6_UnusedLabels.d.ts.map +1 -1
- package/dist/rules/Section2_UnusedCode/Rule_2_6_UnusedLabels.js +32 -14
- package/dist/rules/Section2_UnusedCode/Rule_2_6_UnusedLabels.js.map +1 -1
- package/dist/rules/Section2_UnusedCode/Rule_2_7_UnusedParameters.d.ts +48 -6
- package/dist/rules/Section2_UnusedCode/Rule_2_7_UnusedParameters.d.ts.map +1 -1
- package/dist/rules/Section2_UnusedCode/Rule_2_7_UnusedParameters.js +84 -34
- package/dist/rules/Section2_UnusedCode/Rule_2_7_UnusedParameters.js.map +1 -1
- package/dist/rules/Section3_Comments/Rule_3_1_CommentSequences.d.ts +24 -5
- package/dist/rules/Section3_Comments/Rule_3_1_CommentSequences.d.ts.map +1 -1
- package/dist/rules/Section3_Comments/Rule_3_1_CommentSequences.js +27 -7
- package/dist/rules/Section3_Comments/Rule_3_1_CommentSequences.js.map +1 -1
- package/dist/rules/Section5_Identifiers/IdentifierRenameRule.d.ts +46 -0
- package/dist/rules/Section5_Identifiers/IdentifierRenameRule.d.ts.map +1 -0
- package/dist/rules/Section5_Identifiers/IdentifierRenameRule.js +40 -0
- package/dist/rules/Section5_Identifiers/IdentifierRenameRule.js.map +1 -0
- package/dist/rules/Section5_Identifiers/Rule_5_1_DistinctExternalIdentifiers.d.ts +25 -0
- package/dist/rules/Section5_Identifiers/Rule_5_1_DistinctExternalIdentifiers.d.ts.map +1 -0
- package/dist/rules/Section5_Identifiers/Rule_5_1_DistinctExternalIdentifiers.js +46 -0
- package/dist/rules/Section5_Identifiers/Rule_5_1_DistinctExternalIdentifiers.js.map +1 -0
- package/dist/rules/Section5_Identifiers/Rule_5_6_UniqueTypedefNames.d.ts +26 -0
- package/dist/rules/Section5_Identifiers/Rule_5_6_UniqueTypedefNames.d.ts.map +1 -0
- package/dist/rules/Section5_Identifiers/Rule_5_6_UniqueTypedefNames.js +54 -0
- package/dist/rules/Section5_Identifiers/Rule_5_6_UniqueTypedefNames.js.map +1 -0
- package/dist/rules/Section5_Identifiers/Rule_5_7_UniqueTagNames.d.ts +27 -0
- package/dist/rules/Section5_Identifiers/Rule_5_7_UniqueTagNames.d.ts.map +1 -0
- package/dist/rules/Section5_Identifiers/Rule_5_7_UniqueTagNames.js +55 -0
- package/dist/rules/Section5_Identifiers/Rule_5_7_UniqueTagNames.js.map +1 -0
- package/dist/rules/Section5_Identifiers/Rule_5_8_UniqueExternalLinkIdentifiers.d.ts +24 -0
- package/dist/rules/Section5_Identifiers/Rule_5_8_UniqueExternalLinkIdentifiers.d.ts.map +1 -0
- package/dist/rules/Section5_Identifiers/Rule_5_8_UniqueExternalLinkIdentifiers.js +42 -0
- package/dist/rules/Section5_Identifiers/Rule_5_8_UniqueExternalLinkIdentifiers.js.map +1 -0
- package/dist/rules/Section5_Identifiers/Rule_5_9_UniqueInternalLinkIdentifiers.d.ts +24 -0
- package/dist/rules/Section5_Identifiers/Rule_5_9_UniqueInternalLinkIdentifiers.d.ts.map +1 -0
- package/dist/rules/Section5_Identifiers/Rule_5_9_UniqueInternalLinkIdentifiers.js +42 -0
- package/dist/rules/Section5_Identifiers/Rule_5_9_UniqueInternalLinkIdentifiers.js.map +1 -0
- package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_6_SingleExternalDefinition.d.ts +35 -0
- package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_6_SingleExternalDefinition.d.ts.map +1 -0
- package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_6_SingleExternalDefinition.js +98 -0
- package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_6_SingleExternalDefinition.js.map +1 -0
- package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_7_RestrictExternalLinkage.d.ts +35 -0
- package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_7_RestrictExternalLinkage.d.ts.map +1 -0
- package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_7_RestrictExternalLinkage.js +76 -0
- package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_7_RestrictExternalLinkage.js.map +1 -0
- package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_9_BlockScopeDefinition.d.ts +32 -0
- package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_9_BlockScopeDefinition.d.ts.map +1 -0
- package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_9_BlockScopeDefinition.js +57 -0
- package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_9_BlockScopeDefinition.js.map +1 -0
- package/dist/rules/UserConfigurableRule.d.ts +55 -0
- package/dist/rules/UserConfigurableRule.d.ts.map +1 -0
- package/dist/rules/UserConfigurableRule.js +16 -0
- package/dist/rules/UserConfigurableRule.js.map +1 -0
- package/dist/rules/index.d.ts +11 -18
- package/dist/rules/index.d.ts.map +1 -1
- package/dist/rules/index.js +47 -7
- package/dist/rules/index.js.map +1 -1
- package/dist/tests/Section17_Functions/misra_config.json +10 -0
- package/dist/tests/Section21-StandardLibraries/misra_config.json +88 -0
- package/dist/tests/Section21-StandardLibraries/problematic_misra_config.json +19 -0
- package/dist/tests/utils.d.ts +6 -3
- package/dist/tests/utils.d.ts.map +1 -1
- package/dist/tests/utils.js +33 -7
- package/dist/tests/utils.js.map +1 -1
- package/dist/utils/CallUtils.d.ts +15 -0
- package/dist/utils/CallUtils.d.ts.map +1 -0
- package/dist/utils/CallUtils.js +34 -0
- package/dist/utils/CallUtils.js.map +1 -0
- package/dist/utils/CommentUtils.d.ts +21 -0
- package/dist/utils/CommentUtils.d.ts.map +1 -0
- package/dist/utils/CommentUtils.js +27 -0
- package/dist/utils/CommentUtils.js.map +1 -0
- package/dist/utils/FileUtils.d.ts +51 -0
- package/dist/utils/FileUtils.d.ts.map +1 -0
- package/dist/utils/FileUtils.js +121 -0
- package/dist/utils/FileUtils.js.map +1 -0
- package/dist/utils/FunctionUtils.d.ts +25 -0
- package/dist/utils/FunctionUtils.d.ts.map +1 -0
- package/dist/utils/FunctionUtils.js +65 -0
- package/dist/utils/FunctionUtils.js.map +1 -0
- package/dist/utils/IdentifierUtils.d.ts +14 -0
- package/dist/utils/IdentifierUtils.d.ts.map +1 -0
- package/dist/utils/IdentifierUtils.js +87 -0
- package/dist/utils/IdentifierUtils.js.map +1 -0
- package/dist/utils/JoinpointUtils.d.ts +19 -0
- package/dist/utils/JoinpointUtils.d.ts.map +1 -0
- package/dist/utils/JoinpointUtils.js +46 -0
- package/dist/utils/JoinpointUtils.js.map +1 -0
- package/dist/utils/ProgramUtils.d.ts +14 -0
- package/dist/utils/ProgramUtils.d.ts.map +1 -0
- package/dist/utils/ProgramUtils.js +72 -0
- package/dist/utils/ProgramUtils.js.map +1 -0
- package/dist/utils/SwitchUtils.d.ts +21 -0
- package/dist/utils/SwitchUtils.d.ts.map +1 -0
- package/dist/utils/SwitchUtils.js +47 -0
- package/dist/utils/SwitchUtils.js.map +1 -0
- package/dist/utils/TypeDeclUtils.d.ts +35 -0
- package/dist/utils/TypeDeclUtils.d.ts.map +1 -0
- package/dist/utils/TypeDeclUtils.js +78 -0
- package/dist/utils/TypeDeclUtils.js.map +1 -0
- package/dist/utils/VarUtils.d.ts +19 -0
- package/dist/utils/VarUtils.d.ts.map +1 -0
- package/dist/utils/VarUtils.js +59 -0
- package/dist/utils/VarUtils.js.map +1 -0
- package/package.json +16 -6
- package/src/MISRA.ts +33 -17
- package/src/MISRAContext.ts +128 -30
- package/src/MISRARule.ts +61 -29
- package/src/MISRATool.ts +108 -42
- package/src/StandardGuideline.ts +23 -0
- package/src/ast-visitor/Context.ts +16 -0
- package/src/ast-visitor/Visit.ts +26 -0
- package/src/ast-visitor/VisitWithContext.ts +42 -0
- package/src/main.ts +1 -1
- package/src/rules/Section13_SideEffects/Rule_13_6_SafeSizeOfOperand.ts +114 -0
- package/src/rules/Section16_SwitchStatements/Rule_16_2_TopLevelSwitch.ts +103 -13
- package/src/rules/Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.ts +24 -10
- package/src/rules/Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.ts +17 -8
- package/src/rules/Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.ts +20 -12
- package/src/rules/Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.ts +23 -12
- package/src/rules/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.ts +44 -13
- package/src/rules/Section17_Functions/Rule_17_3_ImplicitFunction.ts +153 -104
- package/src/rules/Section17_Functions/Rule_17_4_NonVoidReturn.ts +114 -44
- package/src/rules/Section17_Functions/Rule_17_6_StaticArraySizeParam.ts +27 -10
- package/src/rules/Section17_Functions/Rule_17_7_UnusedReturnValue.ts +20 -12
- package/src/rules/Section21-StandardLibraries/DisallowedStdLibFunctionRule.ts +317 -0
- package/src/rules/Section21-StandardLibraries/Rule_21_10_NoTimeDateFunctions.ts +30 -0
- package/src/rules/Section21-StandardLibraries/Rule_21_11_NoTgmathFunctions.ts +35 -0
- package/src/rules/Section21-StandardLibraries/Rule_21_3_NoDynamicMemory.ts +30 -0
- package/src/rules/Section21-StandardLibraries/Rule_21_6_NoStdIOFunctions.ts +30 -0
- package/src/rules/Section21-StandardLibraries/Rule_21_7_NoNumericStringConversions.ts +29 -0
- package/src/rules/Section21-StandardLibraries/Rule_21_8_NoProcessControlFunctions.ts +36 -0
- package/src/rules/Section21-StandardLibraries/Rule_21_9_NoGenericSearchOrSort.ts +30 -0
- package/src/rules/Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.ts +14 -29
- package/src/rules/Section2_UnusedCode/Rule_2_4_UnusedTagDecl.ts +33 -19
- package/src/rules/Section2_UnusedCode/Rule_2_6_UnusedLabels.ts +33 -20
- package/src/rules/Section2_UnusedCode/Rule_2_7_UnusedParameters.ts +90 -45
- package/src/rules/Section3_Comments/Rule_3_1_CommentSequences.ts +27 -8
- package/src/rules/Section5_Identifiers/IdentifierRenameRule.ts +63 -0
- package/src/rules/Section5_Identifiers/Rule_5_1_DistinctExternalIdentifiers.ts +52 -0
- package/src/rules/Section5_Identifiers/Rule_5_6_UniqueTypedefNames.ts +62 -0
- package/src/rules/Section5_Identifiers/Rule_5_7_UniqueTagNames.ts +61 -0
- package/src/rules/Section5_Identifiers/Rule_5_8_UniqueExternalLinkIdentifiers.ts +47 -0
- package/src/rules/Section5_Identifiers/Rule_5_9_UniqueInternalLinkIdentifiers.ts +47 -0
- package/src/rules/Section8_DeclarationsAndDefinitions/Rule_8_6_SingleExternalDefinition.ts +118 -0
- package/src/rules/Section8_DeclarationsAndDefinitions/Rule_8_7_RestrictExternalLinkage.ts +89 -0
- package/src/rules/Section8_DeclarationsAndDefinitions/Rule_8_9_BlockScopeDefinition.ts +65 -0
- package/src/rules/UserConfigurableRule.ts +60 -0
- package/src/rules/index.ts +45 -7
- package/src/tests/Section13_SideEffects/Rule_13_6_SafeSizeOfOperand.test.ts +114 -0
- package/src/tests/Section16_SwitchStatements/Rule_16_2_TopLevelSwitch.test.ts +7 -5
- package/src/tests/Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.test.ts +40 -13
- package/src/tests/Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.test.ts +10 -12
- package/src/tests/Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.test.ts +5 -5
- package/src/tests/Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.test.ts +5 -5
- package/src/tests/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.test.ts +5 -5
- package/src/tests/Section17_Functions/Rule_17_3_ImplicitFunctions.test.ts +68 -40
- package/src/tests/Section17_Functions/Rule_17_3_ImplicitFunctions_MissingConfig.test.ts +98 -0
- package/src/tests/Section17_Functions/Rule_17_3_ImplicitFunctions_ProblematicConfig.test.ts +71 -0
- package/src/tests/Section17_Functions/Rule_17_4_NonVoidReturn.test.ts +103 -49
- package/src/tests/Section17_Functions/Rule_17_4_NonVoidReturn_MissingConfig.test.ts +7 -7
- package/src/tests/Section17_Functions/Rule_17_6_StaticArraySizeParam.test.ts +36 -7
- package/src/tests/Section17_Functions/Rule_17_7_UnusedReturnValue.test.ts +25 -21
- package/src/tests/Section17_Functions/misra_config.json +4 -3
- package/src/tests/Section21-StandardLibraries/Rule_21_10_NoTimeDateFunctions.test.ts +62 -0
- package/src/tests/Section21-StandardLibraries/Rule_21_11_NoTgmathFunctions.test.ts +67 -0
- package/src/tests/Section21-StandardLibraries/Rule_21_3_NoDynamicMemory.test.ts +84 -0
- package/src/tests/Section21-StandardLibraries/Rule_21_3_NoDynamicMemory_MissingConfig.test.ts +33 -0
- package/src/tests/Section21-StandardLibraries/Rule_21_3_NoDynamicMemory_ProblematicConfig.test.ts +71 -0
- package/src/tests/Section21-StandardLibraries/Rule_21_6_NoStdIOFunctions.test.ts +63 -0
- package/src/tests/Section21-StandardLibraries/Rule_21_7_NoNumericStringConversions.test.ts +91 -0
- package/src/tests/Section21-StandardLibraries/Rule_21_8_NoProcessControlFunctions.test.ts +65 -0
- package/src/tests/Section21-StandardLibraries/Rule_21_9_NoGenericSearchOrSort.test.ts +89 -0
- package/src/tests/Section21-StandardLibraries/misra_config.json +88 -0
- package/src/tests/Section21-StandardLibraries/problematic_misra_config.json +19 -0
- package/src/tests/Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.test.ts +148 -113
- package/src/tests/Section2_UnusedCode/Rule_2_4_UnusedTagDecl.test.ts +243 -163
- package/src/tests/Section2_UnusedCode/Rule_2_6_UnusedLabels.test.ts +32 -20
- package/src/tests/Section2_UnusedCode/Rule_2_7_UnusedParameters.test.ts +36 -30
- package/src/tests/Section3_Comments/Rule_3_1_CommentSequences.test.ts +37 -8
- package/src/tests/Section5_Identifiers/Rule_5_1_DistinctExternalIdentifiers.test.ts +78 -0
- package/src/tests/Section5_Identifiers/Rule_5_6_UniqueTypedefNames.test.ts +120 -0
- package/src/tests/Section5_Identifiers/Rule_5_7_UniqueTagNames.test.ts +51 -0
- package/src/tests/Section5_Identifiers/Rule_5_8_UniqueExternalLinkIdentifiers.test.ts +73 -0
- package/src/tests/Section5_Identifiers/Rule_5_9_UniqueInternalLinkIdentifiers.test.ts +97 -0
- package/src/tests/Section8_DeclarationsAndDefinitions/Rule_8_6_SingleExternalDefinition.test.ts +160 -0
- package/src/tests/Section8_DeclarationsAndDefinitions/Rule_8_7_RestrictExternalLinkage.test.ts +46 -0
- package/src/tests/Section8_DeclarationsAndDefinitions/Rule_8_9_BlockScopeDefinition.test.ts +69 -0
- package/src/tests/utils.ts +32 -7
- package/src/utils/CallUtils.ts +40 -0
- package/src/utils/CommentUtils.ts +29 -0
- package/src/utils/FileUtils.ts +141 -0
- package/src/utils/FunctionUtils.ts +75 -0
- package/src/utils/IdentifierUtils.ts +94 -0
- package/src/utils/JoinpointUtils.ts +53 -0
- package/src/utils/ProgramUtils.ts +83 -0
- package/src/utils/SwitchUtils.ts +52 -0
- package/src/utils/TypeDeclUtils.ts +89 -0
- package/src/utils/VarUtils.ts +70 -0
- package/tsconfig.json +2 -1
- package/src/rules/Section20-PreprocessingDirectives/Rule_20_2_InvalidHeaderFileName.ts +0 -120
- package/src/rules/Section3_Comments/Rule_3_2_LineSplicing.ts +0 -36
- package/src/utils/utils.ts +0 -280
|
@@ -1,31 +1,49 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FunctionJp } from "@specs-feup/clava/api/Joinpoints.js";
|
|
2
2
|
import MISRARule from "../../MISRARule.js";
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
3
|
+
import { AnalysisType, MISRATransformationReport, MISRATransformationType } from "../../MISRA.js";
|
|
4
|
+
import { getUnusedLabels } from "../../utils/FunctionUtils.js";
|
|
5
5
|
/**
|
|
6
|
-
* Rule 2.6:
|
|
7
|
-
*
|
|
6
|
+
* MISRA-C Rule 2.6: A function should not contain unused label declarations.
|
|
7
|
+
*
|
|
8
8
|
*/
|
|
9
9
|
export default class Rule_2_6_UnusedLabels extends MISRARule {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Scope of analysis
|
|
12
|
+
*/
|
|
13
|
+
analysisType = AnalysisType.SINGLE_TRANSLATION_UNIT;
|
|
14
|
+
/**
|
|
15
|
+
* @returns Rule identifier according to MISRA-C:2012
|
|
16
|
+
*/
|
|
17
|
+
get name() {
|
|
18
|
+
return "2.6";
|
|
15
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Checks if the given joinpoint represents a function with unused labels.
|
|
22
|
+
* A tag is considered unused if it is declared but not referenced by any goto statement.
|
|
23
|
+
*
|
|
24
|
+
* @param $jp - Joinpoint to analyze
|
|
25
|
+
* @param logErrors - [logErrors=false] - Whether to log errors if a violation is detected
|
|
26
|
+
* @returns Returns true if the joinpoint violates the rule, false otherwise
|
|
27
|
+
*/
|
|
16
28
|
match($jp, logErrors = false) {
|
|
17
29
|
if (!($jp instanceof FunctionJp))
|
|
18
30
|
return false;
|
|
19
|
-
const unusedLabels =
|
|
31
|
+
const unusedLabels = getUnusedLabels($jp);
|
|
20
32
|
if (logErrors) {
|
|
21
|
-
unusedLabels.forEach(label => this.logMISRAError(label, `Label ${label.decl.name} is unused in function ${$jp.name}.`));
|
|
33
|
+
unusedLabels.forEach(label => this.logMISRAError(label, `Label '${label.decl.name}' is unused in function ${$jp.name}.`));
|
|
22
34
|
}
|
|
23
35
|
return unusedLabels.length > 0;
|
|
24
36
|
}
|
|
25
|
-
|
|
37
|
+
/**
|
|
38
|
+
* Removes all unused labels if the provided joinpoint represents a function
|
|
39
|
+
*
|
|
40
|
+
* @param $jp - Joinpoint to transform
|
|
41
|
+
* @returns Report detailing the transformation result
|
|
42
|
+
*/
|
|
43
|
+
apply($jp) {
|
|
26
44
|
if (!this.match($jp))
|
|
27
45
|
return new MISRATransformationReport(MISRATransformationType.NoChange);
|
|
28
|
-
const unusedLabels =
|
|
46
|
+
const unusedLabels = getUnusedLabels($jp);
|
|
29
47
|
for (const label of unusedLabels) {
|
|
30
48
|
label.detach();
|
|
31
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Rule_2_6_UnusedLabels.js","sourceRoot":"","sources":["../../../src/rules/Section2_UnusedCode/Rule_2_6_UnusedLabels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"Rule_2_6_UnusedLabels.js","sourceRoot":"","sources":["../../../src/rules/Section2_UnusedCode/Rule_2_6_UnusedLabels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,qCAAqC,CAAC;AAC5E,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAClG,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,SAAS;IACxD;;OAEG;IACM,YAAY,GAAG,YAAY,CAAC,uBAAuB,CAAC;IAE7D;;OAEG;IACH,IAAa,IAAI;QACb,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,GAAc,EAAE,YAAqB,KAAK;QAC5C,IAAI,CAAC,CAAC,GAAG,YAAY,UAAU,CAAC;YAC5B,OAAO,KAAK,CAAC;QAEjB,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,SAAS,EAAE,CAAC;YACZ,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CACzB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,UAAU,KAAK,CAAC,IAAI,CAAC,IAAI,2BAA2B,GAAG,CAAC,IAAI,GAAG,CAAC,CAC7F,CAAA;QACL,CAAC;QACD,OAAO,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IACnC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,GAAc;QAChB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YAChB,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAE3E,MAAM,YAAY,GAAG,eAAe,CAAC,GAAiB,CAAC,CAAC;QACxD,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;YAC/B,KAAK,CAAC,MAAM,EAAE,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,CAAC;IACnF,CAAC;CACJ"}
|
|
@@ -1,13 +1,55 @@
|
|
|
1
1
|
import { Joinpoint } from "@specs-feup/clava/api/Joinpoints.js";
|
|
2
2
|
import MISRARule from "../../MISRARule.js";
|
|
3
|
-
import
|
|
4
|
-
|
|
3
|
+
import { AnalysisType, MISRATransformationReport } from "../../MISRA.js";
|
|
4
|
+
/**
|
|
5
|
+
* MISRA-C Rule 2.7: There should be no unused parameters in functions.
|
|
6
|
+
*/
|
|
5
7
|
export default class Rule_2_7_UnusedParameters extends MISRARule {
|
|
6
|
-
|
|
8
|
+
#private;
|
|
9
|
+
/**
|
|
10
|
+
* Scope of analysis
|
|
11
|
+
*/
|
|
12
|
+
readonly analysisType = AnalysisType.SINGLE_TRANSLATION_UNIT;
|
|
13
|
+
/**
|
|
14
|
+
* @returns Rule identifier according to MISRA-C:2012
|
|
15
|
+
*/
|
|
16
|
+
get name(): string;
|
|
17
|
+
/**
|
|
18
|
+
* Checks if the program contains function with unused parameters.
|
|
19
|
+
* A parameter is considered unused if it is never referenced anywhere in the function.
|
|
20
|
+
*
|
|
21
|
+
* @param $jp - Joinpoint to analyze
|
|
22
|
+
* @param logErrors - [logErrors=false] - Whether to log errors if a violation is detected
|
|
23
|
+
* @returns Returns true if the joinpoint violates the rule, false otherwise
|
|
24
|
+
*/
|
|
25
|
+
match($jp: Joinpoint, logErrors?: boolean): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Removes all unused parameters from functions in the program
|
|
28
|
+
*
|
|
29
|
+
* @param $jp - Joinpoint to transform
|
|
30
|
+
* @returns Report detailing the transformation result
|
|
31
|
+
*/
|
|
32
|
+
apply($jp: Joinpoint): MISRATransformationReport;
|
|
33
|
+
/**
|
|
34
|
+
* Gets all unused parameters from a function joinpoint
|
|
35
|
+
*
|
|
36
|
+
* @param func - Function joinpoint to analyze
|
|
37
|
+
* @returns Returns a list of all unused parameters from a function.
|
|
38
|
+
*/
|
|
7
39
|
private getUnusedParams;
|
|
40
|
+
/**
|
|
41
|
+
* Gets all used parameters from a function joinpoint
|
|
42
|
+
*
|
|
43
|
+
* @param func - Function joinpoint to analyze
|
|
44
|
+
* @returns Returns a list of parameters that are used within a function.
|
|
45
|
+
*/
|
|
8
46
|
private getUsedParams;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
47
|
+
/**
|
|
48
|
+
* Returns the positions (indexes) of parameters that are used in the given function joinpoint.
|
|
49
|
+
*
|
|
50
|
+
* @param func - Function joinpoint to analyze
|
|
51
|
+
* @returns returns a list of numbers representing the indexes of used parameters.
|
|
52
|
+
*/
|
|
53
|
+
private getUnusedParamsPositions;
|
|
12
54
|
}
|
|
13
55
|
//# sourceMappingURL=Rule_2_7_UnusedParameters.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Rule_2_7_UnusedParameters.d.ts","sourceRoot":"","sources":["../../../src/rules/Section2_UnusedCode/Rule_2_7_UnusedParameters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,SAAS,
|
|
1
|
+
{"version":3,"file":"Rule_2_7_UnusedParameters.d.ts","sourceRoot":"","sources":["../../../src/rules/Section2_UnusedCode/Rule_2_7_UnusedParameters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,SAAS,EAAgC,MAAM,qCAAqC,CAAC;AAC1G,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAA2B,MAAM,gBAAgB,CAAC;AAGlG;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,yBAA0B,SAAQ,SAAS;;IAC5D;;OAEG;IACH,QAAQ,CAAC,YAAY,wCAAwC;IAE7D;;OAEG;IACH,IAAa,IAAI,IAAI,MAAM,CAE1B;IAID;;;;;;;OAOG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO;IAY1D;;;;;OAKG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS,GAAG,yBAAyB;IAkBhD;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAOvB;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAOrB;;;;;OAKG;IACH,OAAO,CAAC,wBAAwB;CAWnC"}
|
|
@@ -1,53 +1,103 @@
|
|
|
1
1
|
import { FunctionJp, Varref, Call } from "@specs-feup/clava/api/Joinpoints.js";
|
|
2
2
|
import MISRARule from "../../MISRARule.js";
|
|
3
3
|
import Query from "@specs-feup/lara/api/weaver/Query.js";
|
|
4
|
-
import { MISRATransformationReport, MISRATransformationType } from "../../MISRA.js";
|
|
5
|
-
import { getParamReferences } from "../../utils/
|
|
4
|
+
import { AnalysisType, MISRATransformationReport, MISRATransformationType } from "../../MISRA.js";
|
|
5
|
+
import { getDirectParamReferences, getParamReferences, getVLAFieldParamReferences } from "../../utils/FunctionUtils.js";
|
|
6
|
+
/**
|
|
7
|
+
* MISRA-C Rule 2.7: There should be no unused parameters in functions.
|
|
8
|
+
*/
|
|
6
9
|
export default class Rule_2_7_UnusedParameters extends MISRARule {
|
|
7
|
-
|
|
8
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Scope of analysis
|
|
12
|
+
*/
|
|
13
|
+
analysisType = AnalysisType.SINGLE_TRANSLATION_UNIT;
|
|
14
|
+
/**
|
|
15
|
+
* @returns Rule identifier according to MISRA-C:2012
|
|
16
|
+
*/
|
|
17
|
+
get name() {
|
|
18
|
+
return "2.7";
|
|
9
19
|
}
|
|
20
|
+
#unusedParams = [];
|
|
21
|
+
/**
|
|
22
|
+
* Checks if the program contains function with unused parameters.
|
|
23
|
+
* A parameter is considered unused if it is never referenced anywhere in the function.
|
|
24
|
+
*
|
|
25
|
+
* @param $jp - Joinpoint to analyze
|
|
26
|
+
* @param logErrors - [logErrors=false] - Whether to log errors if a violation is detected
|
|
27
|
+
* @returns Returns true if the joinpoint violates the rule, false otherwise
|
|
28
|
+
*/
|
|
29
|
+
match($jp, logErrors = false) {
|
|
30
|
+
if (!($jp instanceof FunctionJp && $jp.isImplementation))
|
|
31
|
+
return false;
|
|
32
|
+
const nonCompliant = $jp.params.some((param) => getParamReferences(param, $jp).length === 0);
|
|
33
|
+
if (logErrors && nonCompliant) {
|
|
34
|
+
this.#unusedParams = this.getUnusedParams($jp);
|
|
35
|
+
this.#unusedParams.forEach(param => this.logMISRAError(param, `Parameter '${param.name}' is unused in function '${$jp.name}'.`));
|
|
36
|
+
}
|
|
37
|
+
return nonCompliant;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Removes all unused parameters from functions in the program
|
|
41
|
+
*
|
|
42
|
+
* @param $jp - Joinpoint to transform
|
|
43
|
+
* @returns Report detailing the transformation result
|
|
44
|
+
*/
|
|
45
|
+
apply($jp) {
|
|
46
|
+
if (!this.match($jp))
|
|
47
|
+
return new MISRATransformationReport(MISRATransformationType.NoChange);
|
|
48
|
+
const funcJp = $jp;
|
|
49
|
+
const usedParams = this.getUsedParams(funcJp);
|
|
50
|
+
const unusedParamsPosition = this.getUnusedParamsPositions(funcJp);
|
|
51
|
+
const calls = Query.search(Call, { function: jp => jp?.astId === funcJp.astId }).get();
|
|
52
|
+
funcJp.setParams(usedParams);
|
|
53
|
+
for (const call of calls) {
|
|
54
|
+
const unusedArgs = unusedParamsPosition.map(i => call.args[i]);
|
|
55
|
+
unusedArgs.forEach(arg => arg.detach());
|
|
56
|
+
}
|
|
57
|
+
return new MISRATransformationReport(MISRATransformationType.DescendantChange);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Gets all unused parameters from a function joinpoint
|
|
61
|
+
*
|
|
62
|
+
* @param func - Function joinpoint to analyze
|
|
63
|
+
* @returns Returns a list of all unused parameters from a function.
|
|
64
|
+
*/
|
|
10
65
|
getUnusedParams(func) {
|
|
11
|
-
return func.params.filter(
|
|
66
|
+
return func.params.filter((param) => {
|
|
67
|
+
if (getDirectParamReferences(param, func).length > 0)
|
|
68
|
+
return false;
|
|
69
|
+
return getVLAFieldParamReferences(param, func).length === 0;
|
|
70
|
+
});
|
|
12
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* Gets all used parameters from a function joinpoint
|
|
74
|
+
*
|
|
75
|
+
* @param func - Function joinpoint to analyze
|
|
76
|
+
* @returns Returns a list of parameters that are used within a function.
|
|
77
|
+
*/
|
|
13
78
|
getUsedParams(func) {
|
|
14
|
-
return func.params.filter(
|
|
79
|
+
return func.params.filter((param) => {
|
|
80
|
+
if (getDirectParamReferences(param, func).length > 0)
|
|
81
|
+
return true;
|
|
82
|
+
return getVLAFieldParamReferences(param, func).length > 0;
|
|
83
|
+
});
|
|
15
84
|
}
|
|
16
|
-
|
|
85
|
+
/**
|
|
86
|
+
* Returns the positions (indexes) of parameters that are used in the given function joinpoint.
|
|
87
|
+
*
|
|
88
|
+
* @param func - Function joinpoint to analyze
|
|
89
|
+
* @returns returns a list of numbers representing the indexes of used parameters.
|
|
90
|
+
*/
|
|
91
|
+
getUnusedParamsPositions(func) {
|
|
17
92
|
let result = [];
|
|
18
93
|
for (let i = 0; i < func.params.length; i++) {
|
|
19
94
|
const param = func.params[i];
|
|
20
|
-
|
|
95
|
+
const varRefs = Query.searchFrom(func, Varref, { decl: jp => jp?.astId === param.astId }).get();
|
|
96
|
+
if (varRefs.length === 0) {
|
|
21
97
|
result.push(i);
|
|
22
98
|
}
|
|
23
99
|
}
|
|
24
100
|
return result;
|
|
25
101
|
}
|
|
26
|
-
match($jp, logErrors = false) {
|
|
27
|
-
if (!($jp instanceof FunctionJp && $jp.isImplementation))
|
|
28
|
-
return false;
|
|
29
|
-
const unusedParams = this.getUnusedParams($jp);
|
|
30
|
-
if (logErrors) {
|
|
31
|
-
unusedParams.forEach(param => this.logMISRAError(param, `Parameter '${param.name}' is unused in function ${$jp.name}.`));
|
|
32
|
-
}
|
|
33
|
-
return unusedParams.length > 0;
|
|
34
|
-
}
|
|
35
|
-
transform($jp) {
|
|
36
|
-
if (!this.match($jp))
|
|
37
|
-
return new MISRATransformationReport(MISRATransformationType.NoChange);
|
|
38
|
-
const usedParams = this.getUsedParams($jp);
|
|
39
|
-
const usedParamsPositions = this.getUsedParamsPositions($jp);
|
|
40
|
-
const calls = Query.search(Call, { function: jp => jp.astId === $jp.astId }).get();
|
|
41
|
-
$jp.setParams(usedParams);
|
|
42
|
-
for (const funcDecl of $jp.declarationJps) {
|
|
43
|
-
funcDecl.setParams(usedParams);
|
|
44
|
-
}
|
|
45
|
-
for (const call of calls) {
|
|
46
|
-
const newArgs = usedParamsPositions.map(i => call.args[i]);
|
|
47
|
-
const newCall = $jp.newCall(newArgs);
|
|
48
|
-
call.replaceWith(newCall);
|
|
49
|
-
}
|
|
50
|
-
return new MISRATransformationReport(MISRATransformationType.DescendantChange);
|
|
51
|
-
}
|
|
52
102
|
}
|
|
53
103
|
//# sourceMappingURL=Rule_2_7_UnusedParameters.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Rule_2_7_UnusedParameters.js","sourceRoot":"","sources":["../../../src/rules/Section2_UnusedCode/Rule_2_7_UnusedParameters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAoB,MAAM,EAAE,IAAI,
|
|
1
|
+
{"version":3,"file":"Rule_2_7_UnusedParameters.js","sourceRoot":"","sources":["../../../src/rules/Section2_UnusedCode/Rule_2_7_UnusedParameters.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,32 @@
|
|
|
1
1
|
import { Joinpoint } from "@specs-feup/clava/api/Joinpoints.js";
|
|
2
2
|
import MISRARule from "../../MISRARule.js";
|
|
3
|
-
import
|
|
4
|
-
import { MISRATransformationReport } from "../../MISRA.js";
|
|
3
|
+
import { AnalysisType, MISRATransformationReport } from "../../MISRA.js";
|
|
5
4
|
/**
|
|
6
|
-
* MISRA Rule 3.1:
|
|
5
|
+
* MISRA-C Rule 3.1: The character sequences /* an d // shall not be used within a comment.
|
|
7
6
|
*/
|
|
8
7
|
export default class Rule_3_1_CommentSequences extends MISRARule {
|
|
9
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Scope of analysis
|
|
10
|
+
*/
|
|
11
|
+
readonly analysisType = AnalysisType.SINGLE_TRANSLATION_UNIT;
|
|
12
|
+
/**
|
|
13
|
+
* @returns Rule identifier according to MISRA-C:2012
|
|
14
|
+
*/
|
|
15
|
+
get name(): string;
|
|
16
|
+
/**
|
|
17
|
+
* Checks if given joinpoint contains disallowed character sequences in comments.
|
|
18
|
+
*
|
|
19
|
+
* @param $jp - Joinpoint to analyze
|
|
20
|
+
* @param logErrors - [logErrors=false] - Whether to log errors if a violation is detected
|
|
21
|
+
* @returns Returns true if the joinpoint violates the rule, false otherwise
|
|
22
|
+
*/
|
|
10
23
|
match($jp: Joinpoint, logErrors?: boolean): boolean;
|
|
11
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Transforms the given joinpoint if it represents a joinpoint containing disallowed character sequences in comments.
|
|
26
|
+
*
|
|
27
|
+
* @param $jp - Joinpoint to transform
|
|
28
|
+
* @returns Report detailing the transformation result
|
|
29
|
+
*/
|
|
30
|
+
apply($jp: Joinpoint): MISRATransformationReport;
|
|
12
31
|
}
|
|
13
32
|
//# sourceMappingURL=Rule_3_1_CommentSequences.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Rule_3_1_CommentSequences.d.ts","sourceRoot":"","sources":["../../../src/rules/Section3_Comments/Rule_3_1_CommentSequences.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"Rule_3_1_CommentSequences.d.ts","sourceRoot":"","sources":["../../../src/rules/Section3_Comments/Rule_3_1_CommentSequences.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAChE,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAA2B,MAAM,gBAAgB,CAAC;AAElG;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,yBAA0B,SAAQ,SAAS;IAC5D;;OAEG;IACH,QAAQ,CAAC,YAAY,wCAAwC;IAE5D;;MAEE;IACH,IAAa,IAAI,IAAI,MAAM,CAE1B;IAED;;;;;;OAMG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO;IAa1D;;;;;OAKG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS,GAAG,yBAAyB;CAYnD"}
|
|
@@ -1,22 +1,42 @@
|
|
|
1
1
|
import MISRARule from "../../MISRARule.js";
|
|
2
|
-
import { isInlineComment, getComments } from "../../utils/
|
|
3
|
-
import { MISRATransformationReport, MISRATransformationType } from "../../MISRA.js";
|
|
2
|
+
import { isInlineComment, getComments } from "../../utils/CommentUtils.js";
|
|
3
|
+
import { AnalysisType, MISRATransformationReport, MISRATransformationType } from "../../MISRA.js";
|
|
4
4
|
/**
|
|
5
|
-
* MISRA Rule 3.1:
|
|
5
|
+
* MISRA-C Rule 3.1: The character sequences /* an d // shall not be used within a comment.
|
|
6
6
|
*/
|
|
7
7
|
export default class Rule_3_1_CommentSequences extends MISRARule {
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Scope of analysis
|
|
10
|
+
*/
|
|
11
|
+
analysisType = AnalysisType.SINGLE_TRANSLATION_UNIT;
|
|
12
|
+
/**
|
|
13
|
+
* @returns Rule identifier according to MISRA-C:2012
|
|
14
|
+
*/
|
|
15
|
+
get name() {
|
|
16
|
+
return "3.1";
|
|
10
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Checks if given joinpoint contains disallowed character sequences in comments.
|
|
20
|
+
*
|
|
21
|
+
* @param $jp - Joinpoint to analyze
|
|
22
|
+
* @param logErrors - [logErrors=false] - Whether to log errors if a violation is detected
|
|
23
|
+
* @returns Returns true if the joinpoint violates the rule, false otherwise
|
|
24
|
+
*/
|
|
11
25
|
match($jp, logErrors = false) {
|
|
12
26
|
const invalidComments = getComments($jp).filter(comment => (isInlineComment(comment) && /(\/\*)/g.test(comment.text)) ||
|
|
13
27
|
(!isInlineComment(comment) && /(\/\/|\/\*)/g.test(comment.text)));
|
|
14
28
|
if (logErrors) {
|
|
15
|
-
invalidComments.forEach(comment => this.logMISRAError(comment, `Comment ${comment.text} contains invalid character sequences.`));
|
|
29
|
+
invalidComments.forEach(comment => this.logMISRAError(comment, `Comment \'${comment.text}\' contains invalid character sequences.`));
|
|
16
30
|
}
|
|
17
31
|
return invalidComments.length > 0;
|
|
18
32
|
}
|
|
19
|
-
|
|
33
|
+
/**
|
|
34
|
+
* Transforms the given joinpoint if it represents a joinpoint containing disallowed character sequences in comments.
|
|
35
|
+
*
|
|
36
|
+
* @param $jp - Joinpoint to transform
|
|
37
|
+
* @returns Report detailing the transformation result
|
|
38
|
+
*/
|
|
39
|
+
apply($jp) {
|
|
20
40
|
if (!this.match($jp))
|
|
21
41
|
return new MISRATransformationReport(MISRATransformationType.NoChange);
|
|
22
42
|
const comments = getComments($jp);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Rule_3_1_CommentSequences.js","sourceRoot":"","sources":["../../../src/rules/Section3_Comments/Rule_3_1_CommentSequences.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"Rule_3_1_CommentSequences.js","sourceRoot":"","sources":["../../../src/rules/Section3_Comments/Rule_3_1_CommentSequences.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAElG;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,yBAA0B,SAAQ,SAAS;IAC5D;;OAEG;IACM,YAAY,GAAG,YAAY,CAAC,uBAAuB,CAAC;IAE5D;;MAEE;IACH,IAAa,IAAI;QACb,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,GAAc,EAAE,YAAqB,KAAK;QAC5C,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CACtD,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1D,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEtE,IAAI,SAAS,EAAE,CAAC;YACZ,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAC9B,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,aAAa,OAAO,CAAC,IAAI,0CAA0C,CAAC,CACnG,CAAA;QACL,CAAC;QACD,OAAO,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;IACtC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,GAAc;QAChB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YAChB,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAE3E,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAClC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,cAAc,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC;YAC7E,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YACzD,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,CAAC;QAAA,CAAC;IACpF,CAAC;CACJ"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Joinpoint } from "@specs-feup/clava/api/Joinpoints.js";
|
|
2
|
+
import MISRARule from "../../MISRARule.js";
|
|
3
|
+
import { AnalysisType, MISRATransformationReport } from "../../MISRA.js";
|
|
4
|
+
/**
|
|
5
|
+
* Abstract base class for MISRA-C rules that enforce constraints on identifier uniqueness where renaming may be required.
|
|
6
|
+
*
|
|
7
|
+
* Need to implement:
|
|
8
|
+
* - analysisType
|
|
9
|
+
* - name()
|
|
10
|
+
* - match($jp, logErrors)
|
|
11
|
+
*/
|
|
12
|
+
export default abstract class IdentifierRenameRule extends MISRARule {
|
|
13
|
+
/**
|
|
14
|
+
* A positive integer starting from 1 that indicates the rule's priority, determining the order in which rules are applied.
|
|
15
|
+
*/
|
|
16
|
+
readonly priority = 2;
|
|
17
|
+
/**
|
|
18
|
+
* Specifies the scope of analysis: single unit or entire system.
|
|
19
|
+
*/
|
|
20
|
+
abstract readonly analysisType: AnalysisType;
|
|
21
|
+
/**
|
|
22
|
+
* @returns Rule identifier according to MISRA-C:2012
|
|
23
|
+
*/
|
|
24
|
+
abstract get name(): string;
|
|
25
|
+
/**
|
|
26
|
+
* Identifiers with invalid names that require renaming.
|
|
27
|
+
*/
|
|
28
|
+
protected invalidIdentifiers: any[];
|
|
29
|
+
/**
|
|
30
|
+
* Checks if the joinpoint violates the rule
|
|
31
|
+
*
|
|
32
|
+
* @param $jp - Joinpoint to analyze
|
|
33
|
+
* @param logErrors - [logErrors=false] - Whether to log errors if a violation is detected
|
|
34
|
+
* @returns Returns true if the joinpoint violates the rule, false otherwise
|
|
35
|
+
*/
|
|
36
|
+
abstract match($jp: Joinpoint, logErrors: boolean): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Renames all invalid identifiers found in the program.
|
|
39
|
+
* After renaming, the program is rebuilt to ensure proper linking of functions, variables, and their external declarations.
|
|
40
|
+
*
|
|
41
|
+
* @param $jp - Joinpoint to transform
|
|
42
|
+
* @returns Report detailing the transformation result
|
|
43
|
+
*/
|
|
44
|
+
apply($jp: Joinpoint): MISRATransformationReport;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=IdentifierRenameRule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IdentifierRenameRule.d.ts","sourceRoot":"","sources":["../../../src/rules/Section5_Identifiers/IdentifierRenameRule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAU,MAAM,qCAAqC,CAAC;AACvE,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAA2B,MAAM,gBAAgB,CAAC;AAIlG;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,oBAAqB,SAAQ,SAAS;IAChE;;OAEG;IACH,QAAQ,CAAC,QAAQ,KAAK;IAEtB;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IAE7C;;OAEG;IACH,aAAsB,IAAI,IAAI,MAAM,CAAC;IAErC;;OAEG;IACH,SAAS,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAM;IAEzC;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO;IAE3D;;;;;;OAMG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS,GAAG,yBAAyB;CAWnD"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import MISRARule from "../../MISRARule.js";
|
|
2
|
+
import { MISRATransformationReport, MISRATransformationType } from "../../MISRA.js";
|
|
3
|
+
import { renameIdentifier } from "../../utils/IdentifierUtils.js";
|
|
4
|
+
import Query from "@specs-feup/lara/api/weaver/Query.js";
|
|
5
|
+
/**
|
|
6
|
+
* Abstract base class for MISRA-C rules that enforce constraints on identifier uniqueness where renaming may be required.
|
|
7
|
+
*
|
|
8
|
+
* Need to implement:
|
|
9
|
+
* - analysisType
|
|
10
|
+
* - name()
|
|
11
|
+
* - match($jp, logErrors)
|
|
12
|
+
*/
|
|
13
|
+
export default class IdentifierRenameRule extends MISRARule {
|
|
14
|
+
/**
|
|
15
|
+
* A positive integer starting from 1 that indicates the rule's priority, determining the order in which rules are applied.
|
|
16
|
+
*/
|
|
17
|
+
priority = 2;
|
|
18
|
+
/**
|
|
19
|
+
* Identifiers with invalid names that require renaming.
|
|
20
|
+
*/
|
|
21
|
+
invalidIdentifiers = [];
|
|
22
|
+
/**
|
|
23
|
+
* Renames all invalid identifiers found in the program.
|
|
24
|
+
* After renaming, the program is rebuilt to ensure proper linking of functions, variables, and their external declarations.
|
|
25
|
+
*
|
|
26
|
+
* @param $jp - Joinpoint to transform
|
|
27
|
+
* @returns Report detailing the transformation result
|
|
28
|
+
*/
|
|
29
|
+
apply($jp) {
|
|
30
|
+
if (!this.match($jp, false)) {
|
|
31
|
+
return new MISRATransformationReport(MISRATransformationType.NoChange);
|
|
32
|
+
}
|
|
33
|
+
for (const identifierJp of this.invalidIdentifiers) {
|
|
34
|
+
const newName = this.context.generateIdentifierName(identifierJp);
|
|
35
|
+
renameIdentifier(identifierJp, newName);
|
|
36
|
+
}
|
|
37
|
+
return new MISRATransformationReport(MISRATransformationType.Replacement, Query.root());
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=IdentifierRenameRule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IdentifierRenameRule.js","sourceRoot":"","sources":["../../../src/rules/Section5_Identifiers/IdentifierRenameRule.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAgB,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAClG,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,KAAK,MAAM,sCAAsC,CAAC;AAEzD;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,OAAgB,oBAAqB,SAAQ,SAAS;IAChE;;OAEG;IACM,QAAQ,GAAG,CAAC,CAAC;IAYtB;;OAEG;IACO,kBAAkB,GAAU,EAAE,CAAC;IAWzC;;;;;;OAMG;IACH,KAAK,CAAC,GAAc;QAChB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAC3E,CAAC;QAED,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACjD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,YAAY,CAAE,CAAC;YACnE,gBAAgB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,EAAa,CAAC,CAAC;IACvG,CAAC;CACJ"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Joinpoint } from "@specs-feup/clava/api/Joinpoints.js";
|
|
2
|
+
import IdentifierRenameRule from "./IdentifierRenameRule.js";
|
|
3
|
+
import { AnalysisType } from "../../MISRA.js";
|
|
4
|
+
/**
|
|
5
|
+
* MISRA-C Rule 5.1 External identifiers shall be distinct.
|
|
6
|
+
*/
|
|
7
|
+
export default class Rule_5_1_DistinctExternalIdentifiers extends IdentifierRenameRule {
|
|
8
|
+
/**
|
|
9
|
+
* Scope of analysis
|
|
10
|
+
*/
|
|
11
|
+
readonly analysisType = AnalysisType.SYSTEM;
|
|
12
|
+
/**
|
|
13
|
+
* @returns Rule identifier according to MISRA-C:2012
|
|
14
|
+
*/
|
|
15
|
+
get name(): string;
|
|
16
|
+
/**
|
|
17
|
+
* Checks if the given joinpoint is an external identifier distinct from other external identifiers.
|
|
18
|
+
*
|
|
19
|
+
* @param $jp - Joinpoint to analyze
|
|
20
|
+
* @param logErrors - [logErrors=false] - Whether to log errors if a violation is detected
|
|
21
|
+
* @returns Returns true if the joinpoint violates the rule, false otherwise
|
|
22
|
+
*/
|
|
23
|
+
match($jp: Joinpoint, logErrors?: boolean): boolean;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=Rule_5_1_DistinctExternalIdentifiers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Rule_5_1_DistinctExternalIdentifiers.d.ts","sourceRoot":"","sources":["../../../src/rules/Section5_Identifiers/Rule_5_1_DistinctExternalIdentifiers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAW,MAAM,qCAAqC,CAAC;AAKxE,OAAO,oBAAoB,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,oCAAqC,SAAQ,oBAAoB;IAClF;;OAEG;IACH,QAAQ,CAAC,YAAY,uBAAuB;IAE5C;;OAEG;IACH,IAAa,IAAI,IAAI,MAAM,CAE1B;IAED;;;;;;OAMG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO;CAoB7D"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Program } from "@specs-feup/clava/api/Joinpoints.js";
|
|
2
|
+
import { areDistinctIdentifiers, getIdentifierName } from "../../utils/IdentifierUtils.js";
|
|
3
|
+
import { getExternalLinkageIdentifiers } from "../../utils/ProgramUtils.js";
|
|
4
|
+
import { compareLocation } from "../../utils/JoinpointUtils.js";
|
|
5
|
+
import { isSameVarDecl } from "../../utils/VarUtils.js";
|
|
6
|
+
import IdentifierRenameRule from "./IdentifierRenameRule.js";
|
|
7
|
+
import { AnalysisType } from "../../MISRA.js";
|
|
8
|
+
/**
|
|
9
|
+
* MISRA-C Rule 5.1 External identifiers shall be distinct.
|
|
10
|
+
*/
|
|
11
|
+
export default class Rule_5_1_DistinctExternalIdentifiers extends IdentifierRenameRule {
|
|
12
|
+
/**
|
|
13
|
+
* Scope of analysis
|
|
14
|
+
*/
|
|
15
|
+
analysisType = AnalysisType.SYSTEM;
|
|
16
|
+
/**
|
|
17
|
+
* @returns Rule identifier according to MISRA-C:2012
|
|
18
|
+
*/
|
|
19
|
+
get name() {
|
|
20
|
+
return "5.1";
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Checks if the given joinpoint is an external identifier distinct from other external identifiers.
|
|
24
|
+
*
|
|
25
|
+
* @param $jp - Joinpoint to analyze
|
|
26
|
+
* @param logErrors - [logErrors=false] - Whether to log errors if a violation is detected
|
|
27
|
+
* @returns Returns true if the joinpoint violates the rule, false otherwise
|
|
28
|
+
*/
|
|
29
|
+
match($jp, logErrors = false) {
|
|
30
|
+
if (!($jp instanceof Program))
|
|
31
|
+
return false;
|
|
32
|
+
const externalIdentifiers = getExternalLinkageIdentifiers();
|
|
33
|
+
this.invalidIdentifiers =
|
|
34
|
+
externalIdentifiers.filter(identifier1 => externalIdentifiers.some(identifier2 => !isSameVarDecl(identifier1, identifier2) &&
|
|
35
|
+
!areDistinctIdentifiers(identifier1, identifier2) &&
|
|
36
|
+
compareLocation(identifier2, identifier1) < 0));
|
|
37
|
+
const nonCompliant = this.invalidIdentifiers.length > 0;
|
|
38
|
+
if (nonCompliant && logErrors) {
|
|
39
|
+
this.invalidIdentifiers.forEach(identifierJp => {
|
|
40
|
+
this.logMISRAError(identifierJp, `Identifier '${getIdentifierName(identifierJp)}' is not distinct from other external identifier within the first 31 characters.`);
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
return nonCompliant;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=Rule_5_1_DistinctExternalIdentifiers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Rule_5_1_DistinctExternalIdentifiers.js","sourceRoot":"","sources":["../../../src/rules/Section5_Identifiers/Rule_5_1_DistinctExternalIdentifiers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,OAAO,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAC3F,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,oBAAoB,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,oCAAqC,SAAQ,oBAAoB;IAClF;;OAEG;IACM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC;IAE5C;;OAEG;IACH,IAAa,IAAI;QACb,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,GAAc,EAAE,YAAqB,KAAK;QAC5C,IAAI,CAAC,CAAC,GAAG,YAAY,OAAO,CAAC;YAAE,OAAO,KAAK,CAAC;QAE5C,MAAM,mBAAmB,GAAG,6BAA6B,EAAE,CAAC;QAC5D,IAAI,CAAC,kBAAkB;YACnB,mBAAmB,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CACrC,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CACnC,CAAC,aAAa,CAAC,WAAW,EAAE,WAAW,CAAC;gBACxC,CAAC,sBAAsB,CAAC,WAAW,EAAE,WAAW,CAAC;gBACjD,eAAe,CAAC,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,CAChD,CACJ,CAAC;QACN,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC;QACxD,IAAI,YAAY,IAAI,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;gBAC3C,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,eAAe,iBAAiB,CAAC,YAAY,CAAC,kFAAkF,CAAC,CAAA;YACtK,CAAC,CAAC,CAAC;QACP,CAAC;QACD,OAAO,YAAY,CAAC;IACxB,CAAC;CACJ"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Joinpoint } from "@specs-feup/clava/api/Joinpoints.js";
|
|
2
|
+
import IdentifierRenameRule from "./IdentifierRenameRule.js";
|
|
3
|
+
import { AnalysisType } from "../../MISRA.js";
|
|
4
|
+
/**
|
|
5
|
+
* MISRA-C Rule 5.6: A typedef name shall be a unique identifier.
|
|
6
|
+
*
|
|
7
|
+
* Exception: The typedef name may be the same as the structure, union or enumeration tag name associated with the typedef.
|
|
8
|
+
*/
|
|
9
|
+
export default class Rule_5_6_UniqueTypedefNames extends IdentifierRenameRule {
|
|
10
|
+
/**
|
|
11
|
+
* Scope of analysis
|
|
12
|
+
*/
|
|
13
|
+
readonly analysisType = AnalysisType.SYSTEM;
|
|
14
|
+
/**
|
|
15
|
+
* @returns Rule identifier according to MISRA-C:2012
|
|
16
|
+
*/
|
|
17
|
+
get name(): string;
|
|
18
|
+
/**
|
|
19
|
+
*
|
|
20
|
+
* @param $jp - Joinpoint to analyze
|
|
21
|
+
* @param logErrors - [logErrors=false] - Whether to log errors if a violation is detected
|
|
22
|
+
* @returns Returns true if the joinpoint violates the rule, false otherwise
|
|
23
|
+
*/
|
|
24
|
+
match($jp: Joinpoint, logErrors?: boolean): boolean;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=Rule_5_6_UniqueTypedefNames.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Rule_5_6_UniqueTypedefNames.d.ts","sourceRoot":"","sources":["../../../src/rules/Section5_Identifiers/Rule_5_6_UniqueTypedefNames.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAwB,MAAM,qCAAqC,CAAC;AAMtF,OAAO,oBAAoB,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,2BAA4B,SAAQ,oBAAoB;IACzE;;OAEG;IACH,QAAQ,CAAC,YAAY,uBAAuB;IAE5C;;OAEG;IACH,IAAa,IAAI,IAAI,MAAM,CAE1B;IAED;;;;;OAKG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO;CA4B7D"}
|