@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.
Files changed (350) hide show
  1. package/.gitignore +117 -0
  2. package/README.md +70 -15
  3. package/dist/MISRA.d.ts +129 -0
  4. package/dist/MISRA.d.ts.map +1 -0
  5. package/dist/MISRA.js +245 -0
  6. package/dist/MISRA.js.map +1 -0
  7. package/dist/MISRAContext.d.ts +21 -0
  8. package/dist/MISRAContext.d.ts.map +1 -0
  9. package/dist/MISRAContext.js +75 -0
  10. package/dist/MISRAContext.js.map +1 -0
  11. package/dist/MISRARule.d.ts +56 -0
  12. package/dist/MISRARule.d.ts.map +1 -0
  13. package/dist/MISRARule.js +45 -0
  14. package/dist/MISRARule.js.map +1 -0
  15. package/dist/MISRATool.d.ts +12 -0
  16. package/dist/MISRATool.d.ts.map +1 -0
  17. package/dist/MISRATool.js +84 -0
  18. package/dist/MISRATool.js.map +1 -0
  19. package/dist/foo.d.ts +2 -0
  20. package/dist/foo.d.ts.map +1 -0
  21. package/{src/foo.ts → dist/foo.js} +3 -2
  22. package/dist/foo.js.map +1 -0
  23. package/dist/main.d.ts +2 -0
  24. package/dist/main.d.ts.map +1 -0
  25. package/dist/main.js +5 -0
  26. package/dist/main.js.map +1 -0
  27. package/dist/misra/MISRAAnalyser.d.ts +14 -0
  28. package/dist/misra/MISRAAnalyser.d.ts.map +1 -0
  29. package/{src/misra/MISRAAnalyser.ts → dist/misra/MISRAAnalyser.js} +13 -23
  30. package/dist/misra/MISRAAnalyser.js.map +1 -0
  31. package/dist/misra/MISRAPass.d.ts +27 -0
  32. package/dist/misra/MISRAPass.d.ts.map +1 -0
  33. package/dist/misra/MISRAPass.js +60 -0
  34. package/dist/misra/MISRAPass.js.map +1 -0
  35. package/dist/misra/MISRAPassResult.d.ts +13 -0
  36. package/dist/misra/MISRAPassResult.d.ts.map +1 -0
  37. package/dist/misra/MISRAPassResult.js +11 -0
  38. package/dist/misra/MISRAPassResult.js.map +1 -0
  39. package/dist/misra/MISRAReporter.d.ts +20 -0
  40. package/dist/misra/MISRAReporter.d.ts.map +1 -0
  41. package/dist/misra/MISRAReporter.js +43 -0
  42. package/dist/misra/MISRAReporter.js.map +1 -0
  43. package/dist/misra/passes/S10_EssentialTypePass.d.ts +42 -0
  44. package/dist/misra/passes/S10_EssentialTypePass.d.ts.map +1 -0
  45. package/dist/misra/passes/S10_EssentialTypePass.js +370 -0
  46. package/dist/misra/passes/S10_EssentialTypePass.js.map +1 -0
  47. package/dist/misra/passes/S12_ExpressionPass.d.ts +18 -0
  48. package/dist/misra/passes/S12_ExpressionPass.d.ts.map +1 -0
  49. package/dist/misra/passes/S12_ExpressionPass.js +72 -0
  50. package/dist/misra/passes/S12_ExpressionPass.js.map +1 -0
  51. package/dist/misra/passes/S13_SideEffectPass.d.ts +18 -0
  52. package/dist/misra/passes/S13_SideEffectPass.d.ts.map +1 -0
  53. package/dist/misra/passes/S13_SideEffectPass.js +105 -0
  54. package/dist/misra/passes/S13_SideEffectPass.js.map +1 -0
  55. package/dist/misra/passes/S15_ControlFlowPass.d.ts +19 -0
  56. package/dist/misra/passes/S15_ControlFlowPass.d.ts.map +1 -0
  57. package/dist/misra/passes/S15_ControlFlowPass.js +94 -0
  58. package/dist/misra/passes/S15_ControlFlowPass.js.map +1 -0
  59. package/dist/misra/passes/S16_SwitchStatementPass.d.ts +17 -0
  60. package/dist/misra/passes/S16_SwitchStatementPass.d.ts.map +1 -0
  61. package/dist/misra/passes/S16_SwitchStatementPass.js +152 -0
  62. package/dist/misra/passes/S16_SwitchStatementPass.js.map +1 -0
  63. package/dist/misra/passes/S17_FunctionPass.d.ts +12 -0
  64. package/dist/misra/passes/S17_FunctionPass.d.ts.map +1 -0
  65. package/dist/misra/passes/S17_FunctionPass.js +38 -0
  66. package/dist/misra/passes/S17_FunctionPass.js.map +1 -0
  67. package/dist/misra/passes/S18_PointersArraysPass.d.ts +17 -0
  68. package/dist/misra/passes/S18_PointersArraysPass.d.ts.map +1 -0
  69. package/dist/misra/passes/S18_PointersArraysPass.js +115 -0
  70. package/dist/misra/passes/S18_PointersArraysPass.js.map +1 -0
  71. package/dist/misra/passes/S19_OverlappingStoragePass.d.ts +11 -0
  72. package/dist/misra/passes/S19_OverlappingStoragePass.d.ts.map +1 -0
  73. package/dist/misra/passes/S19_OverlappingStoragePass.js +20 -0
  74. package/dist/misra/passes/S19_OverlappingStoragePass.js.map +1 -0
  75. package/dist/misra/passes/S21_StandardLibPass.d.ts +20 -0
  76. package/dist/misra/passes/S21_StandardLibPass.d.ts.map +1 -0
  77. package/dist/misra/passes/S21_StandardLibPass.js +77 -0
  78. package/dist/misra/passes/S21_StandardLibPass.js.map +1 -0
  79. package/dist/misra/passes/S3_CommentPass.d.ts +12 -0
  80. package/dist/misra/passes/S3_CommentPass.d.ts.map +1 -0
  81. package/dist/misra/passes/S3_CommentPass.js +27 -0
  82. package/dist/misra/passes/S3_CommentPass.js.map +1 -0
  83. package/dist/misra/passes/S5_IdentifierPass.d.ts +13 -0
  84. package/dist/misra/passes/S5_IdentifierPass.d.ts.map +1 -0
  85. package/dist/misra/passes/S5_IdentifierPass.js +60 -0
  86. package/dist/misra/passes/S5_IdentifierPass.js.map +1 -0
  87. package/dist/misra/passes/S6_TypePass.d.ts +11 -0
  88. package/dist/misra/passes/S6_TypePass.d.ts.map +1 -0
  89. package/dist/misra/passes/S6_TypePass.js +25 -0
  90. package/dist/misra/passes/S6_TypePass.js.map +1 -0
  91. package/dist/misra/passes/S7_LiteralsConstantsPass.d.ts +14 -0
  92. package/dist/misra/passes/S7_LiteralsConstantsPass.d.ts.map +1 -0
  93. package/dist/misra/passes/S7_LiteralsConstantsPass.js +71 -0
  94. package/dist/misra/passes/S7_LiteralsConstantsPass.js.map +1 -0
  95. package/dist/misra/passes/S8_DeclDefPass.d.ts +18 -0
  96. package/dist/misra/passes/S8_DeclDefPass.d.ts.map +1 -0
  97. package/dist/misra/passes/S8_DeclDefPass.js +127 -0
  98. package/dist/misra/passes/S8_DeclDefPass.js.map +1 -0
  99. package/dist/misra/sections/Section10_EssentialTypeModel.d.ts +33 -0
  100. package/dist/misra/sections/Section10_EssentialTypeModel.d.ts.map +1 -0
  101. package/{src/misra/sections/Section10_EssentialTypeModel.ts → dist/misra/sections/Section10_EssentialTypeModel.js} +58 -73
  102. package/dist/misra/sections/Section10_EssentialTypeModel.js.map +1 -0
  103. package/dist/misra/sections/Section11_PointerTypeConversions.d.ts +12 -0
  104. package/dist/misra/sections/Section11_PointerTypeConversions.d.ts.map +1 -0
  105. package/{src/misra/sections/Section11_PointerTypeConversions.ts → dist/misra/sections/Section11_PointerTypeConversions.js} +16 -27
  106. package/dist/misra/sections/Section11_PointerTypeConversions.js.map +1 -0
  107. package/dist/misra/sections/Section12_Expressions.d.ts +15 -0
  108. package/dist/misra/sections/Section12_Expressions.d.ts.map +1 -0
  109. package/dist/misra/sections/Section12_Expressions.js +70 -0
  110. package/dist/misra/sections/Section12_Expressions.js.map +1 -0
  111. package/dist/misra/sections/Section13_SideEffects.d.ts +14 -0
  112. package/dist/misra/sections/Section13_SideEffects.d.ts.map +1 -0
  113. package/dist/misra/sections/Section13_SideEffects.js +90 -0
  114. package/dist/misra/sections/Section13_SideEffects.js.map +1 -0
  115. package/dist/misra/sections/Section14_ControlStmtExprs.d.ts +8 -0
  116. package/dist/misra/sections/Section14_ControlStmtExprs.d.ts.map +1 -0
  117. package/{src/misra/sections/Section14_ControlStmtExprs.ts → dist/misra/sections/Section14_ControlStmtExprs.js} +8 -10
  118. package/dist/misra/sections/Section14_ControlStmtExprs.js.map +1 -0
  119. package/dist/misra/sections/Section15_ControlFlow.d.ts +14 -0
  120. package/dist/misra/sections/Section15_ControlFlow.d.ts.map +1 -0
  121. package/dist/misra/sections/Section15_ControlFlow.js +97 -0
  122. package/dist/misra/sections/Section15_ControlFlow.js.map +1 -0
  123. package/dist/misra/sections/Section16_SwitchStatements.d.ts +13 -0
  124. package/dist/misra/sections/Section16_SwitchStatements.d.ts.map +1 -0
  125. package/{src/misra/sections/Section16_SwitchStatements.ts → dist/misra/sections/Section16_SwitchStatements.js} +49 -74
  126. package/dist/misra/sections/Section16_SwitchStatements.js.map +1 -0
  127. package/dist/misra/sections/Section17_Functions.d.ts +9 -0
  128. package/dist/misra/sections/Section17_Functions.d.ts.map +1 -0
  129. package/{src/misra/sections/Section17_Functions.ts → dist/misra/sections/Section17_Functions.js} +10 -13
  130. package/dist/misra/sections/Section17_Functions.js.map +1 -0
  131. package/dist/misra/sections/Section18_PointersAndArrays.d.ts +13 -0
  132. package/dist/misra/sections/Section18_PointersAndArrays.d.ts.map +1 -0
  133. package/{src/misra/sections/Section18_PointersAndArrays.ts → dist/misra/sections/Section18_PointersAndArrays.js} +36 -40
  134. package/dist/misra/sections/Section18_PointersAndArrays.js.map +1 -0
  135. package/dist/misra/sections/Section19_OverlappingStorage.d.ts +8 -0
  136. package/dist/misra/sections/Section19_OverlappingStorage.d.ts.map +1 -0
  137. package/dist/misra/sections/Section19_OverlappingStorage.js +16 -0
  138. package/dist/misra/sections/Section19_OverlappingStorage.js.map +1 -0
  139. package/dist/misra/sections/Section20_PreprocessingDirectives.d.ts +8 -0
  140. package/dist/misra/sections/Section20_PreprocessingDirectives.d.ts.map +1 -0
  141. package/{src/misra/sections/Section20_PreprocessingDirectives.ts → dist/misra/sections/Section20_PreprocessingDirectives.js} +7 -9
  142. package/dist/misra/sections/Section20_PreprocessingDirectives.js.map +1 -0
  143. package/dist/misra/sections/Section21_StandardLibraries.d.ts +17 -0
  144. package/dist/misra/sections/Section21_StandardLibraries.d.ts.map +1 -0
  145. package/dist/misra/sections/Section21_StandardLibraries.js +54 -0
  146. package/dist/misra/sections/Section21_StandardLibraries.js.map +1 -0
  147. package/dist/misra/sections/Section2_UnusedCode.d.ts +9 -0
  148. package/dist/misra/sections/Section2_UnusedCode.d.ts.map +1 -0
  149. package/{src/misra/sections/Section2_UnusedCode.ts → dist/misra/sections/Section2_UnusedCode.js} +11 -16
  150. package/dist/misra/sections/Section2_UnusedCode.js.map +1 -0
  151. package/dist/misra/sections/Section3_Comments.d.ts +9 -0
  152. package/dist/misra/sections/Section3_Comments.d.ts.map +1 -0
  153. package/{src/misra/sections/Section3_Comments.ts → dist/misra/sections/Section3_Comments.js} +7 -10
  154. package/dist/misra/sections/Section3_Comments.js.map +1 -0
  155. package/dist/misra/sections/Section5_Identifiers.d.ts +12 -0
  156. package/dist/misra/sections/Section5_Identifiers.d.ts.map +1 -0
  157. package/dist/misra/sections/Section5_Identifiers.js +139 -0
  158. package/dist/misra/sections/Section5_Identifiers.js.map +1 -0
  159. package/dist/misra/sections/Section6_Types.d.ts +8 -0
  160. package/dist/misra/sections/Section6_Types.d.ts.map +1 -0
  161. package/dist/misra/sections/Section6_Types.js +23 -0
  162. package/dist/misra/sections/Section6_Types.js.map +1 -0
  163. package/dist/misra/sections/Section7_LiteralsConstants.d.ts +11 -0
  164. package/dist/misra/sections/Section7_LiteralsConstants.d.ts.map +1 -0
  165. package/{src/misra/sections/Section7_LiteralsConstants.ts → dist/misra/sections/Section7_LiteralsConstants.js} +18 -25
  166. package/dist/misra/sections/Section7_LiteralsConstants.js.map +1 -0
  167. package/dist/misra/sections/Section8_DeclarationsDefinitions.d.ts +15 -0
  168. package/dist/misra/sections/Section8_DeclarationsDefinitions.d.ts.map +1 -0
  169. package/{src/misra/sections/Section8_DeclarationsDefinitions.ts → dist/misra/sections/Section8_DeclarationsDefinitions.js} +18 -33
  170. package/dist/misra/sections/Section8_DeclarationsDefinitions.js.map +1 -0
  171. package/dist/misra/tests/utils.d.ts +10 -0
  172. package/dist/misra/tests/utils.d.ts.map +1 -0
  173. package/dist/misra/tests/utils.js +33 -0
  174. package/dist/misra/tests/utils.js.map +1 -0
  175. package/dist/rules/Section16_SwitchStatements/Rule_16_2_TopLevelSwitch.d.ts +15 -0
  176. package/dist/rules/Section16_SwitchStatements/Rule_16_2_TopLevelSwitch.d.ts.map +1 -0
  177. package/dist/rules/Section16_SwitchStatements/Rule_16_2_TopLevelSwitch.js +33 -0
  178. package/dist/rules/Section16_SwitchStatements/Rule_16_2_TopLevelSwitch.js.map +1 -0
  179. package/dist/rules/Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.d.ts +16 -0
  180. package/dist/rules/Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.d.ts.map +1 -0
  181. package/dist/rules/Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.js +60 -0
  182. package/dist/rules/Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.js.map +1 -0
  183. package/dist/rules/Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.d.ts +19 -0
  184. package/dist/rules/Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.d.ts.map +1 -0
  185. package/dist/rules/Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.js +42 -0
  186. package/dist/rules/Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.js.map +1 -0
  187. package/dist/rules/Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.d.ts +43 -0
  188. package/dist/rules/Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.d.ts.map +1 -0
  189. package/dist/rules/Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.js +103 -0
  190. package/dist/rules/Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.js.map +1 -0
  191. package/dist/rules/Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.d.ts +26 -0
  192. package/dist/rules/Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.d.ts.map +1 -0
  193. package/dist/rules/Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.js +49 -0
  194. package/dist/rules/Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.js.map +1 -0
  195. package/dist/rules/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.d.ts +26 -0
  196. package/dist/rules/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.d.ts.map +1 -0
  197. package/dist/rules/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.js +49 -0
  198. package/dist/rules/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.js.map +1 -0
  199. package/dist/rules/Section17_Functions/Rule_17_4_NonVoidReturn.d.ts +31 -0
  200. package/dist/rules/Section17_Functions/Rule_17_4_NonVoidReturn.d.ts.map +1 -0
  201. package/dist/rules/Section17_Functions/Rule_17_4_NonVoidReturn.js +71 -0
  202. package/dist/rules/Section17_Functions/Rule_17_4_NonVoidReturn.js.map +1 -0
  203. package/dist/rules/Section17_Functions/Rule_17_6_StaticArraySizeParam.d.ts +27 -0
  204. package/dist/rules/Section17_Functions/Rule_17_6_StaticArraySizeParam.d.ts.map +1 -0
  205. package/dist/rules/Section17_Functions/Rule_17_6_StaticArraySizeParam.js +58 -0
  206. package/dist/rules/Section17_Functions/Rule_17_6_StaticArraySizeParam.js.map +1 -0
  207. package/dist/rules/Section17_Functions/Rule_17_7_UnusedReturnValue.d.ts +28 -0
  208. package/dist/rules/Section17_Functions/Rule_17_7_UnusedReturnValue.d.ts.map +1 -0
  209. package/dist/rules/Section17_Functions/Rule_17_7_UnusedReturnValue.js +44 -0
  210. package/dist/rules/Section17_Functions/Rule_17_7_UnusedReturnValue.js.map +1 -0
  211. package/dist/rules/Section20-PreprocessingDirectives/Rule_20_2_InvalidHeaderFileName.d.ts +55 -0
  212. package/dist/rules/Section20-PreprocessingDirectives/Rule_20_2_InvalidHeaderFileName.d.ts.map +1 -0
  213. package/dist/rules/Section20-PreprocessingDirectives/Rule_20_2_InvalidHeaderFileName.js +108 -0
  214. package/dist/rules/Section20-PreprocessingDirectives/Rule_20_2_InvalidHeaderFileName.js.map +1 -0
  215. package/dist/rules/Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.d.ts +43 -0
  216. package/dist/rules/Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.d.ts.map +1 -0
  217. package/dist/rules/Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.js +68 -0
  218. package/dist/rules/Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.js.map +1 -0
  219. package/dist/rules/Section2_UnusedCode/Rule_2_4_UnusedTagDecl.d.ts +29 -0
  220. package/dist/rules/Section2_UnusedCode/Rule_2_4_UnusedTagDecl.d.ts.map +1 -0
  221. package/dist/rules/Section2_UnusedCode/Rule_2_4_UnusedTagDecl.js +53 -0
  222. package/dist/rules/Section2_UnusedCode/Rule_2_4_UnusedTagDecl.js.map +1 -0
  223. package/dist/rules/Section2_UnusedCode/Rule_2_6_UnusedLabels.d.ts +15 -0
  224. package/dist/rules/Section2_UnusedCode/Rule_2_6_UnusedLabels.d.ts.map +1 -0
  225. package/dist/rules/Section2_UnusedCode/Rule_2_6_UnusedLabels.js +35 -0
  226. package/dist/rules/Section2_UnusedCode/Rule_2_6_UnusedLabels.js.map +1 -0
  227. package/dist/rules/Section2_UnusedCode/Rule_2_7_UnusedParameters.d.ts +13 -0
  228. package/dist/rules/Section2_UnusedCode/Rule_2_7_UnusedParameters.d.ts.map +1 -0
  229. package/dist/rules/Section2_UnusedCode/Rule_2_7_UnusedParameters.js +53 -0
  230. package/dist/rules/Section2_UnusedCode/Rule_2_7_UnusedParameters.js.map +1 -0
  231. package/dist/rules/Section3_Comments/Rule_3_1_CommentSequences.d.ts +13 -0
  232. package/dist/rules/Section3_Comments/Rule_3_1_CommentSequences.d.ts.map +1 -0
  233. package/dist/rules/Section3_Comments/Rule_3_1_CommentSequences.js +32 -0
  234. package/dist/rules/Section3_Comments/Rule_3_1_CommentSequences.js.map +1 -0
  235. package/dist/rules/Section3_Comments/Rule_3_2_LineSplicing.d.ts +10 -0
  236. package/dist/rules/Section3_Comments/Rule_3_2_LineSplicing.d.ts.map +1 -0
  237. package/dist/rules/Section3_Comments/Rule_3_2_LineSplicing.js +26 -0
  238. package/dist/rules/Section3_Comments/Rule_3_2_LineSplicing.js.map +1 -0
  239. package/dist/rules/index.d.ts +20 -0
  240. package/dist/rules/index.d.ts.map +1 -0
  241. package/dist/rules/index.js +38 -0
  242. package/dist/rules/index.js.map +1 -0
  243. package/dist/tests/Section17_Functions/misra_config.json +10 -0
  244. package/dist/tests/utils.d.ts +10 -0
  245. package/dist/tests/utils.d.ts.map +1 -0
  246. package/dist/tests/utils.js +29 -0
  247. package/dist/tests/utils.js.map +1 -0
  248. package/dist/utils/utils.d.ts +102 -0
  249. package/dist/utils/utils.d.ts.map +1 -0
  250. package/dist/utils/utils.js +202 -0
  251. package/dist/utils/utils.js.map +1 -0
  252. package/jest.config.js +6 -6
  253. package/package.json +40 -8
  254. package/src/MISRA.ts +266 -0
  255. package/src/MISRAContext.ts +91 -0
  256. package/src/MISRARule.ts +77 -0
  257. package/src/MISRATool.ts +96 -0
  258. package/src/main.ts +4 -33
  259. package/src/misra-old/MISRAAnalyser.ts +60 -0
  260. package/src/misra-old/MISRAAnalyserResult.ts +16 -0
  261. package/src/misra-old/sections/Section10_EssentialTypeModel.ts +377 -0
  262. package/src/misra-old/sections/Section11_PointerTypeConversions.ts +104 -0
  263. package/src/{misra → misra-old}/sections/Section12_Expressions.ts +7 -7
  264. package/src/{misra → misra-old}/sections/Section13_SideEffects.ts +15 -15
  265. package/src/misra-old/sections/Section14_ControlStmtExprs.ts +27 -0
  266. package/src/{misra → misra-old}/sections/Section15_ControlFlow.ts +10 -10
  267. package/src/misra-old/sections/Section18_PointersAndArrays.ts +108 -0
  268. package/src/{misra → misra-old}/sections/Section19_OverlappingStorage.ts +4 -4
  269. package/src/misra-old/sections/Section20_PreprocessingDirectives.ts +22 -0
  270. package/src/misra-old/sections/Section21_StandardLibraries.ts +99 -0
  271. package/src/{misra → misra-old}/sections/Section5_Identifiers.ts +16 -15
  272. package/src/{misra → misra-old}/sections/Section6_Types.ts +4 -4
  273. package/src/misra-old/sections/Section7_LiteralsConstants.ts +76 -0
  274. package/src/misra-old/sections/Section8_DeclarationsDefinitions.ts +133 -0
  275. package/src/rules/Section16_SwitchStatements/Rule_16_2_TopLevelSwitch.ts +40 -0
  276. package/src/rules/Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.ts +69 -0
  277. package/src/rules/Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.ts +46 -0
  278. package/src/rules/Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.ts +113 -0
  279. package/src/rules/Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.ts +57 -0
  280. package/src/rules/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.ts +56 -0
  281. package/src/rules/Section17_Functions/Rule_17_4_NonVoidReturn.ts +78 -0
  282. package/src/rules/Section17_Functions/Rule_17_6_StaticArraySizeParam.ts +68 -0
  283. package/src/rules/Section17_Functions/Rule_17_7_UnusedReturnValue.ts +47 -0
  284. package/src/rules/Section20-PreprocessingDirectives/Rule_20_2_InvalidHeaderFileName.ts +120 -0
  285. package/src/rules/Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.ts +75 -0
  286. package/src/rules/Section2_UnusedCode/Rule_2_4_UnusedTagDecl.ts +60 -0
  287. package/src/rules/Section2_UnusedCode/Rule_2_6_UnusedLabels.ts +46 -0
  288. package/src/rules/Section2_UnusedCode/Rule_2_7_UnusedParameters.ts +65 -0
  289. package/src/rules/Section3_Comments/Rule_3_1_CommentSequences.ts +41 -0
  290. package/src/rules/Section3_Comments/Rule_3_2_LineSplicing.ts +36 -0
  291. package/src/rules/index.ts +40 -0
  292. package/src/tests/Section16_SwitchStatements/Rule_16_2_TopLevelSwitch.test.ts +55 -0
  293. package/src/tests/Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.test.ts +70 -0
  294. package/src/tests/Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.test.ts +128 -0
  295. package/src/tests/Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.test.ts +132 -0
  296. package/src/tests/Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.test.ts +146 -0
  297. package/src/tests/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.test.ts +102 -0
  298. package/src/tests/Section17_Functions/Rule_17_4_NonVoidReturn.test.ts +85 -0
  299. package/src/tests/Section17_Functions/Rule_17_4_NonVoidReturn_MissingConfig.test.ts +77 -0
  300. package/src/tests/Section17_Functions/Rule_17_6_StaticArraySizeParam.test.ts +36 -0
  301. package/src/tests/Section17_Functions/Rule_17_7_UnusedReturnValue.test.ts +44 -0
  302. package/src/tests/Section17_Functions/misra_config.json +10 -0
  303. package/src/tests/Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.test.ts +175 -0
  304. package/src/tests/Section2_UnusedCode/Rule_2_4_UnusedTagDecl.test.ts +219 -0
  305. package/src/tests/Section2_UnusedCode/Rule_2_6_UnusedLabels.test.ts +49 -0
  306. package/src/tests/Section2_UnusedCode/Rule_2_7_UnusedParameters.test.ts +55 -0
  307. package/src/tests/Section3_Comments/Rule_3_1_CommentSequences.test.ts +37 -0
  308. package/src/tests/utils.ts +39 -0
  309. package/src/utils/utils.ts +221 -0
  310. package/tsconfig.json +4 -3
  311. package/typedoc.config.js +1 -1
  312. package/CxxSources/lib.cpp +0 -3
  313. package/CxxSources/lib.h +0 -8
  314. package/CxxSources/main.cpp +0 -40
  315. package/TODO.md +0 -1
  316. package/consumer_order.txt +0 -2
  317. package/enum_integer_type.txt +0 -0
  318. package/is_temporary.txt +0 -0
  319. package/omp.txt +0 -0
  320. package/src/misra/passes/S16_SwitchStatementPass.ts +0 -168
  321. package/src/misra/passes/S3_CommentPass.ts +0 -40
  322. package/src/misra/sections/Section21_StandardLibraries.ts +0 -65
  323. package/src/misra/tests/S10_EssentialTypes.test.ts +0 -253
  324. package/src/misra/tests/S12_Expressions.test.ts +0 -43
  325. package/src/misra/tests/S13_SideEffects.test.ts +0 -77
  326. package/src/misra/tests/S15_ControlFlow.test.ts +0 -144
  327. package/src/misra/tests/S16_SwitchStatements.test.ts +0 -164
  328. package/src/misra/tests/S17_Functions.test.ts +0 -46
  329. package/src/misra/tests/S18_PointersArrays.test.ts +0 -167
  330. package/src/misra/tests/S19_OverlappingStorage.test.ts +0 -38
  331. package/src/misra/tests/S3_Comments.test.ts +0 -36
  332. package/src/misra/tests/S6_Types.test.ts +0 -36
  333. package/src/misra/tests/S7_LiteralsConstants.test.ts +0 -48
  334. package/src/misra/tests/utils.ts +0 -47
  335. package/types_with_templates.txt +0 -0
  336. /package/src/{misra → misra-old}/MISRAPass.ts +0 -0
  337. /package/src/{misra → misra-old}/MISRAPassResult.ts +0 -0
  338. /package/src/{misra → misra-old}/MISRAReporter.ts +0 -0
  339. /package/src/{misra → misra-old}/passes/S10_EssentialTypePass.ts +0 -0
  340. /package/src/{misra → misra-old}/passes/S12_ExpressionPass.ts +0 -0
  341. /package/src/{misra → misra-old}/passes/S13_SideEffectPass.ts +0 -0
  342. /package/src/{misra → misra-old}/passes/S15_ControlFlowPass.ts +0 -0
  343. /package/src/{misra → misra-old}/passes/S17_FunctionPass.ts +0 -0
  344. /package/src/{misra → misra-old}/passes/S18_PointersArraysPass.ts +0 -0
  345. /package/src/{misra → misra-old}/passes/S19_OverlappingStoragePass.ts +0 -0
  346. /package/src/{misra → misra-old}/passes/S21_StandardLibPass.ts +0 -0
  347. /package/src/{misra → misra-old}/passes/S5_IdentifierPass.ts +0 -0
  348. /package/src/{misra → misra-old}/passes/S6_TypePass.ts +0 -0
  349. /package/src/{misra → misra-old}/passes/S7_LiteralsConstantsPass.ts +0 -0
  350. /package/src/{misra → misra-old}/passes/S8_DeclDefPass.ts +0 -0
@@ -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 Section6_Types extends MISRAAnalyser {
4
+ ruleMapper: Map<number, (jp: Program | FileJp) => void>;
5
+ constructor(rules: number[]);
6
+ private r6_2_noSingleBitSignedFields;
7
+ }
8
+ //# sourceMappingURL=Section6_Types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Section6_Types.d.ts","sourceRoot":"","sources":["../../../src/misra/sections/Section6_Types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,EAA6C,MAAM,qCAAqC,CAAC;AACjH,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAEhD,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,aAAa;IACrD,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC;gBAE5C,KAAK,EAAE,MAAM,EAAE;IAQ3B,OAAO,CAAC,4BAA4B;CAUvC"}
@@ -0,0 +1,23 @@
1
+ import Query from "@specs-feup/lara/api/weaver/Query.js";
2
+ import { Field } from "@specs-feup/clava/api/Joinpoints.js";
3
+ import MISRAAnalyser from "../MISRAAnalyser.js";
4
+ export default class Section6_Types extends MISRAAnalyser {
5
+ ruleMapper;
6
+ constructor(rules) {
7
+ super(rules);
8
+ this.ruleMapper = new Map([
9
+ [2, this.r6_2_noSingleBitSignedFields.bind(this)],
10
+ ]);
11
+ }
12
+ r6_2_noSingleBitSignedFields($startNode) {
13
+ Query.searchFrom($startNode, Field).get().forEach(field => {
14
+ if (field.children.length > 0 && field.name) {
15
+ const width = new Number(field.children[0].children[0].value);
16
+ if (width == 1 && field.type.isSigned) {
17
+ this.logMISRAError(field, `Single-bit named bit field ${field.name} must not have a signed type.`);
18
+ }
19
+ }
20
+ }, this);
21
+ }
22
+ }
23
+ //# sourceMappingURL=Section6_Types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Section6_Types.js","sourceRoot":"","sources":["../../../src/misra/sections/Section6_Types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,sCAAsC,CAAC;AACzD,OAAO,EAA8B,KAAK,EAA2B,MAAM,qCAAqC,CAAC;AACjH,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAEhD,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,aAAa;IACrD,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,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAEpD,CAAC,CAAC;IACP,CAAC;IAEO,4BAA4B,CAAC,UAAqB;QACtD,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACtD,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBAC1C,MAAM,KAAK,GAAG,IAAI,MAAM,CAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAgB,CAAC,KAAK,CAAC,CAAC;gBAC9E,IAAI,KAAK,IAAI,CAAC,IAAK,KAAK,CAAC,IAAoB,CAAC,QAAQ,EAAE,CAAC;oBACrD,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,8BAA8B,KAAK,CAAC,IAAI,+BAA+B,CAAC,CAAC;gBACvG,CAAC;YACL,CAAC;QACL,CAAC,EAAE,IAAI,CAAC,CAAC;IACb,CAAC;CACJ"}
@@ -0,0 +1,11 @@
1
+ import { Program, FileJp } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import MISRAAnalyser from "../MISRAAnalyser.js";
3
+ export default class Section7_LiteralsConstants extends MISRAAnalyser {
4
+ ruleMapper: Map<number, (jp: Program | FileJp) => void>;
5
+ constructor(rules: number[]);
6
+ private r7_1_noOctalConstants;
7
+ private r7_3_noLowercaseLSuffix;
8
+ private static checkPointerConst;
9
+ private r7_4_constStringLiterals;
10
+ }
11
+ //# sourceMappingURL=Section7_LiteralsConstants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Section7_LiteralsConstants.d.ts","sourceRoot":"","sources":["../../../src/misra/sections/Section7_LiteralsConstants.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,EAA4H,MAAM,qCAAqC,CAAC;AAChM,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;IAS3B,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,uBAAuB;IAQ/B,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAUhC,OAAO,CAAC,wBAAwB;CAiCnC"}
@@ -1,11 +1,9 @@
1
1
  import Query from "@specs-feup/lara/api/weaver/Query.js";
2
- import { Program, FileJp, IntLiteral, Type, PointerType, QualType, Vardecl, BinaryOp, ReturnStmt, FunctionJp, Call, Varref, ArrayAccess, Joinpoint } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import { IntLiteral, PointerType, QualType, Vardecl, BinaryOp, ReturnStmt, Call } from "@specs-feup/clava/api/Joinpoints.js";
3
3
  import MISRAAnalyser from "../MISRAAnalyser.js";
4
-
5
4
  export default class Section7_LiteralsConstants extends MISRAAnalyser {
6
- ruleMapper: Map<number, (jp: Program | FileJp) => void>;
7
-
8
- constructor(rules: number[]) {
5
+ ruleMapper;
6
+ constructor(rules) {
9
7
  super(rules);
10
8
  this.ruleMapper = new Map([
11
9
  [1, this.r7_1_noOctalConstants.bind(this)],
@@ -13,64 +11,59 @@ export default class Section7_LiteralsConstants extends MISRAAnalyser {
13
11
  [4, this.r7_4_constStringLiterals.bind(this)]
14
12
  ]);
15
13
  }
16
-
17
- private r7_1_noOctalConstants($startNode: Joinpoint) {
14
+ r7_1_noOctalConstants($startNode) {
18
15
  for (const intLit of Query.searchFrom($startNode, IntLiteral)) {
19
16
  if (intLit.code.match(/0[0-9]+/g)) {
20
17
  this.logMISRAError(intLit, `The octal constant ${intLit.code} was used. Its decimal value is ${intLit.value}`);
21
18
  }
22
19
  }
23
20
  }
24
-
25
- private r7_3_noLowercaseLSuffix($startNode: Joinpoint) {
21
+ r7_3_noLowercaseLSuffix($startNode) {
26
22
  for (const intLit of Query.searchFrom($startNode, IntLiteral)) {
27
23
  if (intLit.code.includes('l')) {
28
24
  this.logMISRAError(intLit, `A lowercase 'l' was used as a suffix in ${intLit.code}.`);
29
25
  }
30
26
  }
31
27
  }
32
-
33
- private static checkPointerConst(type: Type) {
28
+ static checkPointerConst(type) {
34
29
  if (type instanceof PointerType) {
35
30
  return type.pointee.constant;
36
31
  }
37
32
  else if (type instanceof QualType && type.unqualifiedType instanceof PointerType) {
38
33
  return type.unqualifiedType.pointee.constant;
39
34
  }
40
- else return undefined;
35
+ else
36
+ return undefined;
41
37
  }
42
-
43
- private r7_4_constStringLiterals($startNode: Joinpoint) {
38
+ r7_4_constStringLiterals($startNode) {
44
39
  for (const varDecl of Query.searchFrom($startNode, Vardecl)) {
45
- if (!varDecl.type.isPointer) continue;
46
-
40
+ if (!varDecl.type.isPointer)
41
+ continue;
47
42
  if (varDecl.children.length > 0 && varDecl.children[0].joinPointType === "literal"
48
43
  && !Section7_LiteralsConstants.checkPointerConst(varDecl.type)) {
49
- this.logMISRAError(varDecl, `String literal assigned to non-const qualified variable ${varDecl.name}`);
44
+ this.logMISRAError(varDecl, `String literal assigned to non-const qualified variable ${varDecl.name}`);
50
45
  }
51
46
  }
52
-
53
- Query.searchFrom($startNode, BinaryOp, {isAssignment: true}).get().forEach(bOp => {
47
+ Query.searchFrom($startNode, BinaryOp, { isAssignment: true }).get().forEach(bOp => {
54
48
  if (bOp.right.joinPointType === "literal" && !Section7_LiteralsConstants.checkPointerConst(bOp.left.type)) {
55
- this.logMISRAError(bOp, `String literal assigned to non-const qualified variable ${(bOp.left as Varref | ArrayAccess).name}`);
49
+ this.logMISRAError(bOp, `String literal assigned to non-const qualified variable ${bOp.left.name}`);
56
50
  }
57
51
  }, this);
58
-
59
52
  for (const ret of Query.searchFrom($startNode, ReturnStmt)) {
60
- const ancestor = ret.getAncestor("function") as FunctionJp;
53
+ const ancestor = ret.getAncestor("function");
61
54
  const retType = ancestor.functionType.returnType;
62
55
  if (ret.returnExpr?.joinPointType === "literal" && !Section7_LiteralsConstants.checkPointerConst(retType)) {
63
56
  this.logMISRAError(ret, `String literal returned in non-const qualified return value for function ${ancestor.name}`);
64
57
  }
65
58
  }
66
-
67
59
  for (const call of Query.searchFrom($startNode, Call)) {
68
60
  const paramTypes = call.function.functionType.paramTypes;
69
61
  for (let i = 1; i < call.children.length; i++) {
70
- if (call.children[i].joinPointType === "literal" && !Section7_LiteralsConstants.checkPointerConst(paramTypes[i-1])) {
62
+ if (call.children[i].joinPointType === "literal" && !Section7_LiteralsConstants.checkPointerConst(paramTypes[i - 1])) {
71
63
  this.logMISRAError(call.children[i], `String literal passed as non-const qualified parameter in call of ${call.function.name}`);
72
64
  }
73
65
  }
74
66
  }
75
67
  }
76
- }
68
+ }
69
+ //# sourceMappingURL=Section7_LiteralsConstants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Section7_LiteralsConstants.js","sourceRoot":"","sources":["../../../src/misra/sections/Section7_LiteralsConstants.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { Program, FileJp } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import MISRAAnalyser from "../MISRAAnalyser.js";
3
+ export default class Section8_DeclarationsDefinitions extends MISRAAnalyser {
4
+ ruleMapper: Map<number, (jp: Program | FileJp) => void>;
5
+ constructor(rules: number[]);
6
+ private r8_2_functionPrototype;
7
+ private r8_3_compatibleDefinitions;
8
+ private static hasExternalLinkage;
9
+ private r8_7_noUnnecessaryExternalLinkage;
10
+ private r8_10_onlyStaticInline;
11
+ private r8_11_externArrayExplicitSize;
12
+ private setEnumMap;
13
+ private r8_12_implicitExplicitEnumMatching;
14
+ }
15
+ //# sourceMappingURL=Section8_DeclarationsDefinitions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Section8_DeclarationsDefinitions.d.ts","sourceRoot":"","sources":["../../../src/misra/sections/Section8_DeclarationsDefinitions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,EAA+F,MAAM,qCAAqC,CAAC;AACnK,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAGhD,MAAM,CAAC,OAAO,OAAO,gCAAiC,SAAQ,aAAa;IACvE,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC;gBAE5C,KAAK,EAAE,MAAM,EAAE;IAY3B,OAAO,CAAC,sBAAsB;IAK9B,OAAO,CAAC,0BAA0B;IAelC,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAIjC,OAAO,CAAC,iCAAiC;IAwCzC,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,6BAA6B;IAQrC,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,kCAAkC;CAuB7C"}
@@ -1,12 +1,10 @@
1
1
  import Query from "@specs-feup/lara/api/weaver/Query.js";
2
- import { Program, FileJp, Param, FunctionJp, StorageClass, Vardecl, EnumDecl, IntLiteral, Joinpoint, DeclStmt, Varref } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import { FileJp, Param, FunctionJp, StorageClass, Vardecl, EnumDecl, IntLiteral, DeclStmt, Varref } 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
-
6
5
  export default class Section8_DeclarationsDefinitions extends MISRAAnalyser {
7
- ruleMapper: Map<number, (jp: Program | FileJp) => void>;
8
-
9
- constructor(rules: number[]) {
6
+ ruleMapper;
7
+ constructor(rules) {
10
8
  super(rules);
11
9
  this.ruleMapper = new Map([
12
10
  [2, this.r8_2_functionPrototype.bind(this)],
@@ -17,14 +15,12 @@ export default class Section8_DeclarationsDefinitions extends MISRAAnalyser {
17
15
  [12, this.r8_12_implicitExplicitEnumMatching.bind(this)]
18
16
  ]);
19
17
  }
20
-
21
- private r8_2_functionPrototype($startNode: Joinpoint) { //needs to apply to function pointers, void info lost
18
+ r8_2_functionPrototype($startNode) {
22
19
  Query.searchFrom($startNode, Param).get().filter(param => !param.name)
23
20
  .forEach(param => this.logMISRAError(param, `Parameter of type ${param.type.code} lacks a name.`), this);
24
21
  }
25
-
26
- private r8_3_compatibleDefinitions($startNode: Joinpoint) { //what if no impl?
27
- Query.searchFrom($startNode, FunctionJp, {isImplementation: true}).get().forEach(fun => {
22
+ r8_3_compatibleDefinitions($startNode) {
23
+ Query.searchFrom($startNode, FunctionJp, { isImplementation: true }).get().forEach(fun => {
28
24
  fun.declarationJps.forEach(decl => {
29
25
  for (let i = 0; i < fun.params.length; i++) {
30
26
  if (fun.paramNames[i] !== decl.paramNames[i]) {
@@ -37,14 +33,11 @@ export default class Section8_DeclarationsDefinitions extends MISRAAnalyser {
37
33
  }, this);
38
34
  }, this);
39
35
  }
40
-
41
- private static hasExternalLinkage(jp: FunctionJp | Vardecl) {
36
+ static hasExternalLinkage(jp) {
42
37
  return jp.storageClass !== StorageClass.STATIC && jp.storageClass !== StorageClass.EXTERN;
43
38
  }
44
-
45
- private r8_7_noUnnecessaryExternalLinkage($startNode: Joinpoint) { //finish
39
+ r8_7_noUnnecessaryExternalLinkage($startNode) {
46
40
  const globals = new Map();
47
-
48
41
  Query.searchFrom($startNode, FileJp).get().forEach(file => {
49
42
  file.children.forEach(jp => {
50
43
  if (jp instanceof FunctionJp && jp.name !== "main" && Section8_DeclarationsDefinitions.hasExternalLinkage(jp)) {
@@ -58,16 +51,14 @@ export default class Section8_DeclarationsDefinitions extends MISRAAnalyser {
58
51
  this.logMISRAError(jp, `Function ${jp.name} has external linkage but it is only referenced in its file.`);
59
52
  }
60
53
  }
61
-
62
54
  if (jp instanceof DeclStmt) {
63
55
  jp.decls.filter(decl => decl instanceof Vardecl && Section8_DeclarationsDefinitions.hasExternalLinkage(decl)).forEach(decl => {
64
56
  //globals.push({decl: decl as Vardecl, file: decl.filename});
65
- globals.set(decl.astId, {decl: decl as Vardecl, file: decl.filename});
57
+ globals.set(decl.astId, { decl: decl, file: decl.filename });
66
58
  }, this);
67
59
  }
68
60
  });
69
61
  }, this);
70
-
71
62
  Query.searchFrom($startNode, Varref).get().forEach(ref => {
72
63
  if (globals.has(ref.astId)) {
73
64
  const declFile = globals.get(ref.astId).file;
@@ -76,41 +67,34 @@ export default class Section8_DeclarationsDefinitions extends MISRAAnalyser {
76
67
  }
77
68
  }
78
69
  }, this);
79
-
80
70
  globals.forEach((v, k, m) => {
81
71
  this.logMISRAError(v.decl, `Variable ${v.decl.name} is declared with external linkage but is not referenced outside its file.`);
82
72
  }, this);
83
73
  }
84
-
85
- private r8_10_onlyStaticInline($startNode: Joinpoint) {
86
- Query.searchFrom($startNode, FunctionJp, {isInline: true}).get().forEach(fun => {
74
+ r8_10_onlyStaticInline($startNode) {
75
+ Query.searchFrom($startNode, FunctionJp, { isInline: true }).get().forEach(fun => {
87
76
  if (fun.storageClass !== StorageClass.STATIC) {
88
77
  this.logMISRAError(fun, "Inline functions must always be declared static.");
89
78
  }
90
79
  });
91
80
  }
92
-
93
- private r8_11_externArrayExplicitSize($startNode: Joinpoint) {
94
- for (const varDecl of Query.searchFrom($startNode, Vardecl, {storageClass: StorageClass.EXTERN})) {
81
+ r8_11_externArrayExplicitSize($startNode) {
82
+ for (const varDecl of Query.searchFrom($startNode, Vardecl, { storageClass: StorageClass.EXTERN })) {
95
83
  if (varDecl.type.isArray && varDecl.type.arraySize === -1) {
96
- this.logMISRAError(varDecl, `Size of external array ${varDecl.name} is not explicit.`)
84
+ this.logMISRAError(varDecl, `Size of external array ${varDecl.name} is not explicit.`);
97
85
  }
98
86
  }
99
87
  }
100
-
101
- private setEnumMap(map: Map<number, boolean>, newValue: number, isExplicit: boolean, jp: EnumDecl) {
88
+ setEnumMap(map, newValue, isExplicit, jp) {
102
89
  if (map.has(newValue) && !(isExplicit && map.get(newValue))) {
103
90
  this.logMISRAError(jp, `An implicitly numbered identifier in enum ${jp.name} shares a value with another identifier.`, new Fix(jp, jp => {
104
-
105
91
  }));
106
92
  }
107
93
  map.set(newValue, isExplicit);
108
94
  }
109
-
110
- private r8_12_implicitExplicitEnumMatching($startNode: Joinpoint) {
95
+ r8_12_implicitExplicitEnumMatching($startNode) {
111
96
  for (const enumDecl of Query.searchFrom($startNode, EnumDecl)) {
112
97
  const map = new Map();
113
-
114
98
  let index = 0;
115
99
  for (const enumerator of enumDecl.enumerators) {
116
100
  if (enumerator.children.length > 0) {
@@ -130,4 +114,5 @@ export default class Section8_DeclarationsDefinitions extends MISRAAnalyser {
130
114
  }
131
115
  }
132
116
  }
133
- }
117
+ }
118
+ //# sourceMappingURL=Section8_DeclarationsDefinitions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Section8_DeclarationsDefinitions.js","sourceRoot":"","sources":["../../../src/misra/sections/Section8_DeclarationsDefinitions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import MISRAReporter from "../MISRAReporter.js";
2
+ import MISRAPass from "../MISRAPass.js";
3
+ import { Joinpoint } from "@specs-feup/clava/api/Joinpoints.js";
4
+ export declare function expectNumberOfErrors($reporter: MISRAReporter, $pass: MISRAPass, $errors: number, $jp: Joinpoint): void;
5
+ export interface TestFile {
6
+ name: string;
7
+ code: string;
8
+ }
9
+ export declare function registerSourceCode(files: TestFile[]): void;
10
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/misra/tests/utils.ts"],"names":[],"mappings":"AAEA,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAChD,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAchE,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,QAO/G;AAED,MAAM,WAAW,QAAQ;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAA;CACf;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CAcxD"}
@@ -0,0 +1,33 @@
1
+ import Clava from "@specs-feup/clava/api/clava/Clava.js";
2
+ import ClavaJoinPoints from "@specs-feup/clava/api/clava/ClavaJoinPoints.js";
3
+ function countErrors($passResult) {
4
+ let count = 0;
5
+ $passResult.results.forEach(res => {
6
+ const misraRes = res;
7
+ count += misraRes.reports.length;
8
+ });
9
+ return count;
10
+ }
11
+ export function expectNumberOfErrors($reporter, $pass, $errors, $jp) {
12
+ const result = $reporter.applyPass($pass, $jp);
13
+ if (!result) {
14
+ expect($errors).toBe(0);
15
+ return;
16
+ }
17
+ expect(countErrors(result)).toBe($errors);
18
+ }
19
+ export function registerSourceCode(files) {
20
+ beforeAll(() => {
21
+ Clava.getProgram().push();
22
+ const program = Clava.getProgram();
23
+ files.forEach(file => {
24
+ const sourceFile = ClavaJoinPoints.fileWithSource(file.name, file.code);
25
+ program.addFile(sourceFile);
26
+ });
27
+ program.rebuild();
28
+ });
29
+ afterAll(() => {
30
+ Clava.getProgram().pop();
31
+ });
32
+ }
33
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/misra/tests/utils.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,MAAM,sCAAsC,CAAC;AACzD,OAAO,eAAe,MAAM,gDAAgD,CAAC;AAE7E,SAAS,WAAW,CAAC,WAAgC;IACjD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QAC9B,MAAM,QAAQ,GAAG,GAAsB,CAAC;QACxC,KAAK,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,SAAwB,EAAE,KAAgB,EAAE,OAAe,EAAE,GAAc;IAC5G,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,OAAO;IACX,CAAC;IACD,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC9C,CAAC;AAOD,MAAM,UAAU,kBAAkB,CAAC,KAAiB;IAChD,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;QACnC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACnB,MAAM,UAAU,GAAG,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACxE,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,OAAO,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,EAAE;QACZ,KAAK,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { Joinpoint } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import MISRARule from "../../MISRARule.js";
3
+ import MISRAContext from "../../MISRAContext.js";
4
+ import { MISRATransformationReport } from "../../MISRA.js";
5
+ /**
6
+ * MISRA Rule 16.2: A switch label shall only be used when the most closely-enclos ing
7
+ compound statement is the body of a switch statement
8
+ */
9
+ export default class Rule_16_2_TopLevelSwitch extends MISRARule {
10
+ #private;
11
+ constructor(context: MISRAContext);
12
+ match($jp: Joinpoint, logErrors?: boolean): boolean;
13
+ transform($jp: Joinpoint): MISRATransformationReport;
14
+ }
15
+ //# sourceMappingURL=Rule_16_2_TopLevelSwitch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rule_16_2_TopLevelSwitch.d.ts","sourceRoot":"","sources":["../../../src/rules/Section16_SwitchStatements/Rule_16_2_TopLevelSwitch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,SAAS,EAAU,MAAM,qCAAqC,CAAC;AAC9E,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,YAAY,MAAM,uBAAuB,CAAC;AAEjD,OAAO,EAAE,yBAAyB,EAA2B,MAAM,gBAAgB,CAAC;AAEpF;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,wBAAyB,SAAQ,SAAS;;gBAG/C,OAAO,EAAE,YAAY;IAIjC,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO;IAc1D,SAAS,CAAC,GAAG,EAAE,SAAS,GAAG,yBAAyB;CAQvD"}
@@ -0,0 +1,33 @@
1
+ import { Case, Switch } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import MISRARule from "../../MISRARule.js";
3
+ import Query from "@specs-feup/lara/api/weaver/Query.js";
4
+ import { MISRATransformationReport, MISRATransformationType } from "../../MISRA.js";
5
+ /**
6
+ * MISRA Rule 16.2: A switch label shall only be used when the most closely-enclos ing
7
+ compound statement is the body of a switch statement
8
+ */
9
+ export default class Rule_16_2_TopLevelSwitch extends MISRARule {
10
+ #misplacedCases = [];
11
+ constructor(context) {
12
+ super("16.2", context);
13
+ }
14
+ match($jp, logErrors = false) {
15
+ if (!($jp instanceof Switch))
16
+ return false;
17
+ this.#misplacedCases = Query.searchFrom($jp, Case).get()
18
+ .filter(caseLabel => !(caseLabel.currentRegion instanceof Switch));
19
+ if (logErrors) {
20
+ this.#misplacedCases.forEach(caseLabel => this.logMISRAError(caseLabel, "A switch label can only be used if its enclosing compound statement is the switch statement itself."));
21
+ }
22
+ return this.#misplacedCases.length > 0;
23
+ }
24
+ transform($jp) {
25
+ if (!this.match($jp))
26
+ return new MISRATransformationReport(MISRATransformationType.NoChange);
27
+ for (const caseLabel of this.#misplacedCases) {
28
+ caseLabel.detach();
29
+ }
30
+ return new MISRATransformationReport(MISRATransformationType.DescendantChange);
31
+ }
32
+ }
33
+ //# sourceMappingURL=Rule_16_2_TopLevelSwitch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rule_16_2_TopLevelSwitch.js","sourceRoot":"","sources":["../../../src/rules/Section16_SwitchStatements/Rule_16_2_TopLevelSwitch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAa,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAE3C,OAAO,KAAK,MAAM,sCAAsC,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAEpF;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,wBAAyB,SAAQ,SAAS;IAC3D,eAAe,GAAW,EAAE,CAAC;IAE7B,YAAY,OAAqB;QAC7B,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,GAAc,EAAE,YAAqB,KAAK;QAC5C,IAAI,CAAC,CAAC,GAAG,YAAY,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;QAE3C,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE;aACnD,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,YAAY,MAAM,CAAC,CAAC,CAAC;QAEvE,IAAI,SAAS,EAAE,CAAC;YACZ,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CACrC,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,qGAAqG,CAAC,CACvI,CAAC;QACN,CAAC;QACD,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3C,CAAC;IAED,SAAS,CAAC,GAAc;QACpB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAE7F,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAC3C,SAAS,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC;QACD,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,CAAC;IACnF,CAAC;CACJ"}
@@ -0,0 +1,16 @@
1
+ import { Joinpoint } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import MISRARule from "../../MISRARule.js";
3
+ import MISRAContext from "../../MISRAContext.js";
4
+ import { MISRATransformationReport } from "../../MISRA.js";
5
+ /**
6
+ * MISRA Rule 16.3: An unconditional break statement shall terminate every switch-clause
7
+ */
8
+ export default class Rule_16_3_UnconditionalBreak extends MISRARule {
9
+ #private;
10
+ constructor(context: MISRAContext);
11
+ match($jp: Joinpoint, logErrors?: boolean): boolean;
12
+ private getNextStatementsToExecute;
13
+ private insertNextStatementsToExecute;
14
+ transform($jp: Joinpoint): MISRATransformationReport;
15
+ }
16
+ //# sourceMappingURL=Rule_16_3_UnconditionalBreak.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rule_16_3_UnconditionalBreak.d.ts","sourceRoot":"","sources":["../../../src/rules/Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,SAAS,EAA2B,MAAM,qCAAqC,CAAC;AAChG,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,YAAY,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAA2B,MAAM,gBAAgB,CAAC;AAIpF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,4BAA6B,SAAQ,SAAS;;gBAGnD,OAAO,EAAE,YAAY;IAIjC,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO;IAc1D,OAAO,CAAC,0BAA0B;IAalC,OAAO,CAAC,6BAA6B;IAWrC,SAAS,CAAC,GAAG,EAAE,SAAS,GAAG,yBAAyB;CAavD"}
@@ -0,0 +1,60 @@
1
+ import { Break, Switch, Case } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import MISRARule from "../../MISRARule.js";
3
+ import { MISRATransformationReport, MISRATransformationType } from "../../MISRA.js";
4
+ import { getLastStmtOfCase } from "../../utils/utils.js";
5
+ import ClavaJoinPoints from "@specs-feup/clava/api/clava/ClavaJoinPoints.js";
6
+ /**
7
+ * MISRA Rule 16.3: An unconditional break statement shall terminate every switch-clause
8
+ */
9
+ export default class Rule_16_3_UnconditionalBreak extends MISRARule {
10
+ #statementsNeedingBreakAfter = [];
11
+ constructor(context) {
12
+ super("16.3", context);
13
+ }
14
+ match($jp, logErrors = false) {
15
+ if (!($jp instanceof Switch))
16
+ return false;
17
+ this.#statementsNeedingBreakAfter = $jp.cases.map(caseLabel => getLastStmtOfCase(caseLabel))
18
+ .filter(lastStmt => lastStmt && !(lastStmt instanceof Break));
19
+ if (logErrors) {
20
+ this.#statementsNeedingBreakAfter.forEach(stmt => {
21
+ this.logMISRAError(stmt, `Missing unconditional break after statement '${stmt.code}'`);
22
+ });
23
+ }
24
+ return this.#statementsNeedingBreakAfter.length > 0;
25
+ }
26
+ getNextStatementsToExecute(jp) {
27
+ let stmts = [];
28
+ for (const sibling of jp.siblingsRight) {
29
+ if (sibling instanceof Break)
30
+ break;
31
+ if (sibling instanceof Case)
32
+ continue;
33
+ stmts.push(sibling.deepCopy());
34
+ }
35
+ return stmts;
36
+ }
37
+ insertNextStatementsToExecute(jp) {
38
+ const nextStmts = this.getNextStatementsToExecute(jp);
39
+ let lastStmt = jp;
40
+ for (const stmt of nextStmts) {
41
+ lastStmt.insertAfter(stmt);
42
+ lastStmt = stmt;
43
+ }
44
+ lastStmt.insertAfter(ClavaJoinPoints.breakStmt());
45
+ }
46
+ transform($jp) {
47
+ if (!this.match($jp))
48
+ return new MISRATransformationReport(MISRATransformationType.NoChange);
49
+ for (const stmt of this.#statementsNeedingBreakAfter) {
50
+ if (stmt.rightJp === undefined) { // last statement of the switch
51
+ stmt.insertAfter(ClavaJoinPoints.breakStmt());
52
+ }
53
+ else {
54
+ this.insertNextStatementsToExecute(stmt);
55
+ }
56
+ }
57
+ return new MISRATransformationReport(MISRATransformationType.DescendantChange);
58
+ }
59
+ }
60
+ //# sourceMappingURL=Rule_16_3_UnconditionalBreak.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rule_16_3_UnconditionalBreak.js","sourceRoot":"","sources":["../../../src/rules/Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAwB,MAAM,EAAE,IAAI,EAAE,MAAM,qCAAqC,CAAC;AAChG,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,eAAe,MAAM,gDAAgD,CAAC;AAE7E;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,4BAA6B,SAAQ,SAAS;IAC/D,4BAA4B,GAAgB,EAAE,CAAC;IAE/C,YAAY,OAAqB;QAC7B,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,GAAc,EAAE,YAAqB,KAAK;QAC5C,IAAI,CAAC,CAAC,GAAG,YAAY,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;QAE3C,IAAI,CAAC,4BAA4B,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;aACvF,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,YAAY,KAAK,CAAC,CAAgB,CAAC;QAEjF,IAAI,SAAS,EAAE,CAAC;YACZ,IAAI,CAAC,4BAA4B,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBAC7C,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,gDAAgD,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YAC3F,CAAC,CAAC,CAAC;QACP,CAAC;QACD,OAAO,IAAI,CAAC,4BAA4B,CAAC,MAAM,GAAG,CAAC,CAAC;IACxD,CAAC;IAEO,0BAA0B,CAAC,EAAa;QAC5C,IAAI,KAAK,GAAG,EAAE,CAAC;QAEf,KAAK,MAAM,OAAO,IAAI,EAAE,CAAC,aAAa,EAAE,CAAC;YACrC,IAAI,OAAO,YAAY,KAAK;gBACxB,MAAM;YACV,IAAI,OAAO,YAAY,IAAI;gBACvB,SAAS;YACb,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAEO,6BAA6B,CAAC,EAAa;QAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;QACtD,IAAI,QAAQ,GAAG,EAAE,CAAC;QAElB,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC3B,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAC3B,QAAQ,GAAG,IAAI,CAAC;QACpB,CAAC;QACD,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,SAAS,CAAC,GAAc;QACpB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YAChB,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAE3E,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,4BAA4B,EAAE,CAAC;YACnD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC,CAAC,+BAA+B;gBAC7D,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAC;YAC7C,CAAC;QACL,CAAC;QACD,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,CAAC;IACnF,CAAC;CACJ"}
@@ -0,0 +1,19 @@
1
+ import { Joinpoint } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import MISRARule from "../../MISRARule.js";
3
+ import MISRAContext from "../../MISRAContext.js";
4
+ import { MISRATransformationReport } from "../../MISRA.js";
5
+ /**
6
+ * MISRA Rule 16.4: Every switch statement shall have a default label
7
+ */
8
+ export default class Rule_16_4_SwitchHasDefault extends MISRARule {
9
+ constructor(context: MISRAContext);
10
+ /**
11
+ * Checks if the given joinpoint is a switch statement with a default case
12
+ * @param $jp - Joinpoint to analyze
13
+ * @param logErrors - [logErrors=false] - Whether to log errors if a violation is detected
14
+ * @returns Returns true if the joinpoint violates the rule, false otherwise
15
+ */
16
+ match($jp: Joinpoint, logErrors?: boolean): boolean;
17
+ transform($jp: Joinpoint): MISRATransformationReport;
18
+ }
19
+ //# sourceMappingURL=Rule_16_4_SwitchHasDefault.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rule_16_4_SwitchHasDefault.d.ts","sourceRoot":"","sources":["../../../src/rules/Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,qCAAqC,CAAC;AACxE,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,YAAY,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAA2B,MAAM,gBAAgB,CAAC;AAIpF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,0BAA2B,SAAQ,SAAS;gBACjD,OAAO,EAAE,YAAY;IAIjC;;;;;OAKG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO;IAU1D,SAAS,CAAC,GAAG,EAAE,SAAS,GAAG,yBAAyB;CAcvD"}
@@ -0,0 +1,42 @@
1
+ import { Switch } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import MISRARule from "../../MISRARule.js";
3
+ import { MISRATransformationReport, MISRATransformationType } from "../../MISRA.js";
4
+ import ClavaJoinPoints from "@specs-feup/clava/api/clava/ClavaJoinPoints.js";
5
+ import { getNumOfSwitchClauses, switchHasBooleanCondition, switchHasConditionalBreak } from "../../utils/utils.js";
6
+ /**
7
+ * MISRA Rule 16.4: Every switch statement shall have a default label
8
+ */
9
+ export default class Rule_16_4_SwitchHasDefault extends MISRARule {
10
+ constructor(context) {
11
+ super("16.4", context);
12
+ }
13
+ /**
14
+ * Checks if the given joinpoint is a switch statement with a default case
15
+ * @param $jp - Joinpoint to analyze
16
+ * @param logErrors - [logErrors=false] - Whether to log errors if a violation is detected
17
+ * @returns Returns true if the joinpoint violates the rule, false otherwise
18
+ */
19
+ match($jp, logErrors = false) {
20
+ if (!($jp instanceof Switch))
21
+ return false;
22
+ const noDefaultCase = !$jp.hasDefaultCase;
23
+ if (noDefaultCase && logErrors) {
24
+ this.logMISRAError($jp, "Switch statement is missing a default case.");
25
+ }
26
+ return noDefaultCase;
27
+ }
28
+ transform($jp) {
29
+ if (!this.match($jp))
30
+ return new MISRATransformationReport(MISRATransformationType.NoChange);
31
+ if ((getNumOfSwitchClauses($jp) < 2 || switchHasBooleanCondition($jp)) &&
32
+ !switchHasConditionalBreak($jp)) { // Will be handled by rules 16.6 or 16.7
33
+ return new MISRATransformationReport(MISRATransformationType.NoChange);
34
+ }
35
+ $jp.children[1].lastChild
36
+ .insertAfter(ClavaJoinPoints.defaultStmt())
37
+ .insertAfter(ClavaJoinPoints.emptyStmt())
38
+ .insertAfter(ClavaJoinPoints.breakStmt());
39
+ return new MISRATransformationReport(MISRATransformationType.DescendantChange);
40
+ }
41
+ }
42
+ //# sourceMappingURL=Rule_16_4_SwitchHasDefault.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rule_16_4_SwitchHasDefault.js","sourceRoot":"","sources":["../../../src/rules/Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACpF,OAAO,eAAe,MAAM,gDAAgD,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEnH;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,0BAA2B,SAAQ,SAAS;IAC7D,YAAY,OAAqB;QAC7B,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,GAAc,EAAE,YAAqB,KAAK;QAC5C,IAAI,CAAC,CAAC,GAAG,YAAY,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;QAE3C,MAAM,aAAa,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC;QAC1C,IAAI,aAAa,IAAI,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,6CAA6C,CAAC,CAAA;QAC1E,CAAC;QACD,OAAO,aAAa,CAAC;IACzB,CAAC;IAED,SAAS,CAAC,GAAc;QACpB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAE7F,IAAI,CAAC,qBAAqB,CAAC,GAAa,CAAC,GAAG,CAAC,IAAI,yBAAyB,CAAC,GAAa,CAAC,CAAC;YACtF,CAAC,yBAAyB,CAAC,GAAa,CAAC,EAAE,CAAC,CAAC,wCAAwC;YACrF,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAC3E,CAAC;QAED,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;aACpB,WAAW,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;aAC1C,WAAW,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;aACxC,WAAW,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;QAC9C,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,CAAC;IACnF,CAAC;CACJ"}