@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,11 @@
1
+ import { LaraJoinPoint } from "@specs-feup/lara/api/LaraJoinPoint.js";
2
+ import MISRAPass from "../MISRAPass.js";
3
+ import { PreprocessingReqs } from "../MISRAReporter.js";
4
+ export default class S19_OverlappingStoragePass extends MISRAPass {
5
+ protected _preprocessingReqs: PreprocessingReqs[];
6
+ initRuleMapper(): void;
7
+ matchJoinpoint($jp: LaraJoinPoint): boolean;
8
+ private r19_2_noUnion;
9
+ protected _name: string;
10
+ }
11
+ //# sourceMappingURL=S19_OverlappingStoragePass.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"S19_OverlappingStoragePass.d.ts","sourceRoot":"","sources":["../../../src/misra/passes/S19_OverlappingStoragePass.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,MAAM,CAAC,OAAO,OAAO,0BAA2B,SAAQ,SAAS;IAC7D,SAAS,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,CAAM;IAEvD,cAAc,IAAI,IAAI;IAMtB,cAAc,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO;IAI3C,OAAO,CAAC,aAAa;IAMrB,SAAS,CAAC,KAAK,EAAE,MAAM,CAAyB;CAEnD"}
@@ -0,0 +1,20 @@
1
+ import MISRAPass from "../MISRAPass.js";
2
+ import { Class } from "@specs-feup/clava/api/Joinpoints.js";
3
+ export default class S19_OverlappingStoragePass extends MISRAPass {
4
+ _preprocessingReqs = [];
5
+ initRuleMapper() {
6
+ this._ruleMapper = new Map([
7
+ [2, this.r19_2_noUnion.bind(this)]
8
+ ]);
9
+ }
10
+ matchJoinpoint($jp) {
11
+ return $jp instanceof Class;
12
+ }
13
+ r19_2_noUnion($startNode) {
14
+ if (!($startNode instanceof Class && $startNode.kind === "union"))
15
+ return;
16
+ this.logMISRAError("The union keyword should not be used.");
17
+ }
18
+ _name = "Overlapping storage";
19
+ }
20
+ //# sourceMappingURL=S19_OverlappingStoragePass.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"S19_OverlappingStoragePass.js","sourceRoot":"","sources":["../../../src/misra/passes/S19_OverlappingStoragePass.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,iBAAiB,CAAC;AAExC,OAAO,EAAE,KAAK,EAAa,MAAM,qCAAqC,CAAC;AAEvE,MAAM,CAAC,OAAO,OAAO,0BAA2B,SAAQ,SAAS;IACnD,kBAAkB,GAAwB,EAAE,CAAC;IAEvD,cAAc;QACV,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,CAAC;YACvB,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACrC,CAAC,CAAC;IACP,CAAC;IAED,cAAc,CAAC,GAAkB;QAC7B,OAAO,GAAG,YAAY,KAAK,CAAC;IAChC,CAAC;IAEO,aAAa,CAAC,UAAqB;QACvC,IAAI,CAAC,CAAC,UAAU,YAAY,KAAK,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO,CAAC;YAAE,OAAO;QAE1E,IAAI,CAAC,aAAa,CAAC,uCAAuC,CAAC,CAAC;IAChE,CAAC;IAES,KAAK,GAAW,qBAAqB,CAAC;CAEnD"}
@@ -0,0 +1,20 @@
1
+ import { LaraJoinPoint } from "@specs-feup/lara/api/LaraJoinPoint.js";
2
+ import MISRAPass from "../MISRAPass.js";
3
+ import { PreprocessingReqs } from "../MISRAReporter.js";
4
+ export default class S21_StandardLibPass extends MISRAPass {
5
+ protected _preprocessingReqs: PreprocessingReqs[];
6
+ initRuleMapper(): void;
7
+ matchJoinpoint($jp: LaraJoinPoint): boolean;
8
+ private r21_3_noDynamicAllocation;
9
+ private r21_4_noSetjmpUsage;
10
+ private r21_5_noSignalUsage;
11
+ private r21_6_noStandardIO;
12
+ private r21_7_noStringFunctions;
13
+ private r21_8_noSysFunctions;
14
+ private r21_9_noStdAlgos;
15
+ private r21_10_noDateUsage;
16
+ private r21_11_noTgmathUsage;
17
+ private r21_12_noFenvExceptions;
18
+ protected _name: string;
19
+ }
20
+ //# sourceMappingURL=S21_StandardLibPass.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"S21_StandardLibPass.d.ts","sourceRoot":"","sources":["../../../src/misra/passes/S21_StandardLibPass.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,SAAS;IACtD,SAAS,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,CAAM;IAEvD,cAAc,IAAI,IAAI;IAetB,cAAc,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO;IAI3C,OAAO,CAAC,yBAAyB;IAMjC,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,uBAAuB;IAM/B,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,uBAAuB;IAM/B,SAAS,CAAC,KAAK,EAAE,MAAM,CAAwB;CAClD"}
@@ -0,0 +1,77 @@
1
+ import MISRAPass from "../MISRAPass.js";
2
+ import { Call, Include } from "@specs-feup/clava/api/Joinpoints.js";
3
+ export default class S21_StandardLibPass extends MISRAPass {
4
+ _preprocessingReqs = [];
5
+ initRuleMapper() {
6
+ this._ruleMapper = new Map([
7
+ [3, this.r21_3_noDynamicAllocation.bind(this)],
8
+ [4, this.r21_4_noSetjmpUsage.bind(this)],
9
+ [5, this.r21_5_noSignalUsage.bind(this)],
10
+ [6, this.r21_6_noStandardIO.bind(this)],
11
+ [7, this.r21_7_noStringFunctions.bind(this)],
12
+ [8, this.r21_8_noSysFunctions.bind(this)],
13
+ [9, this.r21_9_noStdAlgos.bind(this)],
14
+ [10, this.r21_10_noDateUsage.bind(this)],
15
+ [11, this.r21_11_noTgmathUsage.bind(this)],
16
+ [12, this.r21_12_noFenvExceptions.bind(this)]
17
+ ]);
18
+ }
19
+ matchJoinpoint($jp) {
20
+ return $jp instanceof Call || $jp instanceof Include;
21
+ }
22
+ r21_3_noDynamicAllocation($startNode) {
23
+ if (!($startNode instanceof Call && /(malloc|realloc|calloc|free)/.test($startNode.name)))
24
+ return;
25
+ this.logMISRAError("Use of memory allocation functions provided by <stdlib.h> is not allowed.");
26
+ }
27
+ r21_4_noSetjmpUsage($startNode) {
28
+ if (!($startNode instanceof Include && $startNode.isAngled && $startNode.name === "setjmp.h"))
29
+ return;
30
+ this.logMISRAError("Use of <setjmp.h> is not allowed.");
31
+ }
32
+ r21_5_noSignalUsage($startNode) {
33
+ if (!($startNode instanceof Include && $startNode.isAngled && $startNode.name === "signal.h"))
34
+ return;
35
+ this.logMISRAError("Use of <signal.h> is not allowed.");
36
+ }
37
+ r21_6_noStandardIO($startNode) {
38
+ if (!($startNode instanceof Include && $startNode.isAngled && /(stdio.h|wchar.h)/.test($startNode.name)))
39
+ return;
40
+ this.logMISRAError("Use of the standard library I/O functions provided by <stdio.h> and <wchar.h> is not allowed.");
41
+ }
42
+ r21_7_noStringFunctions($startNode) {
43
+ if (!($startNode instanceof Call && /(atoi|atof|atol|atoll)/.test($startNode.name)))
44
+ return;
45
+ this.logMISRAError(`Use of function ${$startNode.signature} is not allowed.`);
46
+ }
47
+ r21_8_noSysFunctions($startNode) {
48
+ if (!($startNode instanceof Call && /(system|abort|exit|getenv)/.test($startNode.name)))
49
+ return;
50
+ this.logMISRAError(`Use of function ${$startNode.signature} is not allowed.`);
51
+ }
52
+ r21_9_noStdAlgos($startNode) {
53
+ if (!($startNode instanceof Call && /(qsort|bsearch)/.test($startNode.name)))
54
+ return;
55
+ this.logMISRAError(`Use of function ${$startNode.signature} is not allowed.`);
56
+ }
57
+ r21_10_noDateUsage($startNode) {
58
+ if ($startNode instanceof Include && $startNode.isAngled && $startNode.name === "time.h") {
59
+ this.logMISRAError("Use of <time.h> is not allowed.");
60
+ }
61
+ else if ($startNode instanceof Call && $startNode.name === "wcsftime") {
62
+ this.logMISRAError("Identifier 'wcsftime' shall not be used.");
63
+ }
64
+ }
65
+ r21_11_noTgmathUsage($startNode) {
66
+ if (!($startNode instanceof Include && $startNode.isAngled && $startNode.name === "tgmath.h"))
67
+ return;
68
+ this.logMISRAError("Use of <tgmath.h> is not allowed.");
69
+ }
70
+ r21_12_noFenvExceptions($startNode) {
71
+ if (!($startNode instanceof Call && /(feclearexcept|fegetexceptflag|feraiseexcept|fesetexceptflag|fetestexcept)/.test($startNode.name)))
72
+ return;
73
+ this.logMISRAError(`Use of function ${$startNode.signature} is not allowed.`);
74
+ }
75
+ _name = "Standard libraries";
76
+ }
77
+ //# sourceMappingURL=S21_StandardLibPass.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"S21_StandardLibPass.js","sourceRoot":"","sources":["../../../src/misra/passes/S21_StandardLibPass.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { LaraJoinPoint } from "@specs-feup/lara/api/LaraJoinPoint.js";
2
+ import MISRAPass from "../MISRAPass.js";
3
+ import { PreprocessingReqs } from "../MISRAReporter.js";
4
+ export default class S3_CommentPass extends MISRAPass {
5
+ protected _preprocessingReqs: PreprocessingReqs[];
6
+ initRuleMapper(): void;
7
+ matchJoinpoint($jp: LaraJoinPoint): boolean;
8
+ private static removeCommentSequences;
9
+ private r3_1_fixComments;
10
+ protected _name: string;
11
+ }
12
+ //# sourceMappingURL=S3_CommentPass.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"S3_CommentPass.d.ts","sourceRoot":"","sources":["../../../src/misra/passes/S3_CommentPass.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAIxD,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,SAAS;IACjD,SAAS,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,CAAM;IAEvD,cAAc,IAAI,IAAI;IAMtB,cAAc,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO;IAI3C,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAIrC,OAAO,CAAC,gBAAgB;IAexB,SAAS,CAAC,KAAK,EAAE,MAAM,CAAc;CACxC"}
@@ -0,0 +1,27 @@
1
+ import MISRAPass from "../MISRAPass.js";
2
+ import { Comment } from "@specs-feup/clava/api/Joinpoints.js";
3
+ import Fix from "@specs-feup/clava/api/clava/analysis/Fix.js";
4
+ export default class S3_CommentPass extends MISRAPass {
5
+ _preprocessingReqs = [];
6
+ initRuleMapper() {
7
+ this._ruleMapper = new Map([
8
+ [3, this.r3_1_fixComments.bind(this)]
9
+ ]);
10
+ }
11
+ matchJoinpoint($jp) {
12
+ return true;
13
+ }
14
+ static removeCommentSequences(str) {
15
+ return str.replace(/(\/\/|\/\*)/g, '');
16
+ }
17
+ r3_1_fixComments($startNode) {
18
+ if ($startNode instanceof Comment && /(\/\/|\/\*)/g.test($startNode.text)) {
19
+ this.logMISRAError(`Comment ${$startNode.text} contains invalid character sequences.`, new Fix($startNode, $jp => $jp.setText(S3_CommentPass.removeCommentSequences($startNode.text))));
20
+ }
21
+ $startNode.inlineComments.filter(comment => /(\/\/|\/\*)/g.test(comment.text)).forEach(comment => {
22
+ this.logMISRAError(`Comment ${comment.text} contains invalid character sequences.`, new Fix($startNode, $jp => $jp.setText(S3_CommentPass.removeCommentSequences(comment.text))));
23
+ });
24
+ }
25
+ _name = "Comments";
26
+ }
27
+ //# sourceMappingURL=S3_CommentPass.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"S3_CommentPass.js","sourceRoot":"","sources":["../../../src/misra/passes/S3_CommentPass.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,iBAAiB,CAAC;AAExC,OAAO,EAAE,OAAO,EAAa,MAAM,qCAAqC,CAAC;AACzE,OAAO,GAAG,MAAM,6CAA6C,CAAC;AAE9D,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,SAAS;IACvC,kBAAkB,GAAwB,EAAE,CAAC;IAEvD,cAAc;QACV,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,CAAC;YACvB,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACxC,CAAC,CAAC;IACP,CAAC;IAED,cAAc,CAAC,GAAkB;QAC7B,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,MAAM,CAAC,sBAAsB,CAAC,GAAW;QAC7C,OAAO,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAC3C,CAAC;IAEO,gBAAgB,CAAC,UAAqB;QAC1C,IAAI,UAAU,YAAY,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACxE,IAAI,CAAC,aAAa,CAAC,WAAW,UAAU,CAAC,IAAI,wCAAwC,EAAE,IAAI,GAAG,CAC1F,UAAU,EACV,GAAG,CAAC,EAAE,CAAE,GAAe,CAAC,OAAO,CAAC,cAAc,CAAC,sBAAsB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAC1F,CAAC,CAAC;QACP,CAAC;QACD,UAAU,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC7F,IAAI,CAAC,aAAa,CAAC,WAAW,OAAO,CAAC,IAAI,wCAAwC,EAAE,IAAI,GAAG,CACvF,UAAU,EACV,GAAG,CAAC,EAAE,CAAE,GAAe,CAAC,OAAO,CAAC,cAAc,CAAC,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CACvF,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAES,KAAK,GAAW,UAAU,CAAC;CACxC"}
@@ -0,0 +1,13 @@
1
+ import { LaraJoinPoint } from "@specs-feup/lara/api/LaraJoinPoint.js";
2
+ import MISRAPass from "../MISRAPass.js";
3
+ import { PreprocessingReqs } from "../MISRAReporter.js";
4
+ export default class S5_IdentifierPass extends MISRAPass {
5
+ protected _preprocessingReqs: PreprocessingReqs[];
6
+ initRuleMapper(): void;
7
+ matchJoinpoint($jp: LaraJoinPoint): boolean;
8
+ private static hasExternalLinkage;
9
+ private r5_1_externalIdentifierLength;
10
+ private r5_6_uniqueTypedefs;
11
+ protected _name: string;
12
+ }
13
+ //# sourceMappingURL=S5_IdentifierPass.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"S5_IdentifierPass.d.ts","sourceRoot":"","sources":["../../../src/misra/passes/S5_IdentifierPass.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAIxD,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,SAAS;IACpD,SAAS,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,CAA8C;IAE/F,cAAc,IAAI,IAAI;IAItB,cAAc,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO;IAI3C,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAIjC,OAAO,CAAC,6BAA6B;IAerC,OAAO,CAAC,mBAAmB;IA4B3B,SAAS,CAAC,KAAK,EAAE,MAAM,CAAiB;CAC3C"}
@@ -0,0 +1,60 @@
1
+ import MISRAPass from "../MISRAPass.js";
2
+ import { PreprocessingReqs } from "../MISRAReporter.js";
3
+ import { Class, FileJp, FunctionJp, NamedDecl, StorageClass, TypedefNameDecl, Vardecl } from "@specs-feup/clava/api/Joinpoints.js";
4
+ import Fix from "@specs-feup/clava/api/clava/analysis/Fix.js";
5
+ export default class S5_IdentifierPass extends MISRAPass {
6
+ _preprocessingReqs = [PreprocessingReqs.EXTERNAL_LINKAGE_DECLS];
7
+ initRuleMapper() {
8
+ throw new Error("Method not implemented.");
9
+ }
10
+ matchJoinpoint($jp) {
11
+ throw new Error("Method not implemented.");
12
+ }
13
+ static hasExternalLinkage($class) {
14
+ return $class !== StorageClass.STATIC && $class !== StorageClass.EXTERN;
15
+ }
16
+ r5_1_externalIdentifierLength($startNode) {
17
+ if (!(($startNode instanceof FunctionJp || $startNode instanceof Vardecl) && $startNode.parent instanceof FileJp))
18
+ return;
19
+ if (!S5_IdentifierPass.hasExternalLinkage($startNode.storageClass))
20
+ return;
21
+ if (!this._preprocessing?.externalLinkageDecls) {
22
+ throw new Error("Preprocessing has not been initialized properly.");
23
+ }
24
+ if (this._preprocessing.externalLinkageDecls.filter(jp => jp.astId !== $startNode.astId).map(jp => jp.name.substring(0, 31)).includes($startNode.name.substring(0, 31))) {
25
+ this.logMISRAError(`Identifier ${$startNode.name} is not distinct from other external identifiers.`, new Fix($startNode, $jp => {
26
+ ($jp || Vardecl).name = "a_" + ($jp || Vardecl).name;
27
+ }));
28
+ }
29
+ }
30
+ r5_6_uniqueTypedefs($startNode) {
31
+ if (!this._preprocessing?.typedefDecls) {
32
+ throw new Error("Preprocessing has not been initialized properly.");
33
+ }
34
+ if ($startNode instanceof NamedDecl && !($startNode instanceof TypedefNameDecl)) {
35
+ if ($startNode instanceof Class) {
36
+ const typedefChildren = $startNode.getDescendants("typedefDecl");
37
+ for (const child of typedefChildren) {
38
+ if ($startNode.name === child.name)
39
+ return;
40
+ }
41
+ }
42
+ if (this._preprocessing.typedefDecls.some(jp => jp.name === $startNode.name)) {
43
+ this.logMISRAError(`${$startNode.name} is also the name of a typedef. Typedef identifiers must not be reused.`, new Fix($startNode, jp => {
44
+ const declJp = jp;
45
+ declJp.name = declJp.name + "_" + declJp.astId;
46
+ }));
47
+ }
48
+ }
49
+ else if ($startNode instanceof TypedefNameDecl) {
50
+ if (this._preprocessing.typedefDecls.filter(jp => jp.astId !== $startNode.astId).some(jp => jp.name === $startNode.name)) {
51
+ this.logMISRAError("Typedef names must be unique across all translation units.", new Fix($startNode, jp => {
52
+ const typedefJp = jp;
53
+ typedefJp.name = typedefJp.name + "_" + typedefJp.astId;
54
+ }));
55
+ }
56
+ }
57
+ }
58
+ _name = "Identifiers";
59
+ }
60
+ //# sourceMappingURL=S5_IdentifierPass.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"S5_IdentifierPass.js","sourceRoot":"","sources":["../../../src/misra/passes/S5_IdentifierPass.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { LaraJoinPoint } from "@specs-feup/lara/api/LaraJoinPoint.js";
2
+ import MISRAPass from "../MISRAPass.js";
3
+ import { PreprocessingReqs } from "../MISRAReporter.js";
4
+ export default class S6_TypePass extends MISRAPass {
5
+ protected _preprocessingReqs: PreprocessingReqs[];
6
+ initRuleMapper(): void;
7
+ matchJoinpoint($jp: LaraJoinPoint): boolean;
8
+ private r6_2_noSingleBitSignedFields;
9
+ protected _name: string;
10
+ }
11
+ //# sourceMappingURL=S6_TypePass.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"S6_TypePass.d.ts","sourceRoot":"","sources":["../../../src/misra/passes/S6_TypePass.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,SAAS,MAAM,iBAAiB,CAAA;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,SAAS;IAC9C,SAAS,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,CAAM;IAEvD,cAAc,IAAI,IAAI;IAMtB,cAAc,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO;IAI3C,OAAO,CAAC,4BAA4B;IAWpC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAW;CAErC"}
@@ -0,0 +1,25 @@
1
+ import MISRAPass from "../MISRAPass.js";
2
+ import { Field } from "@specs-feup/clava/api/Joinpoints.js";
3
+ export default class S6_TypePass extends MISRAPass {
4
+ _preprocessingReqs = [];
5
+ initRuleMapper() {
6
+ this._ruleMapper = new Map([
7
+ [2, this.r6_2_noSingleBitSignedFields.bind(this)],
8
+ ]);
9
+ }
10
+ matchJoinpoint($jp) {
11
+ return $jp instanceof Field;
12
+ }
13
+ r6_2_noSingleBitSignedFields($startNode) {
14
+ if (!($startNode instanceof Field))
15
+ return;
16
+ if ($startNode.children.length > 0 && $startNode.name) {
17
+ const width = new Number($startNode.children[0].children[0].value);
18
+ if (width == 1 && $startNode.type.isSigned) {
19
+ this.logMISRAError(`Single-bit named bit field ${$startNode.name} must not have a signed type.`);
20
+ }
21
+ }
22
+ }
23
+ _name = "Types";
24
+ }
25
+ //# sourceMappingURL=S6_TypePass.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"S6_TypePass.js","sourceRoot":"","sources":["../../../src/misra/passes/S6_TypePass.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,iBAAiB,CAAA;AAEvC,OAAO,EAAe,KAAK,EAAyB,MAAM,qCAAqC,CAAC;AAEhG,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,SAAS;IACpC,kBAAkB,GAAwB,EAAE,CAAC;IAEvD,cAAc;QACV,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,CAAC;YACvB,CAAC,CAAC,EAAE,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACpD,CAAC,CAAC;IACP,CAAC;IAED,cAAc,CAAC,GAAkB;QAC7B,OAAO,GAAG,YAAY,KAAK,CAAC;IAChC,CAAC;IAEO,4BAA4B,CAAC,UAAqB;QACtD,IAAI,CAAC,CAAC,UAAU,YAAY,KAAK,CAAC;YAAE,OAAO;QAE3C,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACpD,MAAM,KAAK,GAAG,IAAI,MAAM,CAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAgB,CAAC,KAAK,CAAC,CAAC;YACnF,IAAI,KAAK,IAAI,CAAC,IAAK,UAAU,CAAC,IAAoB,CAAC,QAAQ,EAAE,CAAC;gBAC1D,IAAI,CAAC,aAAa,CAAC,8BAA8B,UAAU,CAAC,IAAI,+BAA+B,CAAC,CAAC;YACrG,CAAC;QACL,CAAC;IACL,CAAC;IAES,KAAK,GAAW,OAAO,CAAC;CAErC"}
@@ -0,0 +1,14 @@
1
+ import { LaraJoinPoint } from "@specs-feup/lara/api/LaraJoinPoint.js";
2
+ import MISRAPass from "../MISRAPass.js";
3
+ import { PreprocessingReqs } from "../MISRAReporter.js";
4
+ export default class S7_LiteralsConstantsPass extends MISRAPass {
5
+ protected _preprocessingReqs: PreprocessingReqs[];
6
+ initRuleMapper(): void;
7
+ matchJoinpoint($jp: LaraJoinPoint): boolean;
8
+ private r7_1_noOctalConstants;
9
+ private r7_3_noLowercaseLSuffix;
10
+ private static checkPointerConst;
11
+ private r7_4_constStringLiterals;
12
+ protected _name: string;
13
+ }
14
+ //# sourceMappingURL=S7_LiteralsConstantsPass.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"S7_LiteralsConstantsPass.d.ts","sourceRoot":"","sources":["../../../src/misra/passes/S7_LiteralsConstantsPass.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,MAAM,CAAC,OAAO,OAAO,wBAAyB,SAAQ,SAAS;IAC3D,SAAS,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,CAAM;IAEvD,cAAc,IAAI,IAAI;IAQtB,cAAc,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO;IAI3C,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,uBAAuB;IAQ/B,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAUhC,OAAO,CAAC,wBAAwB;IA+BhC,SAAS,CAAC,KAAK,EAAE,MAAM,CAA4B;CAEtD"}
@@ -0,0 +1,71 @@
1
+ import MISRAPass from "../MISRAPass.js";
2
+ import { BinaryOp, Call, IntLiteral, PointerType, QualType, ReturnStmt, Vardecl } from "@specs-feup/clava/api/Joinpoints.js";
3
+ export default class S7_LiteralsConstantsPass extends MISRAPass {
4
+ _preprocessingReqs = [];
5
+ initRuleMapper() {
6
+ this._ruleMapper = new Map([
7
+ [1, this.r7_1_noOctalConstants.bind(this)],
8
+ [3, this.r7_3_noLowercaseLSuffix.bind(this)],
9
+ [4, this.r7_4_constStringLiterals.bind(this)]
10
+ ]);
11
+ }
12
+ matchJoinpoint($jp) {
13
+ return $jp instanceof IntLiteral || $jp instanceof Vardecl || $jp instanceof BinaryOp || $jp instanceof ReturnStmt || $jp instanceof Call;
14
+ }
15
+ r7_1_noOctalConstants($startNode) {
16
+ if (!($startNode instanceof IntLiteral))
17
+ return;
18
+ if ($startNode.code.match(/0[0-9]+/g)) {
19
+ this.logMISRAError(`The octal constant ${$startNode.code} was used. Its decimal value is ${$startNode.value}`);
20
+ }
21
+ }
22
+ r7_3_noLowercaseLSuffix($startNode) {
23
+ if (!($startNode instanceof IntLiteral))
24
+ return;
25
+ if ($startNode.code.includes('l')) {
26
+ this.logMISRAError(`A lowercase 'l' was used as a suffix in ${$startNode.code}.`);
27
+ }
28
+ }
29
+ static checkPointerConst(type) {
30
+ if (type instanceof PointerType) {
31
+ return type.pointee.constant;
32
+ }
33
+ else if (type instanceof QualType && type.unqualifiedType instanceof PointerType) {
34
+ return type.unqualifiedType.pointee.constant;
35
+ }
36
+ else
37
+ return undefined;
38
+ }
39
+ r7_4_constStringLiterals($startNode) {
40
+ if ($startNode instanceof Vardecl) {
41
+ if (!$startNode.type.isPointer)
42
+ return;
43
+ if ($startNode.children.length > 0 && $startNode.children[0].joinPointType === "literal"
44
+ && !S7_LiteralsConstantsPass.checkPointerConst($startNode.type)) {
45
+ this.logMISRAError(`String literal assigned to non-const qualified variable ${$startNode.name}`);
46
+ }
47
+ }
48
+ else if ($startNode instanceof BinaryOp && $startNode.isAssignment) {
49
+ if ($startNode.right.joinPointType === "literal" && !S7_LiteralsConstantsPass.checkPointerConst($startNode.left.type)) {
50
+ this.logMISRAError(`String literal assigned to non-const qualified variable ${$startNode.left.name}`);
51
+ }
52
+ }
53
+ else if ($startNode instanceof ReturnStmt) {
54
+ const ancestor = $startNode.getAncestor("function");
55
+ const retType = ancestor.functionType.returnType;
56
+ if ($startNode.returnExpr?.joinPointType === "literal" && !S7_LiteralsConstantsPass.checkPointerConst(retType)) {
57
+ this.logMISRAError(`String literal returned in non-const qualified return value for function ${ancestor.name}`);
58
+ }
59
+ }
60
+ else if ($startNode instanceof Call) {
61
+ const paramTypes = $startNode.function.functionType.paramTypes;
62
+ for (let i = 1; i < $startNode.children.length; i++) {
63
+ if ($startNode.children[i].joinPointType === "literal" && !S7_LiteralsConstantsPass.checkPointerConst(paramTypes[i - 1])) {
64
+ this.logMISRAError(`String literal passed as non-const qualified parameter in call of ${$startNode.function.name}`);
65
+ }
66
+ }
67
+ }
68
+ }
69
+ _name = "Literals and constants";
70
+ }
71
+ //# sourceMappingURL=S7_LiteralsConstantsPass.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"S7_LiteralsConstantsPass.js","sourceRoot":"","sources":["../../../src/misra/passes/S7_LiteralsConstantsPass.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { LaraJoinPoint } from "@specs-feup/lara/api/LaraJoinPoint.js";
2
+ import MISRAPass from "../MISRAPass.js";
3
+ import { PreprocessingReqs } from "../MISRAReporter.js";
4
+ export default class S8_DeclDefPass extends MISRAPass {
5
+ protected _preprocessingReqs: PreprocessingReqs[];
6
+ initRuleMapper(): void;
7
+ matchJoinpoint($jp: LaraJoinPoint): boolean;
8
+ private r8_2_functionPrototype;
9
+ private r8_3_compatibleDefinitions;
10
+ private static hasExternalLinkage;
11
+ private r8_7_noUnnecessaryExternalLinkage;
12
+ private r8_10_onlyStaticInline;
13
+ private r8_11_externArrayExplicitSize;
14
+ private setEnumMap;
15
+ private r8_12_implicitExplicitEnumMatching;
16
+ protected _name: string;
17
+ }
18
+ //# sourceMappingURL=S8_DeclDefPass.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"S8_DeclDefPass.d.ts","sourceRoot":"","sources":["../../../src/misra/passes/S8_DeclDefPass.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAIxD,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,SAAS;IACjD,SAAS,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,CAAM;IACvD,cAAc,IAAI,IAAI;IAUtB,cAAc,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO;IAI3C,OAAO,CAAC,sBAAsB;IAM9B,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;IAwB1C,SAAS,CAAC,KAAK,EAAE,MAAM,CAAkC;CAC5D"}
@@ -0,0 +1,127 @@
1
+ import MISRAPass from "../MISRAPass.js";
2
+ import { EnumDecl, FunctionJp, IntLiteral, Param, StorageClass, Vardecl } from "@specs-feup/clava/api/Joinpoints.js";
3
+ import Fix from "@specs-feup/clava/api/clava/analysis/Fix.js";
4
+ export default class S8_DeclDefPass extends MISRAPass {
5
+ _preprocessingReqs = [];
6
+ initRuleMapper() {
7
+ this._ruleMapper = new Map([
8
+ [2, this.r8_2_functionPrototype.bind(this)],
9
+ [3, this.r8_3_compatibleDefinitions.bind(this)],
10
+ [7, this.r8_7_noUnnecessaryExternalLinkage.bind(this)],
11
+ [10, this.r8_10_onlyStaticInline.bind(this)],
12
+ [11, this.r8_11_externArrayExplicitSize.bind(this)],
13
+ [12, this.r8_12_implicitExplicitEnumMatching.bind(this)]
14
+ ]);
15
+ }
16
+ matchJoinpoint($jp) {
17
+ return $jp instanceof Param || $jp instanceof FunctionJp || $jp instanceof Vardecl || $jp instanceof EnumDecl;
18
+ }
19
+ r8_2_functionPrototype($startNode) {
20
+ if (!($startNode instanceof Param))
21
+ return;
22
+ if (!$startNode.name)
23
+ this.logMISRAError(`Parameter of type ${$startNode.type.code} lacks a name.`);
24
+ }
25
+ r8_3_compatibleDefinitions($startNode) {
26
+ if (!($startNode instanceof FunctionJp && $startNode.isImplementation))
27
+ return;
28
+ $startNode.declarationJps.forEach(decl => {
29
+ for (let i = 0; i < $startNode.params.length; i++) {
30
+ if ($startNode.paramNames[i] !== decl.paramNames[i]) {
31
+ this.logMISRAError(`Mismatch in name of parameters with declaration on ${decl.filename}@${decl.line}:${decl.column}.`);
32
+ }
33
+ if ($startNode.params[i].type.code !== decl.params[i].type.code) {
34
+ this.logMISRAError(`Mismatch in parameter types with declaration on ${decl.filename}@${decl.line}:${decl.column}`);
35
+ }
36
+ }
37
+ }, this);
38
+ }
39
+ static hasExternalLinkage(jp) {
40
+ return jp.storageClass !== StorageClass.STATIC && jp.storageClass !== StorageClass.EXTERN;
41
+ }
42
+ r8_7_noUnnecessaryExternalLinkage($startNode) {
43
+ /*const globals = new Map();
44
+
45
+ Query.searchFrom($startNode, FileJp).get().forEach(file => {
46
+ file.children.forEach(jp => {
47
+ if (jp instanceof FunctionJp && jp.name !== "main" && Section8_DeclarationsDefinitions.hasExternalLinkage(jp)) {
48
+ let hasExternals = false;
49
+ jp.calls.forEach(call => {
50
+ if (call.filename !== jp.filename) {
51
+ hasExternals = true;
52
+ }
53
+ }, this);
54
+ if (!hasExternals) {
55
+ this.logMISRAError(jp, `Function ${jp.name} has external linkage but it is only referenced in its file.`);
56
+ }
57
+ }
58
+
59
+ if (jp instanceof DeclStmt) {
60
+ jp.decls.filter(decl => decl instanceof Vardecl && Section8_DeclarationsDefinitions.hasExternalLinkage(decl)).forEach(decl => {
61
+ //globals.push({decl: decl as Vardecl, file: decl.filename});
62
+ globals.set(decl.astId, {decl: decl as Vardecl, file: decl.filename});
63
+ }, this);
64
+ }
65
+ });
66
+ }, this);
67
+
68
+ Query.searchFrom($startNode, Varref).get().forEach(ref => {
69
+ if (globals.has(ref.astId)) {
70
+ const declFile = globals.get(ref.astId).file;
71
+ if (declFile !== ref.filename) {
72
+ globals.delete(ref.astId);
73
+ }
74
+ }
75
+ }, this);
76
+
77
+ globals.forEach((v, k, m) => {
78
+ this.logMISRAError(v.decl, `Variable ${v.decl.name} is declared with external linkage but is not referenced outside its file.`);
79
+ }, this);
80
+ */
81
+ }
82
+ r8_10_onlyStaticInline($startNode) {
83
+ if (!($startNode instanceof FunctionJp && $startNode.isInline))
84
+ return;
85
+ if ($startNode.storageClass !== StorageClass.STATIC) {
86
+ this.logMISRAError("Inline functions must always be declared static.");
87
+ }
88
+ }
89
+ r8_11_externArrayExplicitSize($startNode) {
90
+ if (!($startNode instanceof Vardecl && $startNode.storageClass === StorageClass.EXTERN))
91
+ return;
92
+ if ($startNode.type.isArray && $startNode.type.arraySize === -1) {
93
+ this.logMISRAError(`Size of external array ${$startNode.name} is not explicit.`);
94
+ }
95
+ }
96
+ setEnumMap(map, newValue, isExplicit, jp) {
97
+ if (map.has(newValue) && !(isExplicit && map.get(newValue))) {
98
+ this.logMISRAError(`An implicitly numbered identifier in enum ${jp.name} shares a value with another identifier.`, new Fix(jp, jp => {
99
+ }));
100
+ }
101
+ map.set(newValue, isExplicit);
102
+ }
103
+ r8_12_implicitExplicitEnumMatching($startNode) {
104
+ if (!($startNode instanceof EnumDecl))
105
+ return;
106
+ const map = new Map();
107
+ let index = 0;
108
+ for (const enumerator of $startNode.enumerators) {
109
+ if (enumerator.children.length > 0) {
110
+ if (enumerator.children[0].children[0] instanceof IntLiteral) {
111
+ index = Number(enumerator.children[0].children[0].value);
112
+ this.setEnumMap(map, index, true, $startNode);
113
+ }
114
+ else {
115
+ console.log(`Warning! Could not analyse the entirety of enum ${$startNode.name} due to non-constant expressions`);
116
+ return;
117
+ }
118
+ }
119
+ else {
120
+ this.setEnumMap(map, index, false, $startNode);
121
+ }
122
+ index++;
123
+ }
124
+ }
125
+ _name = "Declarations and definitions";
126
+ }
127
+ //# sourceMappingURL=S8_DeclDefPass.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"S8_DeclDefPass.js","sourceRoot":"","sources":["../../../src/misra/passes/S8_DeclDefPass.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { Program, FileJp, Type, Expression } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import MISRAAnalyser from "../MISRAAnalyser.js";
3
+ export declare enum EssentialTypes {
4
+ UNSIGNED = "unsigned",
5
+ CHAR = "char",
6
+ SIGNED = "signed",
7
+ ENUM = "enum",
8
+ FLOAT = "float",
9
+ BOOL = "bool",
10
+ UNKOWN = "unkown"
11
+ }
12
+ export default class Section10_EssentialTypeModel extends MISRAAnalyser {
13
+ ruleMapper: Map<number, (jp: Program | FileJp) => void>;
14
+ constructor(rules: number[]);
15
+ static getEssentialType(bType: Type): EssentialTypes;
16
+ static isInteger($et: EssentialTypes): boolean;
17
+ static getExprEssentialType($expr: Expression): EssentialTypes;
18
+ private restrictOperand;
19
+ private restrictOperandList;
20
+ private r10_1_appropriateEssentialOperands;
21
+ private r10_2_appropriateCharOperands;
22
+ private r10_3_noInvalidAssignments;
23
+ private static checkBoolSource;
24
+ private r10_5_noInvalidCasts;
25
+ private static isCompositeBinaryExpr;
26
+ private static isCompositeExpr;
27
+ private static compositeExprWidth;
28
+ private static transformBinaryOp;
29
+ private static transformTernaryOp;
30
+ private r10_6_noWiderCompositeExprAssignments;
31
+ private r10_8_noWiderCompositeCasts;
32
+ }
33
+ //# sourceMappingURL=Section10_EssentialTypeModel.d.ts.map