@specs-feup/clava-misra 1.0.0 → 1.0.1
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 +117 -0
- package/README.md +70 -15
- package/dist/MISRA.d.ts +129 -0
- package/dist/MISRA.d.ts.map +1 -0
- package/dist/MISRA.js +245 -0
- package/dist/MISRA.js.map +1 -0
- package/dist/MISRAContext.d.ts +21 -0
- package/dist/MISRAContext.d.ts.map +1 -0
- package/dist/MISRAContext.js +75 -0
- package/dist/MISRAContext.js.map +1 -0
- package/dist/MISRARule.d.ts +56 -0
- package/dist/MISRARule.d.ts.map +1 -0
- package/dist/MISRARule.js +45 -0
- package/dist/MISRARule.js.map +1 -0
- package/dist/MISRATool.d.ts +12 -0
- package/dist/MISRATool.d.ts.map +1 -0
- package/dist/MISRATool.js +84 -0
- package/dist/MISRATool.js.map +1 -0
- package/dist/foo.d.ts +2 -0
- package/dist/foo.d.ts.map +1 -0
- package/{src/foo.ts → dist/foo.js} +3 -2
- package/dist/foo.js.map +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +5 -0
- package/dist/main.js.map +1 -0
- package/dist/misra/MISRAAnalyser.d.ts +14 -0
- package/dist/misra/MISRAAnalyser.d.ts.map +1 -0
- package/{src/misra/MISRAAnalyser.ts → dist/misra/MISRAAnalyser.js} +13 -23
- package/dist/misra/MISRAAnalyser.js.map +1 -0
- package/dist/misra/MISRAPass.d.ts +27 -0
- package/dist/misra/MISRAPass.d.ts.map +1 -0
- package/dist/misra/MISRAPass.js +60 -0
- package/dist/misra/MISRAPass.js.map +1 -0
- package/dist/misra/MISRAPassResult.d.ts +13 -0
- package/dist/misra/MISRAPassResult.d.ts.map +1 -0
- package/dist/misra/MISRAPassResult.js +11 -0
- package/dist/misra/MISRAPassResult.js.map +1 -0
- package/dist/misra/MISRAReporter.d.ts +20 -0
- package/dist/misra/MISRAReporter.d.ts.map +1 -0
- package/dist/misra/MISRAReporter.js +43 -0
- package/dist/misra/MISRAReporter.js.map +1 -0
- package/dist/misra/passes/S10_EssentialTypePass.d.ts +42 -0
- package/dist/misra/passes/S10_EssentialTypePass.d.ts.map +1 -0
- package/dist/misra/passes/S10_EssentialTypePass.js +370 -0
- package/dist/misra/passes/S10_EssentialTypePass.js.map +1 -0
- package/dist/misra/passes/S12_ExpressionPass.d.ts +18 -0
- package/dist/misra/passes/S12_ExpressionPass.d.ts.map +1 -0
- package/dist/misra/passes/S12_ExpressionPass.js +72 -0
- package/dist/misra/passes/S12_ExpressionPass.js.map +1 -0
- package/dist/misra/passes/S13_SideEffectPass.d.ts +18 -0
- package/dist/misra/passes/S13_SideEffectPass.d.ts.map +1 -0
- package/dist/misra/passes/S13_SideEffectPass.js +105 -0
- package/dist/misra/passes/S13_SideEffectPass.js.map +1 -0
- package/dist/misra/passes/S15_ControlFlowPass.d.ts +19 -0
- package/dist/misra/passes/S15_ControlFlowPass.d.ts.map +1 -0
- package/dist/misra/passes/S15_ControlFlowPass.js +94 -0
- package/dist/misra/passes/S15_ControlFlowPass.js.map +1 -0
- package/dist/misra/passes/S16_SwitchStatementPass.d.ts +17 -0
- package/dist/misra/passes/S16_SwitchStatementPass.d.ts.map +1 -0
- package/dist/misra/passes/S16_SwitchStatementPass.js +152 -0
- package/dist/misra/passes/S16_SwitchStatementPass.js.map +1 -0
- package/dist/misra/passes/S17_FunctionPass.d.ts +12 -0
- package/dist/misra/passes/S17_FunctionPass.d.ts.map +1 -0
- package/dist/misra/passes/S17_FunctionPass.js +38 -0
- package/dist/misra/passes/S17_FunctionPass.js.map +1 -0
- package/dist/misra/passes/S18_PointersArraysPass.d.ts +17 -0
- package/dist/misra/passes/S18_PointersArraysPass.d.ts.map +1 -0
- package/dist/misra/passes/S18_PointersArraysPass.js +115 -0
- package/dist/misra/passes/S18_PointersArraysPass.js.map +1 -0
- package/dist/misra/passes/S19_OverlappingStoragePass.d.ts +11 -0
- package/dist/misra/passes/S19_OverlappingStoragePass.d.ts.map +1 -0
- package/dist/misra/passes/S19_OverlappingStoragePass.js +20 -0
- package/dist/misra/passes/S19_OverlappingStoragePass.js.map +1 -0
- package/dist/misra/passes/S21_StandardLibPass.d.ts +20 -0
- package/dist/misra/passes/S21_StandardLibPass.d.ts.map +1 -0
- package/dist/misra/passes/S21_StandardLibPass.js +77 -0
- package/dist/misra/passes/S21_StandardLibPass.js.map +1 -0
- package/dist/misra/passes/S3_CommentPass.d.ts +12 -0
- package/dist/misra/passes/S3_CommentPass.d.ts.map +1 -0
- package/dist/misra/passes/S3_CommentPass.js +27 -0
- package/dist/misra/passes/S3_CommentPass.js.map +1 -0
- package/dist/misra/passes/S5_IdentifierPass.d.ts +13 -0
- package/dist/misra/passes/S5_IdentifierPass.d.ts.map +1 -0
- package/dist/misra/passes/S5_IdentifierPass.js +60 -0
- package/dist/misra/passes/S5_IdentifierPass.js.map +1 -0
- package/dist/misra/passes/S6_TypePass.d.ts +11 -0
- package/dist/misra/passes/S6_TypePass.d.ts.map +1 -0
- package/dist/misra/passes/S6_TypePass.js +25 -0
- package/dist/misra/passes/S6_TypePass.js.map +1 -0
- package/dist/misra/passes/S7_LiteralsConstantsPass.d.ts +14 -0
- package/dist/misra/passes/S7_LiteralsConstantsPass.d.ts.map +1 -0
- package/dist/misra/passes/S7_LiteralsConstantsPass.js +71 -0
- package/dist/misra/passes/S7_LiteralsConstantsPass.js.map +1 -0
- package/dist/misra/passes/S8_DeclDefPass.d.ts +18 -0
- package/dist/misra/passes/S8_DeclDefPass.d.ts.map +1 -0
- package/dist/misra/passes/S8_DeclDefPass.js +127 -0
- package/dist/misra/passes/S8_DeclDefPass.js.map +1 -0
- package/dist/misra/sections/Section10_EssentialTypeModel.d.ts +33 -0
- package/dist/misra/sections/Section10_EssentialTypeModel.d.ts.map +1 -0
- package/{src/misra/sections/Section10_EssentialTypeModel.ts → dist/misra/sections/Section10_EssentialTypeModel.js} +58 -73
- package/dist/misra/sections/Section10_EssentialTypeModel.js.map +1 -0
- package/dist/misra/sections/Section11_PointerTypeConversions.d.ts +12 -0
- package/dist/misra/sections/Section11_PointerTypeConversions.d.ts.map +1 -0
- package/{src/misra/sections/Section11_PointerTypeConversions.ts → dist/misra/sections/Section11_PointerTypeConversions.js} +16 -27
- package/dist/misra/sections/Section11_PointerTypeConversions.js.map +1 -0
- package/dist/misra/sections/Section12_Expressions.d.ts +15 -0
- package/dist/misra/sections/Section12_Expressions.d.ts.map +1 -0
- package/dist/misra/sections/Section12_Expressions.js +70 -0
- package/dist/misra/sections/Section12_Expressions.js.map +1 -0
- package/dist/misra/sections/Section13_SideEffects.d.ts +14 -0
- package/dist/misra/sections/Section13_SideEffects.d.ts.map +1 -0
- package/dist/misra/sections/Section13_SideEffects.js +90 -0
- package/dist/misra/sections/Section13_SideEffects.js.map +1 -0
- package/dist/misra/sections/Section14_ControlStmtExprs.d.ts +8 -0
- package/dist/misra/sections/Section14_ControlStmtExprs.d.ts.map +1 -0
- package/{src/misra/sections/Section14_ControlStmtExprs.ts → dist/misra/sections/Section14_ControlStmtExprs.js} +8 -10
- package/dist/misra/sections/Section14_ControlStmtExprs.js.map +1 -0
- package/dist/misra/sections/Section15_ControlFlow.d.ts +14 -0
- package/dist/misra/sections/Section15_ControlFlow.d.ts.map +1 -0
- package/dist/misra/sections/Section15_ControlFlow.js +97 -0
- package/dist/misra/sections/Section15_ControlFlow.js.map +1 -0
- package/dist/misra/sections/Section16_SwitchStatements.d.ts +13 -0
- package/dist/misra/sections/Section16_SwitchStatements.d.ts.map +1 -0
- package/{src/misra/sections/Section16_SwitchStatements.ts → dist/misra/sections/Section16_SwitchStatements.js} +49 -74
- package/dist/misra/sections/Section16_SwitchStatements.js.map +1 -0
- package/dist/misra/sections/Section17_Functions.d.ts +9 -0
- package/dist/misra/sections/Section17_Functions.d.ts.map +1 -0
- package/{src/misra/sections/Section17_Functions.ts → dist/misra/sections/Section17_Functions.js} +10 -13
- package/dist/misra/sections/Section17_Functions.js.map +1 -0
- package/dist/misra/sections/Section18_PointersAndArrays.d.ts +13 -0
- package/dist/misra/sections/Section18_PointersAndArrays.d.ts.map +1 -0
- package/{src/misra/sections/Section18_PointersAndArrays.ts → dist/misra/sections/Section18_PointersAndArrays.js} +36 -40
- package/dist/misra/sections/Section18_PointersAndArrays.js.map +1 -0
- package/dist/misra/sections/Section19_OverlappingStorage.d.ts +8 -0
- package/dist/misra/sections/Section19_OverlappingStorage.d.ts.map +1 -0
- package/dist/misra/sections/Section19_OverlappingStorage.js +16 -0
- package/dist/misra/sections/Section19_OverlappingStorage.js.map +1 -0
- package/dist/misra/sections/Section20_PreprocessingDirectives.d.ts +8 -0
- package/dist/misra/sections/Section20_PreprocessingDirectives.d.ts.map +1 -0
- package/{src/misra/sections/Section20_PreprocessingDirectives.ts → dist/misra/sections/Section20_PreprocessingDirectives.js} +7 -9
- package/dist/misra/sections/Section20_PreprocessingDirectives.js.map +1 -0
- package/dist/misra/sections/Section21_StandardLibraries.d.ts +17 -0
- package/dist/misra/sections/Section21_StandardLibraries.d.ts.map +1 -0
- package/dist/misra/sections/Section21_StandardLibraries.js +54 -0
- package/dist/misra/sections/Section21_StandardLibraries.js.map +1 -0
- package/dist/misra/sections/Section2_UnusedCode.d.ts +9 -0
- package/dist/misra/sections/Section2_UnusedCode.d.ts.map +1 -0
- package/{src/misra/sections/Section2_UnusedCode.ts → dist/misra/sections/Section2_UnusedCode.js} +11 -16
- package/dist/misra/sections/Section2_UnusedCode.js.map +1 -0
- package/dist/misra/sections/Section3_Comments.d.ts +9 -0
- package/dist/misra/sections/Section3_Comments.d.ts.map +1 -0
- package/{src/misra/sections/Section3_Comments.ts → dist/misra/sections/Section3_Comments.js} +7 -10
- package/dist/misra/sections/Section3_Comments.js.map +1 -0
- package/dist/misra/sections/Section5_Identifiers.d.ts +12 -0
- package/dist/misra/sections/Section5_Identifiers.d.ts.map +1 -0
- package/dist/misra/sections/Section5_Identifiers.js +139 -0
- package/dist/misra/sections/Section5_Identifiers.js.map +1 -0
- package/dist/misra/sections/Section6_Types.d.ts +8 -0
- package/dist/misra/sections/Section6_Types.d.ts.map +1 -0
- package/dist/misra/sections/Section6_Types.js +23 -0
- package/dist/misra/sections/Section6_Types.js.map +1 -0
- package/dist/misra/sections/Section7_LiteralsConstants.d.ts +11 -0
- package/dist/misra/sections/Section7_LiteralsConstants.d.ts.map +1 -0
- package/{src/misra/sections/Section7_LiteralsConstants.ts → dist/misra/sections/Section7_LiteralsConstants.js} +18 -25
- package/dist/misra/sections/Section7_LiteralsConstants.js.map +1 -0
- package/dist/misra/sections/Section8_DeclarationsDefinitions.d.ts +15 -0
- package/dist/misra/sections/Section8_DeclarationsDefinitions.d.ts.map +1 -0
- package/{src/misra/sections/Section8_DeclarationsDefinitions.ts → dist/misra/sections/Section8_DeclarationsDefinitions.js} +18 -33
- package/dist/misra/sections/Section8_DeclarationsDefinitions.js.map +1 -0
- package/dist/misra/tests/utils.d.ts +10 -0
- package/dist/misra/tests/utils.d.ts.map +1 -0
- package/dist/misra/tests/utils.js +33 -0
- package/dist/misra/tests/utils.js.map +1 -0
- package/dist/rules/Section16_SwitchStatements/Rule_16_2_TopLevelSwitch.d.ts +15 -0
- package/dist/rules/Section16_SwitchStatements/Rule_16_2_TopLevelSwitch.d.ts.map +1 -0
- package/dist/rules/Section16_SwitchStatements/Rule_16_2_TopLevelSwitch.js +33 -0
- package/dist/rules/Section16_SwitchStatements/Rule_16_2_TopLevelSwitch.js.map +1 -0
- package/dist/rules/Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.d.ts +16 -0
- package/dist/rules/Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.d.ts.map +1 -0
- package/dist/rules/Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.js +60 -0
- package/dist/rules/Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.js.map +1 -0
- package/dist/rules/Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.d.ts +19 -0
- package/dist/rules/Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.d.ts.map +1 -0
- package/dist/rules/Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.js +42 -0
- package/dist/rules/Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.js.map +1 -0
- package/dist/rules/Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.d.ts +43 -0
- package/dist/rules/Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.d.ts.map +1 -0
- package/dist/rules/Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.js +103 -0
- package/dist/rules/Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.js.map +1 -0
- package/dist/rules/Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.d.ts +26 -0
- package/dist/rules/Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.d.ts.map +1 -0
- package/dist/rules/Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.js +49 -0
- package/dist/rules/Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.js.map +1 -0
- package/dist/rules/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.d.ts +26 -0
- package/dist/rules/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.d.ts.map +1 -0
- package/dist/rules/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.js +49 -0
- package/dist/rules/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.js.map +1 -0
- package/dist/rules/Section17_Functions/Rule_17_4_NonVoidReturn.d.ts +31 -0
- package/dist/rules/Section17_Functions/Rule_17_4_NonVoidReturn.d.ts.map +1 -0
- package/dist/rules/Section17_Functions/Rule_17_4_NonVoidReturn.js +71 -0
- package/dist/rules/Section17_Functions/Rule_17_4_NonVoidReturn.js.map +1 -0
- package/dist/rules/Section17_Functions/Rule_17_6_StaticArraySizeParam.d.ts +27 -0
- package/dist/rules/Section17_Functions/Rule_17_6_StaticArraySizeParam.d.ts.map +1 -0
- package/dist/rules/Section17_Functions/Rule_17_6_StaticArraySizeParam.js +58 -0
- package/dist/rules/Section17_Functions/Rule_17_6_StaticArraySizeParam.js.map +1 -0
- package/dist/rules/Section17_Functions/Rule_17_7_UnusedReturnValue.d.ts +28 -0
- package/dist/rules/Section17_Functions/Rule_17_7_UnusedReturnValue.d.ts.map +1 -0
- package/dist/rules/Section17_Functions/Rule_17_7_UnusedReturnValue.js +44 -0
- package/dist/rules/Section17_Functions/Rule_17_7_UnusedReturnValue.js.map +1 -0
- package/dist/rules/Section20-PreprocessingDirectives/Rule_20_2_InvalidHeaderFileName.d.ts +55 -0
- package/dist/rules/Section20-PreprocessingDirectives/Rule_20_2_InvalidHeaderFileName.d.ts.map +1 -0
- package/dist/rules/Section20-PreprocessingDirectives/Rule_20_2_InvalidHeaderFileName.js +108 -0
- package/dist/rules/Section20-PreprocessingDirectives/Rule_20_2_InvalidHeaderFileName.js.map +1 -0
- package/dist/rules/Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.d.ts +43 -0
- package/dist/rules/Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.d.ts.map +1 -0
- package/dist/rules/Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.js +68 -0
- package/dist/rules/Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.js.map +1 -0
- package/dist/rules/Section2_UnusedCode/Rule_2_4_UnusedTagDecl.d.ts +29 -0
- package/dist/rules/Section2_UnusedCode/Rule_2_4_UnusedTagDecl.d.ts.map +1 -0
- package/dist/rules/Section2_UnusedCode/Rule_2_4_UnusedTagDecl.js +53 -0
- package/dist/rules/Section2_UnusedCode/Rule_2_4_UnusedTagDecl.js.map +1 -0
- package/dist/rules/Section2_UnusedCode/Rule_2_6_UnusedLabels.d.ts +15 -0
- package/dist/rules/Section2_UnusedCode/Rule_2_6_UnusedLabels.d.ts.map +1 -0
- package/dist/rules/Section2_UnusedCode/Rule_2_6_UnusedLabels.js +35 -0
- package/dist/rules/Section2_UnusedCode/Rule_2_6_UnusedLabels.js.map +1 -0
- package/dist/rules/Section2_UnusedCode/Rule_2_7_UnusedParameters.d.ts +13 -0
- package/dist/rules/Section2_UnusedCode/Rule_2_7_UnusedParameters.d.ts.map +1 -0
- package/dist/rules/Section2_UnusedCode/Rule_2_7_UnusedParameters.js +53 -0
- package/dist/rules/Section2_UnusedCode/Rule_2_7_UnusedParameters.js.map +1 -0
- package/dist/rules/Section3_Comments/Rule_3_1_CommentSequences.d.ts +13 -0
- package/dist/rules/Section3_Comments/Rule_3_1_CommentSequences.d.ts.map +1 -0
- package/dist/rules/Section3_Comments/Rule_3_1_CommentSequences.js +32 -0
- package/dist/rules/Section3_Comments/Rule_3_1_CommentSequences.js.map +1 -0
- package/dist/rules/Section3_Comments/Rule_3_2_LineSplicing.d.ts +10 -0
- package/dist/rules/Section3_Comments/Rule_3_2_LineSplicing.d.ts.map +1 -0
- package/dist/rules/Section3_Comments/Rule_3_2_LineSplicing.js +26 -0
- package/dist/rules/Section3_Comments/Rule_3_2_LineSplicing.js.map +1 -0
- package/dist/rules/index.d.ts +20 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +38 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/tests/Section17_Functions/misra_config.json +10 -0
- package/dist/tests/utils.d.ts +10 -0
- package/dist/tests/utils.d.ts.map +1 -0
- package/dist/tests/utils.js +29 -0
- package/dist/tests/utils.js.map +1 -0
- package/dist/utils/utils.d.ts +102 -0
- package/dist/utils/utils.d.ts.map +1 -0
- package/dist/utils/utils.js +202 -0
- package/dist/utils/utils.js.map +1 -0
- package/jest.config.js +6 -6
- package/package.json +40 -8
- package/src/MISRA.ts +266 -0
- package/src/MISRAContext.ts +91 -0
- package/src/MISRARule.ts +77 -0
- package/src/MISRATool.ts +96 -0
- package/src/main.ts +4 -33
- package/src/misra-old/MISRAAnalyser.ts +60 -0
- package/src/misra-old/MISRAAnalyserResult.ts +16 -0
- package/src/misra-old/sections/Section10_EssentialTypeModel.ts +377 -0
- package/src/misra-old/sections/Section11_PointerTypeConversions.ts +104 -0
- package/src/{misra → misra-old}/sections/Section12_Expressions.ts +7 -7
- package/src/{misra → misra-old}/sections/Section13_SideEffects.ts +15 -15
- package/src/misra-old/sections/Section14_ControlStmtExprs.ts +27 -0
- package/src/{misra → misra-old}/sections/Section15_ControlFlow.ts +10 -10
- package/src/misra-old/sections/Section18_PointersAndArrays.ts +108 -0
- package/src/{misra → misra-old}/sections/Section19_OverlappingStorage.ts +4 -4
- package/src/misra-old/sections/Section20_PreprocessingDirectives.ts +22 -0
- package/src/misra-old/sections/Section21_StandardLibraries.ts +99 -0
- package/src/{misra → misra-old}/sections/Section5_Identifiers.ts +16 -15
- package/src/{misra → misra-old}/sections/Section6_Types.ts +4 -4
- package/src/misra-old/sections/Section7_LiteralsConstants.ts +76 -0
- package/src/misra-old/sections/Section8_DeclarationsDefinitions.ts +133 -0
- package/src/rules/Section16_SwitchStatements/Rule_16_2_TopLevelSwitch.ts +40 -0
- package/src/rules/Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.ts +69 -0
- package/src/rules/Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.ts +46 -0
- package/src/rules/Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.ts +113 -0
- package/src/rules/Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.ts +57 -0
- package/src/rules/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.ts +56 -0
- package/src/rules/Section17_Functions/Rule_17_4_NonVoidReturn.ts +78 -0
- package/src/rules/Section17_Functions/Rule_17_6_StaticArraySizeParam.ts +68 -0
- package/src/rules/Section17_Functions/Rule_17_7_UnusedReturnValue.ts +47 -0
- package/src/rules/Section20-PreprocessingDirectives/Rule_20_2_InvalidHeaderFileName.ts +120 -0
- package/src/rules/Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.ts +75 -0
- package/src/rules/Section2_UnusedCode/Rule_2_4_UnusedTagDecl.ts +60 -0
- package/src/rules/Section2_UnusedCode/Rule_2_6_UnusedLabels.ts +46 -0
- package/src/rules/Section2_UnusedCode/Rule_2_7_UnusedParameters.ts +65 -0
- package/src/rules/Section3_Comments/Rule_3_1_CommentSequences.ts +41 -0
- package/src/rules/Section3_Comments/Rule_3_2_LineSplicing.ts +36 -0
- package/src/rules/index.ts +40 -0
- package/src/tests/Section16_SwitchStatements/Rule_16_2_TopLevelSwitch.test.ts +55 -0
- package/src/tests/Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.test.ts +70 -0
- package/src/tests/Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.test.ts +128 -0
- package/src/tests/Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.test.ts +132 -0
- package/src/tests/Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.test.ts +146 -0
- package/src/tests/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.test.ts +102 -0
- package/src/tests/Section17_Functions/Rule_17_4_NonVoidReturn.test.ts +85 -0
- package/src/tests/Section17_Functions/Rule_17_4_NonVoidReturn_MissingConfig.test.ts +77 -0
- package/src/tests/Section17_Functions/Rule_17_6_StaticArraySizeParam.test.ts +36 -0
- package/src/tests/Section17_Functions/Rule_17_7_UnusedReturnValue.test.ts +44 -0
- package/src/tests/Section17_Functions/misra_config.json +10 -0
- package/src/tests/Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.test.ts +175 -0
- package/src/tests/Section2_UnusedCode/Rule_2_4_UnusedTagDecl.test.ts +219 -0
- package/src/tests/Section2_UnusedCode/Rule_2_6_UnusedLabels.test.ts +49 -0
- package/src/tests/Section2_UnusedCode/Rule_2_7_UnusedParameters.test.ts +55 -0
- package/src/tests/Section3_Comments/Rule_3_1_CommentSequences.test.ts +37 -0
- package/src/tests/utils.ts +39 -0
- package/src/utils/utils.ts +221 -0
- package/tsconfig.json +4 -3
- package/typedoc.config.js +1 -1
- package/CxxSources/lib.cpp +0 -3
- package/CxxSources/lib.h +0 -8
- package/CxxSources/main.cpp +0 -40
- package/TODO.md +0 -1
- package/consumer_order.txt +0 -2
- package/enum_integer_type.txt +0 -0
- package/is_temporary.txt +0 -0
- package/omp.txt +0 -0
- package/src/misra/passes/S16_SwitchStatementPass.ts +0 -168
- package/src/misra/passes/S3_CommentPass.ts +0 -40
- package/src/misra/sections/Section21_StandardLibraries.ts +0 -65
- package/src/misra/tests/S10_EssentialTypes.test.ts +0 -253
- package/src/misra/tests/S12_Expressions.test.ts +0 -43
- package/src/misra/tests/S13_SideEffects.test.ts +0 -77
- package/src/misra/tests/S15_ControlFlow.test.ts +0 -144
- package/src/misra/tests/S16_SwitchStatements.test.ts +0 -164
- package/src/misra/tests/S17_Functions.test.ts +0 -46
- package/src/misra/tests/S18_PointersArrays.test.ts +0 -167
- package/src/misra/tests/S19_OverlappingStorage.test.ts +0 -38
- package/src/misra/tests/S3_Comments.test.ts +0 -36
- package/src/misra/tests/S6_Types.test.ts +0 -36
- package/src/misra/tests/S7_LiteralsConstants.test.ts +0 -48
- package/src/misra/tests/utils.ts +0 -47
- package/types_with_templates.txt +0 -0
- /package/src/{misra → misra-old}/MISRAPass.ts +0 -0
- /package/src/{misra → misra-old}/MISRAPassResult.ts +0 -0
- /package/src/{misra → misra-old}/MISRAReporter.ts +0 -0
- /package/src/{misra → misra-old}/passes/S10_EssentialTypePass.ts +0 -0
- /package/src/{misra → misra-old}/passes/S12_ExpressionPass.ts +0 -0
- /package/src/{misra → misra-old}/passes/S13_SideEffectPass.ts +0 -0
- /package/src/{misra → misra-old}/passes/S15_ControlFlowPass.ts +0 -0
- /package/src/{misra → misra-old}/passes/S17_FunctionPass.ts +0 -0
- /package/src/{misra → misra-old}/passes/S18_PointersArraysPass.ts +0 -0
- /package/src/{misra → misra-old}/passes/S19_OverlappingStoragePass.ts +0 -0
- /package/src/{misra → misra-old}/passes/S21_StandardLibPass.ts +0 -0
- /package/src/{misra → misra-old}/passes/S5_IdentifierPass.ts +0 -0
- /package/src/{misra → misra-old}/passes/S6_TypePass.ts +0 -0
- /package/src/{misra → misra-old}/passes/S7_LiteralsConstantsPass.ts +0 -0
- /package/src/{misra → misra-old}/passes/S8_DeclDefPass.ts +0 -0
@@ -0,0 +1,90 @@
|
|
1
|
+
import Query from "@specs-feup/lara/api/weaver/Query.js";
|
2
|
+
import { Varref, Call, QualType, Vardecl, UnaryOp, InitList, BinaryOp } from "@specs-feup/clava/api/Joinpoints.js";
|
3
|
+
import MISRAAnalyser from "../MISRAAnalyser.js";
|
4
|
+
import TraversalType from "@specs-feup/lara/api/weaver/TraversalType.js";
|
5
|
+
import Fix from "@specs-feup/clava/api/clava/analysis/Fix.js";
|
6
|
+
export default class Section13_SideEffects extends MISRAAnalyser {
|
7
|
+
ruleMapper;
|
8
|
+
constructor(rules) {
|
9
|
+
super(rules);
|
10
|
+
this.ruleMapper = new Map([
|
11
|
+
[1, this.r13_1_initListSideEffects.bind(this)],
|
12
|
+
[3, this.r13_3_noIncrementSideEffects.bind(this)],
|
13
|
+
[4, this.r13_4_noUseOfAssignmentValue.bind(this)],
|
14
|
+
[5, this.r13_5_shortCircuitSideEffects.bind(this)]
|
15
|
+
]);
|
16
|
+
}
|
17
|
+
checkPotentialPersistentSideEffects($startNode, type, filters, name, childFun) {
|
18
|
+
Query.searchFrom($startNode, type, filters).get().forEach(list => {
|
19
|
+
Query.searchFromInclusive(childFun(list), Varref).get().forEach(ref => {
|
20
|
+
if (ref.type instanceof QualType && ref.type.qualifiers?.includes("volatile")) {
|
21
|
+
this.logMISRAError(list, `${name} ${list.code} contains persistent side effects: an access to volatile object ${ref.name}.`);
|
22
|
+
}
|
23
|
+
}, this);
|
24
|
+
Query.searchFromInclusive(childFun(list), Call).get().forEach(call => {
|
25
|
+
this.logMISRAError(list, `${name} ${list.code} may contain persistent side effects in call to ${call.name}.`);
|
26
|
+
}, this);
|
27
|
+
Query.searchFromInclusive(childFun(list), UnaryOp, { kind: /(post_inc)|(post_dec)|(pre_inc)|(pre_dec)/ }).get().forEach(op => {
|
28
|
+
Query.searchFrom(op, Varref).get().forEach(ref => {
|
29
|
+
if (ref.declaration instanceof Vardecl && ref.declaration.isGlobal) {
|
30
|
+
this.logMISRAError(list, `${name} ${list.code} may contain persistent side effects in expression ${op.code}.`);
|
31
|
+
}
|
32
|
+
});
|
33
|
+
}, this);
|
34
|
+
}, this);
|
35
|
+
}
|
36
|
+
r13_1_initListSideEffects($startNode) {
|
37
|
+
this.checkPotentialPersistentSideEffects($startNode, InitList, undefined, "Initializer list", jp => jp);
|
38
|
+
}
|
39
|
+
static visitAllExprs(fun, root) {
|
40
|
+
let curr = root;
|
41
|
+
while (curr) {
|
42
|
+
const temp = curr;
|
43
|
+
//console.log(temp.joinPointType);
|
44
|
+
curr = curr.rightJp;
|
45
|
+
if (temp.instanceOf("expression")) {
|
46
|
+
fun(temp);
|
47
|
+
}
|
48
|
+
else
|
49
|
+
Section13_SideEffects.visitAllExprs(fun, temp.children[0]);
|
50
|
+
}
|
51
|
+
}
|
52
|
+
checkIncrementSideEffects(exprRoot) {
|
53
|
+
const jps = Query.searchFrom(exprRoot, UnaryOp, { kind: /(post_inc)|(post_dec)|(pre_inc)|(pre_dec)/ }, TraversalType.POSTORDER).get();
|
54
|
+
const calls = Query.searchFromInclusive(exprRoot, Call).get();
|
55
|
+
const assignments = Query.searchFromInclusive(exprRoot, BinaryOp, { isAssignment: true }).get();
|
56
|
+
if (jps.length + calls.length + assignments.length < 2)
|
57
|
+
return;
|
58
|
+
this.logMISRAError(exprRoot, `Expression ${exprRoot.code} contains a pre/post inc/decrement operator and other side effects.`, new Fix(exprRoot, ($jp) => {
|
59
|
+
const jps = Query.searchFrom($jp, UnaryOp, { kind: /(post_inc)|(post_dec)|(pre_inc)|(pre_dec)/ }, TraversalType.POSTORDER).get();
|
60
|
+
const calls = Query.searchFromInclusive($jp, Call).get();
|
61
|
+
const assignments = Query.searchFromInclusive($jp, BinaryOp, { isAssignment: true }).get();
|
62
|
+
const transformationNo = (calls.length === 0 && assignments.length === 0) ? jps.length - 1 : jps.length;
|
63
|
+
for (let i = 0; i < transformationNo; i++) {
|
64
|
+
const jp = jps[i];
|
65
|
+
if (/post_.*/.test(jp.kind)) {
|
66
|
+
$jp.insertAfter(jp.deepCopy());
|
67
|
+
}
|
68
|
+
else {
|
69
|
+
$jp.insertBefore(jp.deepCopy());
|
70
|
+
}
|
71
|
+
console.log(jp);
|
72
|
+
jp.replaceWith(jp.operand);
|
73
|
+
}
|
74
|
+
}));
|
75
|
+
}
|
76
|
+
r13_3_noIncrementSideEffects($startNode) {
|
77
|
+
Section13_SideEffects.visitAllExprs(this.checkIncrementSideEffects, $startNode);
|
78
|
+
}
|
79
|
+
r13_4_noUseOfAssignmentValue($startNode) {
|
80
|
+
for (const bOp of Query.searchFrom($startNode, BinaryOp, { isAssignment: true })) {
|
81
|
+
if (!bOp.parent.instanceOf("exprStmt") && !(bOp.parent.instanceOf("parenExpr") && bOp.parent?.parent?.instanceOf("exprStmt"))) {
|
82
|
+
this.logMISRAError(bOp, `Value of assignment expression ${bOp.code} should not be used.`);
|
83
|
+
}
|
84
|
+
}
|
85
|
+
}
|
86
|
+
r13_5_shortCircuitSideEffects($startNode) {
|
87
|
+
this.checkPotentialPersistentSideEffects($startNode, BinaryOp, { operator: /(\&\&|\|\|)/ }, "RHS of && or || expression", jp => jp.right);
|
88
|
+
}
|
89
|
+
}
|
90
|
+
//# sourceMappingURL=Section13_SideEffects.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"Section13_SideEffects.js","sourceRoot":"","sources":["../../../src/misra/sections/Section13_SideEffects.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import { Program, FileJp } from "@specs-feup/clava/api/Joinpoints.js";
|
2
|
+
import MISRAAnalyser from "../MISRAAnalyser.js";
|
3
|
+
export default class Section14_ControlStmtExprs extends MISRAAnalyser {
|
4
|
+
ruleMapper: Map<number, (jp: Program | FileJp) => void>;
|
5
|
+
constructor(rules: number[]);
|
6
|
+
private r14_4_essentiallyBooleanInControllingExpr;
|
7
|
+
}
|
8
|
+
//# sourceMappingURL=Section14_ControlStmtExprs.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"Section14_ControlStmtExprs.d.ts","sourceRoot":"","sources":["../../../src/misra/sections/Section14_ControlStmtExprs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAiC,MAAM,qCAAqC,CAAC;AACrG,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAEhD,MAAM,CAAC,OAAO,OAAO,0BAA2B,SAAQ,aAAa;IACjE,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC;gBAE5C,KAAK,EAAE,MAAM,EAAE;IAO3B,OAAO,CAAC,yCAAyC;CAYpD"}
|
@@ -1,21 +1,18 @@
|
|
1
1
|
import Query from "@specs-feup/lara/api/weaver/Query.js";
|
2
|
-
import {
|
2
|
+
import { Loop, If } from "@specs-feup/clava/api/Joinpoints.js";
|
3
3
|
import MISRAAnalyser from "../MISRAAnalyser.js";
|
4
|
-
|
5
4
|
export default class Section14_ControlStmtExprs extends MISRAAnalyser {
|
6
|
-
ruleMapper
|
7
|
-
|
8
|
-
constructor(rules: number[]) {
|
5
|
+
ruleMapper;
|
6
|
+
constructor(rules) {
|
9
7
|
super(rules);
|
10
8
|
this.ruleMapper = new Map([
|
11
9
|
[4, this.r14_4_essentiallyBooleanInControllingExpr.bind(this)]
|
12
10
|
]);
|
13
11
|
}
|
14
|
-
|
15
|
-
private r14_4_essentiallyBooleanInControllingExpr($startNode: Joinpoint) { //better way?
|
12
|
+
r14_4_essentiallyBooleanInControllingExpr($startNode) {
|
16
13
|
Query.searchFrom($startNode, Loop).get().forEach(loop => {
|
17
|
-
if (
|
18
|
-
this.logMISRAError(loop, `Loop controlling expression ${
|
14
|
+
if (loop.cond.expr.type.code !== "bool") {
|
15
|
+
this.logMISRAError(loop, `Loop controlling expression ${loop.cond.expr.code} does not have essentially boolean type.`);
|
19
16
|
}
|
20
17
|
}, this);
|
21
18
|
Query.searchFrom($startNode, If).get().forEach(ifStmt => {
|
@@ -24,4 +21,5 @@ export default class Section14_ControlStmtExprs extends MISRAAnalyser {
|
|
24
21
|
}
|
25
22
|
}, this);
|
26
23
|
}
|
27
|
-
}
|
24
|
+
}
|
25
|
+
//# sourceMappingURL=Section14_ControlStmtExprs.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"Section14_ControlStmtExprs.js","sourceRoot":"","sources":["../../../src/misra/sections/Section14_ControlStmtExprs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,sCAAsC,CAAC;AACzD,OAAO,EAAmB,IAAI,EAAa,EAAE,EAAY,MAAM,qCAAqC,CAAC;AACrG,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAEhD,MAAM,CAAC,OAAO,OAAO,0BAA2B,SAAQ,aAAa;IACjE,UAAU,CAA8C;IAExD,YAAY,KAAe;QACvB,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,CAAC;YACtB,CAAC,CAAC,EAAE,IAAI,CAAC,yCAAyC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACjE,CAAC,CAAC;IACP,CAAC;IAEO,yCAAyC,CAAC,UAAqB;QACnE,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACpD,IAAK,IAAI,CAAC,IAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACpD,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,+BAAgC,IAAI,CAAC,IAAiB,CAAC,IAAI,CAAC,IAAI,0CAA0C,CAAC,CAAC;YACzI,CAAC;QACL,CAAC,EAAE,IAAI,CAAC,CAAC;QACT,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACpD,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACnC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,+BAA+B,MAAM,CAAC,IAAI,CAAC,IAAI,0CAA0C,CAAC,CAAC;YAC1H,CAAC;QACL,CAAC,EAAE,IAAI,CAAC,CAAC;IACb,CAAC;CACJ"}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import { Program, FileJp } from "@specs-feup/clava/api/Joinpoints.js";
|
2
|
+
import MISRAAnalyser from "../MISRAAnalyser.js";
|
3
|
+
export default class Section15_ControlFlow extends MISRAAnalyser {
|
4
|
+
ruleMapper: Map<number, (jp: Program | FileJp) => void>;
|
5
|
+
constructor(rules: number[]);
|
6
|
+
private r15_1_noGoto;
|
7
|
+
private static isBeforeInCode;
|
8
|
+
private r15_2_noBackJumps;
|
9
|
+
private r15_3_gotoBlockEnclosed;
|
10
|
+
private static addBreaksToExits;
|
11
|
+
private static addGotosToExits;
|
12
|
+
private r15_4_loopSingleBreak;
|
13
|
+
}
|
14
|
+
//# sourceMappingURL=Section15_ControlFlow.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"Section15_ControlFlow.d.ts","sourceRoot":"","sources":["../../../src/misra/sections/Section15_ControlFlow.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAyC,MAAM,qCAAqC,CAAC;AAC7G,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAEhD,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,aAAa;IAC5D,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC;gBAE5C,KAAK,EAAE,MAAM,EAAE;IAU3B,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,MAAM,CAAC,cAAc;IAK7B,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,uBAAuB;IA0B/B,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAa/B,OAAO,CAAC,MAAM,CAAC,eAAe;IAsB9B,OAAO,CAAC,qBAAqB;CAgBhC"}
|
@@ -0,0 +1,97 @@
|
|
1
|
+
import Query from "@specs-feup/lara/api/weaver/Query.js";
|
2
|
+
import { GotoStmt, LabelStmt, Break } from "@specs-feup/clava/api/Joinpoints.js";
|
3
|
+
import MISRAAnalyser from "../MISRAAnalyser.js";
|
4
|
+
export default class Section15_ControlFlow extends MISRAAnalyser {
|
5
|
+
ruleMapper;
|
6
|
+
constructor(rules) {
|
7
|
+
super(rules);
|
8
|
+
this.ruleMapper = new Map([
|
9
|
+
[1, this.r15_1_noGoto.bind(this)],
|
10
|
+
[2, this.r15_2_noBackJumps.bind(this)],
|
11
|
+
[3, this.r15_3_gotoBlockEnclosed.bind(this)],
|
12
|
+
[4, this.r15_4_loopSingleBreak.bind(this)]
|
13
|
+
]);
|
14
|
+
}
|
15
|
+
r15_1_noGoto($startNode) {
|
16
|
+
Query.searchFrom($startNode, GotoStmt).get().forEach(goto => this.logMISRAError(goto, "goto statements should not be used."), this);
|
17
|
+
return [];
|
18
|
+
}
|
19
|
+
static isBeforeInCode(line1, col1, line2, col2) {
|
20
|
+
if (line1 < line2)
|
21
|
+
return true;
|
22
|
+
else
|
23
|
+
return col1 < col2;
|
24
|
+
}
|
25
|
+
r15_2_noBackJumps($startNode) {
|
26
|
+
for (const gotoStmt of Query.searchFrom($startNode, GotoStmt)) {
|
27
|
+
if (!Section15_ControlFlow.isBeforeInCode(gotoStmt.line, gotoStmt.column, gotoStmt.label.line, gotoStmt.label.column)) {
|
28
|
+
this.logMISRAError(gotoStmt, "Back jumps using goto statements are not allowed.");
|
29
|
+
} //maybe there is a better way?
|
30
|
+
}
|
31
|
+
}
|
32
|
+
r15_3_gotoBlockEnclosed($startNode) {
|
33
|
+
const labelMap = new Map();
|
34
|
+
Query.searchFrom($startNode, LabelStmt).get().forEach(stmt => labelMap.set(stmt.decl.astId, stmt.astId));
|
35
|
+
for (const gotoStmt of Query.searchFrom($startNode, GotoStmt)) {
|
36
|
+
let curr = gotoStmt.getAncestor("scope");
|
37
|
+
const ancestor = gotoStmt.getAncestor("function");
|
38
|
+
let error = true;
|
39
|
+
let temp;
|
40
|
+
do {
|
41
|
+
temp = curr;
|
42
|
+
if (curr.children.map(n => n.astId).includes(labelMap.get(gotoStmt.label.astId))) {
|
43
|
+
error = false;
|
44
|
+
break;
|
45
|
+
}
|
46
|
+
curr = curr.getAncestor("scope");
|
47
|
+
} while (temp.parent.astId !== ancestor.astId);
|
48
|
+
if (error) {
|
49
|
+
this.logMISRAError(gotoStmt, `Label ${gotoStmt.label.name} is not declared in a block enclosing the goto statement.`);
|
50
|
+
}
|
51
|
+
}
|
52
|
+
}
|
53
|
+
static addBreaksToExits($startNode, exits, nodes) {
|
54
|
+
for (const goto of Query.searchFrom($startNode, Break)) {
|
55
|
+
const ancestor = goto.getAncestor("loop");
|
56
|
+
if (ancestor && exits.has(ancestor.astId)) {
|
57
|
+
exits.set(ancestor.astId, (exits.get(ancestor.astId) ?? 0) + 1);
|
58
|
+
}
|
59
|
+
else if (ancestor) {
|
60
|
+
exits.set(ancestor.astId, 1);
|
61
|
+
nodes.set(ancestor.astId, ancestor);
|
62
|
+
}
|
63
|
+
}
|
64
|
+
}
|
65
|
+
static addGotosToExits($startNode, exits, nodes, labels) {
|
66
|
+
for (const goto of Query.searchFrom($startNode, GotoStmt)) {
|
67
|
+
let ancestor = goto.getAncestor("loop");
|
68
|
+
const labelAncestor = labels.get(goto.label.astId)?.getAncestor("loop");
|
69
|
+
while (ancestor) {
|
70
|
+
if (labelAncestor?.astId === ancestor.astId)
|
71
|
+
break;
|
72
|
+
if (ancestor && exits.has(ancestor.astId)) {
|
73
|
+
exits.set(ancestor.astId, (exits.get(ancestor.astId) ?? 0) + 1);
|
74
|
+
}
|
75
|
+
else if (ancestor) {
|
76
|
+
exits.set(ancestor.astId, 1);
|
77
|
+
nodes.set(ancestor.astId, ancestor);
|
78
|
+
}
|
79
|
+
ancestor = ancestor.getAncestor("loop");
|
80
|
+
}
|
81
|
+
}
|
82
|
+
}
|
83
|
+
r15_4_loopSingleBreak($startNode) {
|
84
|
+
const labelMap = new Map();
|
85
|
+
Query.searchFrom($startNode, LabelStmt).get().forEach(stmt => labelMap.set(stmt.decl.astId, stmt));
|
86
|
+
const exits = new Map();
|
87
|
+
const nodes = new Map();
|
88
|
+
Section15_ControlFlow.addBreaksToExits($startNode, exits, nodes);
|
89
|
+
Section15_ControlFlow.addGotosToExits($startNode, exits, nodes, labelMap);
|
90
|
+
exits.forEach((v, k, m) => {
|
91
|
+
if (v > 1) {
|
92
|
+
this.logMISRAError(nodes.get(k), "Loops should have at most one break/goto statement.");
|
93
|
+
}
|
94
|
+
}, this);
|
95
|
+
}
|
96
|
+
}
|
97
|
+
//# sourceMappingURL=Section15_ControlFlow.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"Section15_ControlFlow.js","sourceRoot":"","sources":["../../../src/misra/sections/Section15_ControlFlow.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import { Program, FileJp } from "@specs-feup/clava/api/Joinpoints.js";
|
2
|
+
import MISRAAnalyser from "../MISRAAnalyser.js";
|
3
|
+
export default class Section16_SwitchStatements extends MISRAAnalyser {
|
4
|
+
ruleMapper: Map<number, (jp: Program | FileJp) => void>;
|
5
|
+
constructor(rules: number[]);
|
6
|
+
private r16_1_16_3_wellFormedSwitch;
|
7
|
+
private r16_2_topLevelSwitchLabels;
|
8
|
+
private r16_4_switchHasDefault;
|
9
|
+
private r16_5_defaultFirstOrLast;
|
10
|
+
private r16_6_noTwoClauses;
|
11
|
+
private r16_7_noEssentialBooleanInSwitch;
|
12
|
+
}
|
13
|
+
//# sourceMappingURL=Section16_SwitchStatements.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"Section16_SwitchStatements.d.ts","sourceRoot":"","sources":["../../../src/misra/sections/Section16_SwitchStatements.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAwE,MAAM,qCAAqC,CAAC;AAC5I,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAIhD,MAAM,CAAC,OAAO,OAAO,0BAA2B,SAAQ,aAAa;IACjE,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC;gBAE5C,KAAK,EAAE,MAAM,EAAE;IAW3B,OAAO,CAAC,2BAA2B;IA0BnC,OAAO,CAAC,0BAA0B;IAQlC,OAAO,CAAC,sBAAsB;IAK9B,OAAO,CAAC,wBAAwB;IAchC,OAAO,CAAC,kBAAkB;IAmC1B,OAAO,CAAC,gCAAgC;CA6C3C"}
|
@@ -1,13 +1,11 @@
|
|
1
1
|
import Query from "@specs-feup/lara/api/weaver/Query.js";
|
2
|
-
import {
|
2
|
+
import { Switch, Break, Case, BuiltinType, BoolLiteral } from "@specs-feup/clava/api/Joinpoints.js";
|
3
3
|
import MISRAAnalyser from "../MISRAAnalyser.js";
|
4
4
|
import Fix from "@specs-feup/clava/api/clava/analysis/Fix.js";
|
5
5
|
import ClavaJoinPoints from "@specs-feup/clava/api/clava/ClavaJoinPoints.js";
|
6
|
-
|
7
6
|
export default class Section16_SwitchStatements extends MISRAAnalyser {
|
8
|
-
ruleMapper
|
9
|
-
|
10
|
-
constructor(rules: number[]) {
|
7
|
+
ruleMapper;
|
8
|
+
constructor(rules) {
|
11
9
|
super(rules);
|
12
10
|
this.ruleMapper = new Map([
|
13
11
|
[1, this.r16_1_16_3_wellFormedSwitch.bind(this)],
|
@@ -17,14 +15,13 @@ export default class Section16_SwitchStatements extends MISRAAnalyser {
|
|
17
15
|
[7, this.r16_7_noEssentialBooleanInSwitch.bind(this)]
|
18
16
|
]);
|
19
17
|
}
|
20
|
-
|
21
|
-
private r16_1_16_3_wellFormedSwitch($startNode: Joinpoint) {
|
18
|
+
r16_1_16_3_wellFormedSwitch($startNode) {
|
22
19
|
for (const switchStmt of Query.searchFrom($startNode, Switch)) {
|
23
|
-
|
24
20
|
let foundStmt = false;
|
25
21
|
let first = true;
|
26
22
|
for (const child of switchStmt.children[1].children) {
|
27
|
-
if (child instanceof Break) {
|
23
|
+
if (child instanceof Break) {
|
24
|
+
;
|
28
25
|
foundStmt = false;
|
29
26
|
}
|
30
27
|
else if (child instanceof Case) {
|
@@ -33,7 +30,6 @@ export default class Section16_SwitchStatements extends MISRAAnalyser {
|
|
33
30
|
else {
|
34
31
|
foundStmt = true;
|
35
32
|
}
|
36
|
-
|
37
33
|
if (foundStmt && child.instanceOf("case")) {
|
38
34
|
this.logMISRAError(child, `A break is missing before ${child.code}`);
|
39
35
|
}
|
@@ -41,23 +37,19 @@ export default class Section16_SwitchStatements extends MISRAAnalyser {
|
|
41
37
|
if (!switchStmt.children[1].lastChild.instanceOf("break")) {
|
42
38
|
this.logMISRAError(switchStmt.children[1].lastChild, "A break is missing at the end of the switch statement.");
|
43
39
|
}
|
44
|
-
}
|
40
|
+
}
|
45
41
|
}
|
46
|
-
|
47
|
-
private r16_2_topLevelSwitchLabels($startNode: Joinpoint) {
|
42
|
+
r16_2_topLevelSwitchLabels($startNode) {
|
48
43
|
Query.searchFrom($startNode, Case).get().forEach(caseLabel => {
|
49
44
|
if (!caseLabel.currentRegion.instanceOf("switch")) {
|
50
|
-
this.logMISRAError(caseLabel, "A switch label can only be used if its enclosing compound statement is the switch statement itself.")
|
45
|
+
this.logMISRAError(caseLabel, "A switch label can only be used if its enclosing compound statement is the switch statement itself.");
|
51
46
|
}
|
52
47
|
}, this);
|
53
48
|
}
|
54
|
-
|
55
|
-
|
56
|
-
Query.searchFrom($startNode, Switch, {hasDefaultCase: false}).get().forEach(sw => this.logMISRAError(sw, "Switch statement is missing a default case."), this);
|
49
|
+
r16_4_switchHasDefault($startNode) {
|
50
|
+
Query.searchFrom($startNode, Switch, { hasDefaultCase: false }).get().forEach(sw => this.logMISRAError(sw, "Switch statement is missing a default case."), this);
|
57
51
|
}
|
58
|
-
|
59
|
-
|
60
|
-
private r16_5_defaultFirstOrLast($startNode: Joinpoint) {
|
52
|
+
r16_5_defaultFirstOrLast($startNode) {
|
61
53
|
Query.searchFrom($startNode, Switch).get().forEach(switchStmt => {
|
62
54
|
for (let i = 0; i < switchStmt.cases.length; i++) {
|
63
55
|
if (switchStmt.cases[i].isDefault && (i == 0 || i == switchStmt.cases.length)) {
|
@@ -70,8 +62,7 @@ export default class Section16_SwitchStatements extends MISRAAnalyser {
|
|
70
62
|
}
|
71
63
|
}, this);
|
72
64
|
}
|
73
|
-
|
74
|
-
private r16_6_noTwoClauses($startNode: Joinpoint) {
|
65
|
+
r16_6_noTwoClauses($startNode) {
|
75
66
|
Query.searchFrom($startNode, Switch).get().forEach(switchStmt => {
|
76
67
|
let clauses = 0;
|
77
68
|
let foundStmt = false;
|
@@ -88,67 +79,51 @@ export default class Section16_SwitchStatements extends MISRAAnalyser {
|
|
88
79
|
foundStmt = true;
|
89
80
|
}
|
90
81
|
}
|
91
|
-
|
92
82
|
if (clauses == 2) {
|
93
|
-
this.logMISRAError(switchStmt, "Switch statements should have more than two clauses.", new Fix(
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
let secondClause: Joinpoint[] = []
|
100
|
-
for (const child of switchStmt.children[1].children) {
|
101
|
-
|
102
|
-
}
|
83
|
+
this.logMISRAError(switchStmt, "Switch statements should have more than two clauses.", new Fix(switchStmt, (switchStmt) => {
|
84
|
+
let firstClauseExpr;
|
85
|
+
let secondClauseExpr;
|
86
|
+
let firstClause = [];
|
87
|
+
let secondClause = [];
|
88
|
+
for (const child of switchStmt.children[1].children) {
|
103
89
|
}
|
104
|
-
));
|
90
|
+
}));
|
105
91
|
}
|
106
92
|
}, this);
|
107
93
|
}
|
108
|
-
|
109
|
-
private r16_7_noEssentialBooleanInSwitch($startNode: Joinpoint) { //is this the best way?
|
94
|
+
r16_7_noEssentialBooleanInSwitch($startNode) {
|
110
95
|
Query.searchFrom($startNode, Switch).get().forEach(switchStmt => {
|
111
96
|
if (switchStmt.condition.type instanceof BuiltinType && switchStmt.condition.type.builtinKind === "Bool") {
|
112
|
-
this.logMISRAError(switchStmt, `Switch statement controlling expression ${switchStmt.condition.code} must not have essentially boolean type.`, new Fix(
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
}
|
136
|
-
else if (inFalse && !(child instanceof Case)) {
|
137
|
-
falseClause.push(child.deepCopy());
|
138
|
-
}
|
97
|
+
this.logMISRAError(switchStmt, `Switch statement controlling expression ${switchStmt.condition.code} must not have essentially boolean type.`, new Fix(switchStmt, (switchStmt) => {
|
98
|
+
const trueClause = [];
|
99
|
+
const falseClause = [];
|
100
|
+
let inTrue = false;
|
101
|
+
let inFalse = false;
|
102
|
+
for (const child of switchStmt.children[1].children) {
|
103
|
+
if (child instanceof Case && child.values.length == 1 && child.values[0].children[0] instanceof BoolLiteral && child.values[0].children[0].value) {
|
104
|
+
inTrue = true;
|
105
|
+
inFalse = false;
|
106
|
+
}
|
107
|
+
else if (child instanceof Case && child.values.length == 1 && child.values[0].children[0] instanceof BoolLiteral && !child.values[0].children[0].value) {
|
108
|
+
inFalse = true;
|
109
|
+
inTrue = false;
|
110
|
+
}
|
111
|
+
else if (child instanceof Break) {
|
112
|
+
inTrue = false;
|
113
|
+
inFalse = false;
|
114
|
+
}
|
115
|
+
if (inTrue && !(child instanceof Case)) {
|
116
|
+
trueClause.push(child.deepCopy());
|
117
|
+
}
|
118
|
+
else if (inFalse && !(child instanceof Case)) {
|
119
|
+
falseClause.push(child.deepCopy());
|
139
120
|
}
|
140
|
-
|
141
|
-
const ifStmt = ClavaJoinPoints.ifStmt(
|
142
|
-
(switchStmt as Switch).condition,
|
143
|
-
ClavaJoinPoints.scope(...trueClause),
|
144
|
-
ClavaJoinPoints.scope(...falseClause)
|
145
|
-
);
|
146
|
-
|
147
|
-
switchStmt.replaceWith(ifStmt);
|
148
121
|
}
|
149
|
-
|
122
|
+
const ifStmt = ClavaJoinPoints.ifStmt(switchStmt.condition, ClavaJoinPoints.scope(...trueClause), ClavaJoinPoints.scope(...falseClause));
|
123
|
+
switchStmt.replaceWith(ifStmt);
|
124
|
+
}));
|
150
125
|
}
|
151
126
|
}, this);
|
152
127
|
}
|
153
|
-
|
154
|
-
|
128
|
+
}
|
129
|
+
//# sourceMappingURL=Section16_SwitchStatements.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"Section16_SwitchStatements.js","sourceRoot":"","sources":["../../../src/misra/sections/Section16_SwitchStatements.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import { Program, FileJp } from "@specs-feup/clava/api/Joinpoints.js";
|
2
|
+
import MISRAAnalyser from "../MISRAAnalyser.js";
|
3
|
+
export default class Section17_Functions extends MISRAAnalyser {
|
4
|
+
protected ruleMapper: Map<number, (jp: Program | FileJp) => void>;
|
5
|
+
constructor(rules: number[]);
|
6
|
+
private r17_1_noStdargUsage;
|
7
|
+
private r17_7_returnValuesAreUsed;
|
8
|
+
}
|
9
|
+
//# sourceMappingURL=Section17_Functions.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"Section17_Functions.d.ts","sourceRoot":"","sources":["../../../src/misra/sections/Section17_Functions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAmD,MAAM,qCAAqC,CAAC;AACvH,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAKhD,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,aAAa;IAC1D,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC;gBAEtD,KAAK,EAAE,MAAM,EAAE;IAQ3B,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,yBAAyB;CAWpC"}
|
package/{src/misra/sections/Section17_Functions.ts → dist/misra/sections/Section17_Functions.js}
RENAMED
@@ -1,33 +1,30 @@
|
|
1
|
-
import {
|
1
|
+
import { Include, Call, BuiltinType, ExprStmt } from "@specs-feup/clava/api/Joinpoints.js";
|
2
2
|
import MISRAAnalyser from "../MISRAAnalyser.js";
|
3
3
|
import Query from "@specs-feup/lara/api/weaver/Query.js";
|
4
4
|
import Fix from "@specs-feup/clava/api/clava/analysis/Fix.js";
|
5
5
|
import ClavaJoinPoints from "@specs-feup/clava/api/clava/ClavaJoinPoints.js";
|
6
|
-
|
7
6
|
export default class Section17_Functions extends MISRAAnalyser {
|
8
|
-
|
9
|
-
|
10
|
-
constructor(rules: number[]) {
|
7
|
+
ruleMapper;
|
8
|
+
constructor(rules) {
|
11
9
|
super(rules);
|
12
10
|
this.ruleMapper = new Map([
|
13
11
|
[1, this.r17_1_noStdargUsage.bind(this)],
|
14
12
|
[7, this.r17_7_returnValuesAreUsed.bind(this)]
|
15
13
|
]);
|
16
14
|
}
|
17
|
-
|
18
|
-
|
19
|
-
Query.searchFrom($startNode, Include, {name: "stdarg.h", isAngled: true}).get().forEach(include => this.logMISRAError(include, "Use of <stdarg.h> is not allowed."), this);
|
15
|
+
r17_1_noStdargUsage($startNode) {
|
16
|
+
Query.searchFrom($startNode, Include, { name: "stdarg.h", isAngled: true }).get().forEach(include => this.logMISRAError(include, "Use of <stdarg.h> is not allowed."), this);
|
20
17
|
}
|
21
|
-
|
22
|
-
|
23
|
-
Query.searchFrom($startNode, Call, {returnType: (type) => !(type instanceof BuiltinType && type.isVoid)}).get().forEach(call => {
|
18
|
+
r17_7_returnValuesAreUsed($startNode) {
|
19
|
+
Query.searchFrom($startNode, Call, { returnType: (type) => !(type instanceof BuiltinType && type.isVoid) }).get().forEach(call => {
|
24
20
|
console.log(call.parent);
|
25
21
|
if (call.parent instanceof ExprStmt) {
|
26
22
|
this.logMISRAError(call, `Return value of ${call.signature} must be used. It can be discarded with an explicit cast to void.`, new Fix(call, ($jp) => {
|
27
|
-
const newJp = ClavaJoinPoints.cStyleCast(ClavaJoinPoints.type("void"), $jp.deepCopy()
|
23
|
+
const newJp = ClavaJoinPoints.cStyleCast(ClavaJoinPoints.type("void"), $jp.deepCopy());
|
28
24
|
$jp.replaceWith(newJp);
|
29
25
|
}));
|
30
26
|
}
|
31
27
|
}, this);
|
32
28
|
}
|
33
|
-
}
|
29
|
+
}
|
30
|
+
//# sourceMappingURL=Section17_Functions.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"Section17_Functions.js","sourceRoot":"","sources":["../../../src/misra/sections/Section17_Functions.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AACvH,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,MAAM,sCAAsC,CAAC;AACzD,OAAO,GAAG,MAAM,6CAA6C,CAAC;AAC9D,OAAO,eAAe,MAAM,gDAAgD,CAAC;AAE7E,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,aAAa;IAChD,UAAU,CAA8C;IAElE,YAAY,KAAe;QACvB,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,CAAC;YACtB,CAAC,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxC,CAAC,CAAC,EAAE,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACjD,CAAC,CAAC;IACP,CAAC;IAEO,mBAAmB,CAAC,UAAqB;QAC7C,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,EAAE,EAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,mCAAmC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC/K,CAAC;IAEO,yBAAyB,CAAC,UAAqB;QACnD,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,EAAE,EAAC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,YAAY,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,EAAC,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC3H,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzB,IAAI,IAAI,CAAC,MAAM,YAAY,QAAQ,EAAE,CAAC;gBAClC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,mBAAmB,IAAI,CAAC,SAAS,mEAAmE,EAAE,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;oBACjJ,MAAM,KAAK,GAAG,eAAe,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAU,CAAC,CAAC;oBAC/F,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBAC3B,CAAC,CAAC,CAAC,CAAC;YACR,CAAC;QACL,CAAC,EAAE,IAAI,CAAC,CAAC;IACb,CAAC;CACJ"}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import { Program, FileJp } from "@specs-feup/clava/api/Joinpoints.js";
|
2
|
+
import MISRAAnalyser from "../MISRAAnalyser.js";
|
3
|
+
export default class Section18_PointersAndArrays extends MISRAAnalyser {
|
4
|
+
ruleMapper: Map<number, (jp: Program | FileJp) => void>;
|
5
|
+
constructor(rules: number[]);
|
6
|
+
private r18_4_noPointerArithmetic;
|
7
|
+
private static getDepth;
|
8
|
+
private static getUnderlyingType;
|
9
|
+
private r18_5_noExcessivePointerNesting;
|
10
|
+
private r18_7_noFlexibleArrayMembers;
|
11
|
+
private r18_8_noVariableLengthArrays;
|
12
|
+
}
|
13
|
+
//# sourceMappingURL=Section18_PointersAndArrays.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"Section18_PointersAndArrays.d.ts","sourceRoot":"","sources":["../../../src/misra/sections/Section18_PointersAndArrays.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAqG,MAAM,qCAAqC,CAAC;AACzK,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAEhD,MAAM,CAAC,OAAO,OAAO,2BAA4B,SAAQ,aAAa;IAClE,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC;gBAE5C,KAAK,EAAE,MAAM,EAAE;IAU3B,OAAO,CAAC,yBAAyB;IAOjC,OAAO,CAAC,MAAM,CAAC,QAAQ;IAkBvB,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAgBhC,OAAO,CAAC,+BAA+B;IAgCvC,OAAO,CAAC,4BAA4B;IASpC,OAAO,CAAC,4BAA4B;CAQvC"}
|