@specs-feup/clava-misra 1.0.0 → 1.0.2

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 (352) 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 +44 -8
  254. package/src/MISRA.ts +276 -0
  255. package/src/MISRAContext.ts +84 -0
  256. package/src/MISRARule.ts +64 -0
  257. package/src/MISRATool.ts +95 -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 +41 -0
  276. package/src/rules/Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.ts +70 -0
  277. package/src/rules/Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.ts +41 -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 +61 -0
  280. package/src/rules/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.ts +57 -0
  281. package/src/rules/Section17_Functions/Rule_17_3_ImplicitFunction.ts +180 -0
  282. package/src/rules/Section17_Functions/Rule_17_4_NonVoidReturn.ts +91 -0
  283. package/src/rules/Section17_Functions/Rule_17_6_StaticArraySizeParam.ts +68 -0
  284. package/src/rules/Section17_Functions/Rule_17_7_UnusedReturnValue.ts +49 -0
  285. package/src/rules/Section20-PreprocessingDirectives/Rule_20_2_InvalidHeaderFileName.ts +120 -0
  286. package/src/rules/Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.ts +78 -0
  287. package/src/rules/Section2_UnusedCode/Rule_2_4_UnusedTagDecl.ts +61 -0
  288. package/src/rules/Section2_UnusedCode/Rule_2_6_UnusedLabels.ts +47 -0
  289. package/src/rules/Section2_UnusedCode/Rule_2_7_UnusedParameters.ts +67 -0
  290. package/src/rules/Section3_Comments/Rule_3_1_CommentSequences.ts +41 -0
  291. package/src/rules/Section3_Comments/Rule_3_2_LineSplicing.ts +36 -0
  292. package/src/rules/index.ts +44 -0
  293. package/src/tests/Section16_SwitchStatements/Rule_16_2_TopLevelSwitch.test.ts +55 -0
  294. package/src/tests/Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.test.ts +70 -0
  295. package/src/tests/Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.test.ts +128 -0
  296. package/src/tests/Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.test.ts +132 -0
  297. package/src/tests/Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.test.ts +146 -0
  298. package/src/tests/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.test.ts +102 -0
  299. package/src/tests/Section17_Functions/Rule_17_3_ImplicitFunctions.test.ts +79 -0
  300. package/src/tests/Section17_Functions/Rule_17_4_NonVoidReturn.test.ts +98 -0
  301. package/src/tests/Section17_Functions/Rule_17_4_NonVoidReturn_MissingConfig.test.ts +77 -0
  302. package/src/tests/Section17_Functions/Rule_17_6_StaticArraySizeParam.test.ts +36 -0
  303. package/src/tests/Section17_Functions/Rule_17_7_UnusedReturnValue.test.ts +44 -0
  304. package/src/tests/Section17_Functions/misra_config.json +19 -0
  305. package/src/tests/Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.test.ts +175 -0
  306. package/src/tests/Section2_UnusedCode/Rule_2_4_UnusedTagDecl.test.ts +219 -0
  307. package/src/tests/Section2_UnusedCode/Rule_2_6_UnusedLabels.test.ts +49 -0
  308. package/src/tests/Section2_UnusedCode/Rule_2_7_UnusedParameters.test.ts +55 -0
  309. package/src/tests/Section3_Comments/Rule_3_1_CommentSequences.test.ts +37 -0
  310. package/src/tests/utils.ts +51 -0
  311. package/src/utils/utils.ts +280 -0
  312. package/tsconfig.json +4 -3
  313. package/typedoc.config.js +1 -1
  314. package/CxxSources/lib.cpp +0 -3
  315. package/CxxSources/lib.h +0 -8
  316. package/CxxSources/main.cpp +0 -40
  317. package/TODO.md +0 -1
  318. package/consumer_order.txt +0 -2
  319. package/enum_integer_type.txt +0 -0
  320. package/is_temporary.txt +0 -0
  321. package/omp.txt +0 -0
  322. package/src/misra/passes/S16_SwitchStatementPass.ts +0 -168
  323. package/src/misra/passes/S3_CommentPass.ts +0 -40
  324. package/src/misra/sections/Section21_StandardLibraries.ts +0 -65
  325. package/src/misra/tests/S10_EssentialTypes.test.ts +0 -253
  326. package/src/misra/tests/S12_Expressions.test.ts +0 -43
  327. package/src/misra/tests/S13_SideEffects.test.ts +0 -77
  328. package/src/misra/tests/S15_ControlFlow.test.ts +0 -144
  329. package/src/misra/tests/S16_SwitchStatements.test.ts +0 -164
  330. package/src/misra/tests/S17_Functions.test.ts +0 -46
  331. package/src/misra/tests/S18_PointersArrays.test.ts +0 -167
  332. package/src/misra/tests/S19_OverlappingStorage.test.ts +0 -38
  333. package/src/misra/tests/S3_Comments.test.ts +0 -36
  334. package/src/misra/tests/S6_Types.test.ts +0 -36
  335. package/src/misra/tests/S7_LiteralsConstants.test.ts +0 -48
  336. package/src/misra/tests/utils.ts +0 -47
  337. package/types_with_templates.txt +0 -0
  338. /package/src/{misra → misra-old}/MISRAPass.ts +0 -0
  339. /package/src/{misra → misra-old}/MISRAPassResult.ts +0 -0
  340. /package/src/{misra → misra-old}/MISRAReporter.ts +0 -0
  341. /package/src/{misra → misra-old}/passes/S10_EssentialTypePass.ts +0 -0
  342. /package/src/{misra → misra-old}/passes/S12_ExpressionPass.ts +0 -0
  343. /package/src/{misra → misra-old}/passes/S13_SideEffectPass.ts +0 -0
  344. /package/src/{misra → misra-old}/passes/S15_ControlFlowPass.ts +0 -0
  345. /package/src/{misra → misra-old}/passes/S17_FunctionPass.ts +0 -0
  346. /package/src/{misra → misra-old}/passes/S18_PointersArraysPass.ts +0 -0
  347. /package/src/{misra → misra-old}/passes/S19_OverlappingStoragePass.ts +0 -0
  348. /package/src/{misra → misra-old}/passes/S21_StandardLibPass.ts +0 -0
  349. /package/src/{misra → misra-old}/passes/S5_IdentifierPass.ts +0 -0
  350. /package/src/{misra → misra-old}/passes/S6_TypePass.ts +0 -0
  351. /package/src/{misra → misra-old}/passes/S7_LiteralsConstantsPass.ts +0 -0
  352. /package/src/{misra → misra-old}/passes/S8_DeclDefPass.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Section10_EssentialTypeModel.d.ts","sourceRoot":"","sources":["../../../src/misra/sections/Section10_EssentialTypeModel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,EAA8D,IAAI,EAAE,UAAU,EAAuF,MAAM,qCAAqC,CAAC;AACzO,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAIhD,oBAAY,cAAc;IACtB,QAAQ,aAAa;IACrB,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,KAAK,UAAU;IACf,IAAI,SAAS;IACb,MAAM,WAAW;CACpB;AAED,MAAM,CAAC,OAAO,OAAO,4BAA6B,SAAQ,aAAa;IACnE,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC;gBAE5C,KAAK,EAAE,MAAM,EAAE;IAY3B,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,GAAG,cAAc;IA8BpD,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO;IAI9C,MAAM,CAAC,oBAAoB,CAAC,KAAK,EAAE,UAAU,GAAG,cAAc;IAmB9D,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,kCAAkC;IA0D1C,OAAO,CAAC,6BAA6B;IAqCrC,OAAO,CAAC,0BAA0B;IAiClC,OAAO,CAAC,MAAM,CAAC,eAAe;IAU9B,OAAO,CAAC,oBAAoB;IA2B5B,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAIpC,OAAO,CAAC,MAAM,CAAC,eAAe;IAiB9B,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAiBjC,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAIhC,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAcjC,OAAO,CAAC,qCAAqC;IAgC7C,OAAO,CAAC,2BAA2B;CAuBtC"}
@@ -1,23 +1,22 @@
1
1
  import Query from "@specs-feup/lara/api/weaver/Query.js";
2
- import { Program, FileJp, TernaryOp, UnaryOp, BinaryOp, Joinpoint, Cast, BuiltinType, Type, Expression, IntLiteral, EnumType, QualType, ReturnStmt, FunctionJp, Call, Op, ParenExpr, Varref } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import { TernaryOp, UnaryOp, BinaryOp, Cast, BuiltinType, Expression, IntLiteral, EnumType, QualType, ReturnStmt, Call, Op, ParenExpr } 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
- export enum EssentialTypes {
8
- UNSIGNED = "unsigned",
9
- CHAR = "char",
10
- SIGNED = "signed",
11
- ENUM = "enum",
12
- FLOAT = "float",
13
- BOOL = "bool",
14
- UNKOWN = "unkown"
15
- };
16
-
6
+ export var EssentialTypes;
7
+ (function (EssentialTypes) {
8
+ EssentialTypes["UNSIGNED"] = "unsigned";
9
+ EssentialTypes["CHAR"] = "char";
10
+ EssentialTypes["SIGNED"] = "signed";
11
+ EssentialTypes["ENUM"] = "enum";
12
+ EssentialTypes["FLOAT"] = "float";
13
+ EssentialTypes["BOOL"] = "bool";
14
+ EssentialTypes["UNKOWN"] = "unkown";
15
+ })(EssentialTypes || (EssentialTypes = {}));
16
+ ;
17
17
  export default class Section10_EssentialTypeModel extends MISRAAnalyser {
18
- ruleMapper: Map<number, (jp: Program | FileJp) => void>;
19
-
20
- constructor(rules: number[]) {
18
+ ruleMapper;
19
+ constructor(rules) {
21
20
  super(rules);
22
21
  this.ruleMapper = new Map([
23
22
  [1, this.r10_1_appropriateEssentialOperands.bind(this)],
@@ -28,13 +27,11 @@ export default class Section10_EssentialTypeModel extends MISRAAnalyser {
28
27
  [8, this.r10_8_noWiderCompositeCasts.bind(this)]
29
28
  ]);
30
29
  }
31
-
32
- static getEssentialType(bType: Type): EssentialTypes {
30
+ static getEssentialType(bType) {
33
31
  let type = bType.desugarAll;
34
32
  while (type instanceof QualType) {
35
33
  type = type.unqualifiedType.desugarAll;
36
34
  }
37
-
38
35
  if (type instanceof BuiltinType) {
39
36
  if (type.builtinKind === "Bool") {
40
37
  return EssentialTypes.BOOL;
@@ -55,19 +52,16 @@ export default class Section10_EssentialTypeModel extends MISRAAnalyser {
55
52
  else if (type instanceof EnumType) {
56
53
  return type.name === undefined ? EssentialTypes.SIGNED : EssentialTypes.ENUM;
57
54
  }
58
-
59
55
  return EssentialTypes.UNKOWN;
60
56
  }
61
-
62
- static isInteger($et: EssentialTypes): boolean {
57
+ static isInteger($et) {
63
58
  return $et === EssentialTypes.SIGNED || $et === EssentialTypes.UNSIGNED;
64
59
  }
65
-
66
- static getExprEssentialType($expr: Expression): EssentialTypes {
60
+ static getExprEssentialType($expr) {
67
61
  if ($expr instanceof BinaryOp) {
68
62
  if ($expr.kind === "add") {
69
63
  if ((this.getExprEssentialType($expr.left) === EssentialTypes.CHAR && this.isInteger(this.getExprEssentialType($expr.right)))
70
- || (this.getExprEssentialType($expr.right) === EssentialTypes.CHAR && this.isInteger(this.getExprEssentialType($expr.left)))) {
64
+ || (this.getExprEssentialType($expr.right) === EssentialTypes.CHAR && this.isInteger(this.getExprEssentialType($expr.left)))) {
71
65
  return EssentialTypes.CHAR;
72
66
  }
73
67
  }
@@ -81,24 +75,21 @@ export default class Section10_EssentialTypeModel extends MISRAAnalyser {
81
75
  }
82
76
  return this.getEssentialType($expr.type);
83
77
  }
84
-
85
- private restrictOperand($expr: Expression, $restrictedType: EssentialTypes, $baseExpr: Expression, $castTo?: BuiltinType) {
78
+ restrictOperand($expr, $restrictedType, $baseExpr, $castTo) {
86
79
  const et = Section10_EssentialTypeModel.getExprEssentialType($expr);
87
80
  if (et === $restrictedType) {
88
81
  const fix = $castTo ? new Fix($expr, ($jp) => {
89
- $jp.replaceWith(ClavaJoinPoints.cStyleCast($castTo, $jp as Expression));
82
+ $jp.replaceWith(ClavaJoinPoints.cStyleCast($castTo, $jp));
90
83
  }) : undefined;
91
84
  this.logMISRAError($baseExpr, `Operand ${$expr.code} of expression ${$baseExpr.code} must not have essentially ${et} type.`, fix);
92
85
  }
93
86
  }
94
-
95
- private restrictOperandList($expr: Expression, $restrictedTypes: EssentialTypes[], $baseExpr: Expression, $castTo?: BuiltinType) {
87
+ restrictOperandList($expr, $restrictedTypes, $baseExpr, $castTo) {
96
88
  for (const type of $restrictedTypes) {
97
89
  this.restrictOperand($expr, type, $baseExpr, $castTo);
98
90
  }
99
91
  }
100
-
101
- private r10_1_appropriateEssentialOperands($startNode: Joinpoint) { //missing exception and compound operators
92
+ r10_1_appropriateEssentialOperands($startNode) {
102
93
  Query.searchFrom($startNode, Op).get().forEach(op => {
103
94
  if (op instanceof TernaryOp) {
104
95
  this.restrictOperandList(op.cond, [EssentialTypes.CHAR, EssentialTypes.ENUM, EssentialTypes.FLOAT, EssentialTypes.SIGNED, EssentialTypes.UNSIGNED], op);
@@ -107,12 +98,14 @@ export default class Section10_EssentialTypeModel extends MISRAAnalyser {
107
98
  switch (op.kind) {
108
99
  case "shl":
109
100
  case "shr":
110
- if (!(op.right instanceof IntLiteral)) this.restrictOperand(op.right, EssentialTypes.SIGNED, op);
101
+ if (!(op.right instanceof IntLiteral))
102
+ this.restrictOperand(op.right, EssentialTypes.SIGNED, op);
111
103
  case "and":
112
104
  case "or":
113
105
  case "x_or":
114
106
  this.restrictOperand(op.left, EssentialTypes.SIGNED, op);
115
- if (op.kind !== "shl" && op.kind !== "shr") this.restrictOperand(op.right, EssentialTypes.SIGNED, op);
107
+ if (op.kind !== "shl" && op.kind !== "shr")
108
+ this.restrictOperand(op.right, EssentialTypes.SIGNED, op);
116
109
  case "rem":
117
110
  this.restrictOperand(op.left, EssentialTypes.FLOAT, op);
118
111
  this.restrictOperand(op.right, EssentialTypes.FLOAT, op);
@@ -155,15 +148,13 @@ export default class Section10_EssentialTypeModel extends MISRAAnalyser {
155
148
  }
156
149
  }, this);
157
150
  }
158
-
159
- private r10_2_appropriateCharOperands($startNode: Joinpoint) {
160
- Query.searchFrom($startNode, BinaryOp, {kind: /(add|sub)/}).get().forEach(bOp => {
151
+ r10_2_appropriateCharOperands($startNode) {
152
+ Query.searchFrom($startNode, BinaryOp, { kind: /(add|sub)/ }).get().forEach(bOp => {
161
153
  if (bOp.kind === "add") {
162
154
  if (Section10_EssentialTypeModel.getExprEssentialType(bOp.left) === EssentialTypes.CHAR && Section10_EssentialTypeModel.getExprEssentialType(bOp.right) === EssentialTypes.CHAR) {
163
155
  this.logMISRAError(bOp, `Both operands of addition ${bOp.code} have essentially character type.`);
164
156
  return;
165
157
  }
166
-
167
158
  let otherType;
168
159
  if (Section10_EssentialTypeModel.getExprEssentialType(bOp.left) === EssentialTypes.CHAR) {
169
160
  otherType = Section10_EssentialTypeModel.getExprEssentialType(bOp.right);
@@ -171,7 +162,6 @@ export default class Section10_EssentialTypeModel extends MISRAAnalyser {
171
162
  else if (Section10_EssentialTypeModel.getExprEssentialType(bOp.right) === EssentialTypes.CHAR) {
172
163
  otherType = Section10_EssentialTypeModel.getExprEssentialType(bOp.left);
173
164
  }
174
-
175
165
  if (otherType && !Section10_EssentialTypeModel.isInteger(otherType)) {
176
166
  this.logMISRAError(bOp, `One operand of addition ${bOp.code} has essentially character type, so the other one must have either essentially signed or unsigned type.`);
177
167
  return;
@@ -192,9 +182,8 @@ export default class Section10_EssentialTypeModel extends MISRAAnalyser {
192
182
  }
193
183
  }, this);
194
184
  }
195
-
196
- private r10_3_noInvalidAssignments($startNode: Joinpoint) { //not working for decls
197
- Query.searchFrom($startNode, BinaryOp, {kind: "assign"}).get().forEach(bOp => {
185
+ r10_3_noInvalidAssignments($startNode) {
186
+ Query.searchFrom($startNode, BinaryOp, { kind: "assign" }).get().forEach(bOp => {
198
187
  if (Section10_EssentialTypeModel.getEssentialType(bOp.left.type) !== Section10_EssentialTypeModel.getEssentialType(bOp.right.type)) {
199
188
  this.logMISRAError(bOp, `Value ${bOp.right.code} cannot be assigned to ${bOp.left.code}, since it has a different essential type category.`);
200
189
  }
@@ -203,7 +192,7 @@ export default class Section10_EssentialTypeModel extends MISRAAnalyser {
203
192
  }
204
193
  }, this);
205
194
  Query.searchFrom($startNode, ReturnStmt).get().forEach(ret => {
206
- const fun = ret.getAncestor("function") as FunctionJp;
195
+ const fun = ret.getAncestor("function");
207
196
  console.log(ret.returnExpr.code, ret.returnExpr.bitWidth);
208
197
  console.log(fun.bitWidth);
209
198
  if (Section10_EssentialTypeModel.getEssentialType(ret.returnExpr.type) !== Section10_EssentialTypeModel.getEssentialType(fun.returnType)) {
@@ -225,26 +214,23 @@ export default class Section10_EssentialTypeModel extends MISRAAnalyser {
225
214
  }
226
215
  }, this);
227
216
  }
228
-
229
- private static checkBoolSource(subExpr: Expression) {
217
+ static checkBoolSource(subExpr) {
230
218
  if (subExpr.type.desugarAll instanceof BuiltinType && subExpr.type.desugarAll.builtinKind === "Bool") {
231
219
  return true;
232
220
  }
233
221
  else if (subExpr instanceof IntLiteral && (Number(subExpr.value) === 0 || Number(subExpr.value) === 1)) {
234
222
  return true;
235
223
  }
236
- else return false;
224
+ else
225
+ return false;
237
226
  }
238
-
239
- private r10_5_noInvalidCasts($startNode: Joinpoint) {//chars, anonymous enums
227
+ r10_5_noInvalidCasts($startNode) {
240
228
  Query.searchFrom($startNode, Cast).get().forEach(cast => {
241
229
  const fromType = cast.fromType.desugarAll;
242
230
  const toType = cast.toType.desugarAll;
243
-
244
231
  if (toType instanceof BuiltinType) {
245
- console.log(toType.builtinKind)
232
+ console.log(toType.builtinKind);
246
233
  }
247
-
248
234
  if (toType instanceof BuiltinType && toType.builtinKind === "Bool" && !Section10_EssentialTypeModel.checkBoolSource(cast.subExpr)) {
249
235
  this.logMISRAError(cast, "Only essentially boolean values, or the integer constants 0 or 1, may be cast to an essentially boolean type.");
250
236
  }
@@ -262,12 +248,10 @@ export default class Section10_EssentialTypeModel extends MISRAAnalyser {
262
248
  }
263
249
  }, this);
264
250
  }
265
-
266
- private static isCompositeBinaryExpr($op: BinaryOp) {
251
+ static isCompositeBinaryExpr($op) {
267
252
  return /(add)|(sub)|(mul)|(div)|(rem)|(shl)|(shr)|(l_and)|(l_or)|(xor)/.test($op.kind);
268
253
  }
269
-
270
- private static isCompositeExpr($expr: Expression): Expression | undefined {
254
+ static isCompositeExpr($expr) {
271
255
  if ($expr instanceof ParenExpr) {
272
256
  return this.isCompositeExpr($expr.subExpr);
273
257
  }
@@ -281,10 +265,10 @@ export default class Section10_EssentialTypeModel extends MISRAAnalyser {
281
265
  return $expr;
282
266
  }
283
267
  }
284
- else return undefined;
268
+ else
269
+ return undefined;
285
270
  }
286
-
287
- private static compositeExprWidth($op: Expression): number {
271
+ static compositeExprWidth($op) {
288
272
  if ($op instanceof BinaryOp && Section10_EssentialTypeModel.isCompositeBinaryExpr($op)) {
289
273
  const leftW = Section10_EssentialTypeModel.compositeExprWidth($op.left);
290
274
  const rightW = Section10_EssentialTypeModel.compositeExprWidth($op.right);
@@ -298,28 +282,29 @@ export default class Section10_EssentialTypeModel extends MISRAAnalyser {
298
282
  else if ($op instanceof ParenExpr) {
299
283
  return this.compositeExprWidth($op.subExpr);
300
284
  }
301
- else return $op.bitWidth;
285
+ else
286
+ return $op.bitWidth;
302
287
  }
303
-
304
- private static transformBinaryOp($expr: BinaryOp, $type: Type) {
288
+ static transformBinaryOp($expr, $type) {
305
289
  $expr.left.replaceWith(ClavaJoinPoints.cStyleCast($type, $expr.left));
306
290
  }
307
-
308
- private static transformTernaryOp($expr: TernaryOp, $type: Type, $bitWidth: number) {
291
+ static transformTernaryOp($expr, $type, $bitWidth) {
309
292
  const trueExpr = this.isCompositeExpr($expr.trueExpr);
310
293
  const falseExpr = this.isCompositeExpr($expr.falseExpr);
311
294
  if (trueExpr && this.compositeExprWidth(trueExpr) < $bitWidth) {
312
- if (trueExpr instanceof TernaryOp) this.transformTernaryOp(trueExpr, $type, $bitWidth);
313
- else if (trueExpr instanceof BinaryOp) this.transformBinaryOp(trueExpr, $type);
295
+ if (trueExpr instanceof TernaryOp)
296
+ this.transformTernaryOp(trueExpr, $type, $bitWidth);
297
+ else if (trueExpr instanceof BinaryOp)
298
+ this.transformBinaryOp(trueExpr, $type);
314
299
  }
315
-
316
300
  if (falseExpr && this.compositeExprWidth(falseExpr) < $type.bitWidth) {
317
- if (falseExpr instanceof TernaryOp) this.transformTernaryOp(falseExpr, $type, $bitWidth);
318
- else if (falseExpr instanceof BinaryOp) this.transformBinaryOp(falseExpr, $type);
301
+ if (falseExpr instanceof TernaryOp)
302
+ this.transformTernaryOp(falseExpr, $type, $bitWidth);
303
+ else if (falseExpr instanceof BinaryOp)
304
+ this.transformBinaryOp(falseExpr, $type);
319
305
  }
320
306
  }
321
-
322
- private r10_6_noWiderCompositeExprAssignments($startNode: Joinpoint) { //unfinished for rets and params
307
+ r10_6_noWiderCompositeExprAssignments($startNode) {
323
308
  Query.searchFrom($startNode, Expression).get().forEach(expr => {
324
309
  const compositeExpr = Section10_EssentialTypeModel.isCompositeExpr(expr);
325
310
  if (compositeExpr) {
@@ -350,8 +335,7 @@ export default class Section10_EssentialTypeModel extends MISRAAnalyser {
350
335
  }
351
336
  }, this);*/
352
337
  }
353
-
354
- private r10_8_noWiderCompositeCasts($startNode: Joinpoint) {
338
+ r10_8_noWiderCompositeCasts($startNode) {
355
339
  Query.searchFrom($startNode, Cast).get().forEach(cast => {
356
340
  const compositeExpr = Section10_EssentialTypeModel.isCompositeExpr(cast.subExpr);
357
341
  if (compositeExpr) {
@@ -360,7 +344,7 @@ export default class Section10_EssentialTypeModel extends MISRAAnalyser {
360
344
  }
361
345
  else if (cast.bitWidth > Section10_EssentialTypeModel.compositeExprWidth(compositeExpr)) {
362
346
  this.logMISRAError(compositeExpr, `Composite expression ${cast.subExpr.code} cannot be cast to ${cast.toType.code} since it is a wider type.`, new Fix(cast, cast => {
363
- const castJp = cast as Cast;
347
+ const castJp = cast;
364
348
  const compositeExpr = Section10_EssentialTypeModel.isCompositeExpr(castJp.subExpr);
365
349
  if (compositeExpr instanceof BinaryOp) {
366
350
  compositeExpr.left.replaceWith(ClavaJoinPoints.cStyleCast(cast.type, compositeExpr.left));
@@ -374,4 +358,5 @@ export default class Section10_EssentialTypeModel extends MISRAAnalyser {
374
358
  }
375
359
  });
376
360
  }
377
- }
361
+ }
362
+ //# sourceMappingURL=Section10_EssentialTypeModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Section10_EssentialTypeModel.js","sourceRoot":"","sources":["../../../src/misra/sections/Section10_EssentialTypeModel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { Program, FileJp } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import MISRAAnalyser from "../MISRAAnalyser.js";
3
+ export default class Section11_PointerTypeConversions extends MISRAAnalyser {
4
+ ruleMapper: Map<number, (jp: Program | FileJp) => void>;
5
+ constructor(rules: number[]);
6
+ private static functionTypesMatch;
7
+ private r11_1_noFunctionPointerConversions;
8
+ private r11_4_noIntToPointer;
9
+ private r11_5_noConversionFromVoid;
10
+ private r11_7_noFloatConversions;
11
+ }
12
+ //# sourceMappingURL=Section11_PointerTypeConversions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Section11_PointerTypeConversions.d.ts","sourceRoot":"","sources":["../../../src/misra/sections/Section11_PointerTypeConversions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAiF,MAAM,qCAAqC,CAAC;AACrJ,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;IAO3B,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAiBjC,OAAO,CAAC,kCAAkC;IAyB1C,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,0BAA0B;IAWlC,OAAO,CAAC,wBAAwB;CAwBnC"}
@@ -1,19 +1,16 @@
1
1
  import Query from "@specs-feup/lara/api/weaver/Query.js";
2
- import { Program, FileJp, Cast, FunctionType, PointerType, BuiltinType, IntLiteral, Joinpoint, QualType } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import { Cast, FunctionType, PointerType, BuiltinType, IntLiteral, QualType } from "@specs-feup/clava/api/Joinpoints.js";
3
3
  import MISRAAnalyser from "../MISRAAnalyser.js";
4
4
  import Section10_EssentialTypeModel, { EssentialTypes } from "./Section10_EssentialTypeModel.js";
5
-
6
5
  export default class Section11_PointerTypeConversions 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
  [7, this.r11_7_noFloatConversions.bind(this)]
13
11
  ]);
14
12
  }
15
-
16
- private static functionTypesMatch(t1: FunctionType, t2: FunctionType) {
13
+ static functionTypesMatch(t1, t2) {
17
14
  console.log(t1.returnType.kind, t2.returnType.kind);
18
15
  if (t1.returnType != t2.returnType) {
19
16
  return false;
@@ -26,20 +23,16 @@ export default class Section11_PointerTypeConversions extends MISRAAnalyser {
26
23
  return false;
27
24
  }
28
25
  }
29
-
30
26
  return true;
31
27
  }
32
-
33
- private r11_1_noFunctionPointerConversions($startNode: Joinpoint) { //type equality not working
28
+ r11_1_noFunctionPointerConversions($startNode) {
34
29
  Query.searchFrom($startNode, Cast).get().forEach(cast => {
35
30
  const fromType = cast.fromType.desugarAll;
36
31
  const toType = cast.toType.desugarAll;
37
-
38
32
  if (fromType instanceof PointerType && toType instanceof PointerType && fromType.pointee.desugarAll instanceof FunctionType && toType.pointee.desugarAll instanceof FunctionType) {
39
33
  console.log("hello");
40
34
  if (!Section11_PointerTypeConversions.functionTypesMatch(fromType.pointee.desugarAll, toType.pointee.desugarAll)) {
41
35
  this.logMISRAError(cast, "A function pointer can only be converted into another function pointer if the types match.");
42
-
43
36
  }
44
37
  }
45
38
  else if (fromType instanceof PointerType && fromType.pointee.desugarAll instanceof FunctionType) {
@@ -54,50 +47,46 @@ export default class Section11_PointerTypeConversions extends MISRAAnalyser {
54
47
  }
55
48
  });
56
49
  }
57
-
58
- private r11_4_noIntToPointer($startNode: Joinpoint) {
50
+ r11_4_noIntToPointer($startNode) {
59
51
  Query.searchFrom($startNode, Cast).get().forEach(cast => {
60
52
  const fromType = cast.fromType.desugarAll;
61
53
  const toType = cast.toType.desugarAll;
62
54
  if (fromType.isPointer !== toType.isPointer) {
63
55
  this.logMISRAError(cast, "Integers should not be converted to pointers and vice-versa.");
64
56
  }
65
- })
57
+ });
66
58
  }
67
-
68
- private r11_5_noConversionFromVoid($startNode: Joinpoint) {
59
+ r11_5_noConversionFromVoid($startNode) {
69
60
  Query.searchFrom($startNode, Cast).get().forEach(cast => {
70
61
  const fromType = cast.fromType.desugarAll;
71
- const toType =cast.toType.desugarAll;
62
+ const toType = cast.toType.desugarAll;
72
63
  if (fromType instanceof PointerType && fromType.pointee instanceof BuiltinType && fromType.pointee.isVoid
73
64
  && toType instanceof PointerType && !(toType.pointee instanceof BuiltinType && toType.pointee.isVoid)) {
74
65
  this.logMISRAError(cast, "Pointer to void should not be converted to pointer to object");
75
66
  }
76
67
  });
77
68
  }
78
-
79
- private r11_7_noFloatConversions($startNode: Joinpoint) {
69
+ r11_7_noFloatConversions($startNode) {
80
70
  Query.searchFrom($startNode, Cast).get().forEach(cast => {
81
71
  let fromType = cast.fromType.desugarAll;
82
72
  let toType = cast.fromType.desugarAll;
83
-
84
73
  if (fromType instanceof QualType) {
85
74
  fromType = fromType.unqualifiedType.desugarAll;
86
75
  }
87
76
  if (toType instanceof QualType) {
88
77
  toType = toType.unqualifiedType.desugarAll;
89
78
  }
90
-
91
79
  if (fromType instanceof PointerType && !(toType instanceof PointerType)
92
- && Section10_EssentialTypeModel.getEssentialType(toType) !== EssentialTypes.SIGNED
93
- && Section10_EssentialTypeModel.getEssentialType(toType) !== EssentialTypes.UNSIGNED) {
80
+ && Section10_EssentialTypeModel.getEssentialType(toType) !== EssentialTypes.SIGNED
81
+ && Section10_EssentialTypeModel.getEssentialType(toType) !== EssentialTypes.UNSIGNED) {
94
82
  this.logMISRAError(cast, "A pointer to object cannot be cast to a non-integer arithmetic type.");
95
83
  }
96
84
  else if (toType instanceof PointerType && !(fromType instanceof PointerType)
97
- && Section10_EssentialTypeModel.getEssentialType(fromType) !== EssentialTypes.SIGNED
98
- && Section10_EssentialTypeModel.getEssentialType(fromType) !== EssentialTypes.UNSIGNED) {
85
+ && Section10_EssentialTypeModel.getEssentialType(fromType) !== EssentialTypes.SIGNED
86
+ && Section10_EssentialTypeModel.getEssentialType(fromType) !== EssentialTypes.UNSIGNED) {
99
87
  this.logMISRAError(cast, "A non-arithmetic integer value cannot be cast to a pointer to object.");
100
88
  }
101
89
  }, this);
102
90
  }
103
- }
91
+ }
92
+ //# sourceMappingURL=Section11_PointerTypeConversions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Section11_PointerTypeConversions.js","sourceRoot":"","sources":["../../../src/misra/sections/Section11_PointerTypeConversions.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 Section12_Expressions extends MISRAAnalyser {
4
+ ruleMapper: Map<number, (jp: Program | FileJp) => void>;
5
+ constructor(rules: number[]);
6
+ private static isAdditive;
7
+ private static isMultiplicative;
8
+ private static isShift;
9
+ private static isRelational;
10
+ private static isEquality;
11
+ private static isSamePrecedence;
12
+ private r12_1_explicitPrecedence;
13
+ private r12_3_noCommaOperator;
14
+ }
15
+ //# sourceMappingURL=Section12_Expressions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Section12_Expressions.d.ts","sourceRoot":"","sources":["../../../src/misra/sections/Section12_Expressions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,EAA6C,MAAM,qCAAqC,CAAC;AACjH,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAIhD,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;IAQ3B,OAAO,CAAC,MAAM,CAAC,UAAU;IAIzB,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAI/B,OAAO,CAAC,MAAM,CAAC,OAAO;IAItB,OAAO,CAAC,MAAM,CAAC,YAAY;IAI3B,OAAO,CAAC,MAAM,CAAC,UAAU;IAIzB,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAY/B,OAAO,CAAC,wBAAwB;IAehC,OAAO,CAAC,qBAAqB;CAehC"}
@@ -0,0 +1,70 @@
1
+ import Query from "@specs-feup/lara/api/weaver/Query.js";
2
+ import { BinaryOp, Op, Loop } from "@specs-feup/clava/api/Joinpoints.js";
3
+ import MISRAAnalyser from "../MISRAAnalyser.js";
4
+ import ClavaJoinPoints from "@specs-feup/clava/api/clava/ClavaJoinPoints.js";
5
+ import Fix from "@specs-feup/clava/api/clava/analysis/Fix.js";
6
+ export default class Section12_Expressions extends MISRAAnalyser {
7
+ ruleMapper;
8
+ constructor(rules) {
9
+ super(rules);
10
+ this.ruleMapper = new Map([
11
+ [1, this.r12_1_explicitPrecedence.bind(this)],
12
+ [3, this.r12_3_noCommaOperator.bind(this)]
13
+ ]);
14
+ }
15
+ static isAdditive(op) {
16
+ return op === "add" || op === "sub";
17
+ }
18
+ static isMultiplicative(op) {
19
+ return op === "mul" || op === "div" || op === "rem";
20
+ }
21
+ static isShift(op) {
22
+ return op === "shl" || op === "shr";
23
+ }
24
+ static isRelational(op) {
25
+ return op === "lt" || op === "gt" || op === "le" || op === "ge";
26
+ }
27
+ static isEquality(op) {
28
+ return op === "eq" || op === "ne";
29
+ }
30
+ static isSamePrecedence(op1, op2) {
31
+ if (op1 === op2)
32
+ return true;
33
+ for (const fun of [this.isAdditive, this.isMultiplicative, this.isShift, this.isRelational, this.isEquality]) {
34
+ if (fun(op1) && fun(op2)) {
35
+ return true;
36
+ }
37
+ }
38
+ return false;
39
+ }
40
+ r12_1_explicitPrecedence($startNode) {
41
+ for (const bOp of Query.searchFrom($startNode, BinaryOp, { isAssignment: false })) {
42
+ if ((bOp.kind === "ptr_mem_d" || bOp.kind === "ptr_mem_i")
43
+ || (!bOp.getAncestor("binaryOp") && !bOp.getAncestor("ternaryOp"))
44
+ || (bOp.parent instanceof BinaryOp && bOp.parent.isAssignment)
45
+ || (bOp.parent instanceof Op && Section12_Expressions.isSamePrecedence(bOp.kind, bOp.parent.kind))
46
+ || (bOp.parent.instanceOf("parenExpr")))
47
+ continue;
48
+ this.logMISRAError(bOp, `Operator precedence in expression ${bOp.code} is not explicit.`, new Fix(bOp, ($jp) => {
49
+ const parenExpr = ClavaJoinPoints.parenthesis($jp);
50
+ bOp.replaceWith(parenExpr);
51
+ }));
52
+ }
53
+ }
54
+ r12_3_noCommaOperator($startNode) {
55
+ Query.searchFrom($startNode, BinaryOp, { operator: ',' }).get().forEach(op => {
56
+ const loopAncestor = op.getAncestor("loop");
57
+ if (loopAncestor instanceof Loop && (loopAncestor?.step?.contains(op) || loopAncestor?.cond?.contains(op) || loopAncestor?.init?.contains(op))) {
58
+ console.log(`Cannot eliminate comma operator in expression ${op.code} since it is at the head of a loop.`);
59
+ this.logMISRAError(op, "Use of the comma operator is not allowed.");
60
+ }
61
+ else {
62
+ this.logMISRAError(op, "Use of the comma operator is not allowed.", new Fix(op, ($jp) => {
63
+ $jp.insertBefore($jp.left.stmt);
64
+ $jp.replaceWith($jp.right);
65
+ }));
66
+ }
67
+ }, this);
68
+ }
69
+ }
70
+ //# sourceMappingURL=Section12_Expressions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Section12_Expressions.js","sourceRoot":"","sources":["../../../src/misra/sections/Section12_Expressions.ts"],"names":[],"mappings":"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"}
@@ -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 Section13_SideEffects extends MISRAAnalyser {
4
+ ruleMapper: Map<number, (jp: Program | FileJp) => void>;
5
+ constructor(rules: number[]);
6
+ private checkPotentialPersistentSideEffects;
7
+ private r13_1_initListSideEffects;
8
+ private static visitAllExprs;
9
+ private checkIncrementSideEffects;
10
+ private r13_3_noIncrementSideEffects;
11
+ private r13_4_noUseOfAssignmentValue;
12
+ private r13_5_shortCircuitSideEffects;
13
+ }
14
+ //# sourceMappingURL=Section13_SideEffects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Section13_SideEffects.d.ts","sourceRoot":"","sources":["../../../src/misra/sections/Section13_SideEffects.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,EAA2E,MAAM,qCAAqC,CAAC;AAC/I,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAIhD,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,mCAAmC;IAoB3C,OAAO,CAAC,yBAAyB;IAIjC,OAAO,CAAC,MAAM,CAAC,aAAa;IAa5B,OAAO,CAAC,yBAAyB;IA2BjC,OAAO,CAAC,4BAA4B;IAIpC,OAAO,CAAC,4BAA4B;IAQpC,OAAO,CAAC,6BAA6B;CAGxC"}