@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,55 @@
1
+ import { Joinpoint } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import MISRARule from "../../MISRARule.js";
3
+ import MISRAContext from "../../MISRAContext.js";
4
+ import { MISRATransformationReport } from "../../MISRA.js";
5
+ /**
6
+ * MISRA Rule 20.2: The ', " or \ characters and the /* or // character sequences shall not occur in a header filename
7
+ */
8
+ export default class Rule_20_2_InvalidHeaderFileName extends MISRARule {
9
+ constructor(context: MISRAContext);
10
+ /**
11
+ * Checks if the given joinpoint is a header file whose name includes invalid characters.
12
+ *
13
+ * @param $jp - Joinpoint to analyze
14
+ * @param logErrors - [logErrors=false] - Whether to log errors if a violation is detected
15
+ * @returns Returns true if the joinpoint violates the rule, false otherwise
16
+ */
17
+ match($jp: Joinpoint, logErrors?: boolean): boolean;
18
+ /**
19
+ * Renames a header file to ensure it contains only valid characters and updates all related includes accordingly.
20
+ *
21
+ * @param $jp - Joinpoint to transform
22
+ * @returns Report detailing the transformation result
23
+ */
24
+ transform($jp: Joinpoint): MISRATransformationReport;
25
+ /**
26
+ * Finds all include joinpoints that reference a specific header file
27
+ *
28
+ * @param headerFileJp - The header file joinpoint
29
+ * @returns List of matching include statements
30
+ */
31
+ private getMatchingIncludes;
32
+ /**
33
+ * Computes the full path to the header file based on the include statement
34
+ *
35
+ * @param includeJp The include joinpoint
36
+ * @returns Resolved path to the header file
37
+ */
38
+ private getHeaderFilePath;
39
+ /**
40
+ * Updates the provided include joinpoints to reference the new header file name
41
+ *
42
+ * @param includesOfHeader List of include joinpoints to update
43
+ * @param newFilename The new filename for the header file
44
+ */
45
+ private updateIncludes;
46
+ /**
47
+ * Computes the new include path with the updated header file name
48
+ *
49
+ * @param includeJp - Original include statement
50
+ * @param newHeaderFileName - New header file name
51
+ * @returns The updated include path
52
+ */
53
+ private getNewIncludeName;
54
+ }
55
+ //# sourceMappingURL=Rule_20_2_InvalidHeaderFileName.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rule_20_2_InvalidHeaderFileName.d.ts","sourceRoot":"","sources":["../../../src/rules/Section20-PreprocessingDirectives/Rule_20_2_InvalidHeaderFileName.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,SAAS,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,YAAY,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAA2B,MAAM,gBAAgB,CAAC;AAIpF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,+BAAgC,SAAQ,SAAS;gBACtD,OAAO,EAAE,YAAY;IAIjC;;;;;;OAMG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO;IAU1D;;;;;OAKG;IACH,SAAS,CAAC,GAAG,EAAE,SAAS,GAAG,yBAAyB;IAcpD;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAM3B;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAczB;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAgBtB;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;CAM5B"}
@@ -0,0 +1,108 @@
1
+ import { FileJp, Include } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import MISRARule from "../../MISRARule.js";
3
+ import { MISRATransformationReport, MISRATransformationType } from "../../MISRA.js";
4
+ import Query from "@specs-feup/lara/api/weaver/Query.js";
5
+ import * as path from 'path';
6
+ /**
7
+ * MISRA Rule 20.2: The ', " or \ characters and the /* or // character sequences shall not occur in a header filename
8
+ */
9
+ export default class Rule_20_2_InvalidHeaderFileName extends MISRARule {
10
+ constructor(context) {
11
+ super("20.2", context);
12
+ }
13
+ /**
14
+ * Checks if the given joinpoint is a header file whose name includes invalid characters.
15
+ *
16
+ * @param $jp - Joinpoint to analyze
17
+ * @param logErrors - [logErrors=false] - Whether to log errors if a violation is detected
18
+ * @returns Returns true if the joinpoint violates the rule, false otherwise
19
+ */
20
+ match($jp, logErrors = false) {
21
+ if (!($jp instanceof FileJp && $jp.isHeader))
22
+ return false;
23
+ const isNonCompliant = /.*('|"|\\|\/\*|\/\/).*/.test($jp.name);
24
+ if (isNonCompliant && logErrors) {
25
+ this.logMISRAError($jp, `Invalid characters in header filename. Invalid characters are ', ", \\, and the sequences /* and //.`);
26
+ }
27
+ return isNonCompliant;
28
+ }
29
+ /**
30
+ * Renames a header file to ensure it contains only valid characters and updates all related includes accordingly.
31
+ *
32
+ * @param $jp - Joinpoint to transform
33
+ * @returns Report detailing the transformation result
34
+ */
35
+ transform($jp) {
36
+ if (!this.match($jp)) {
37
+ return new MISRATransformationReport(MISRATransformationType.NoChange);
38
+ }
39
+ const fileJp = $jp;
40
+ const includesOfHeader = this.getMatchingIncludes(fileJp);
41
+ const newFilename = this.context.generateHeaderFilename();
42
+ fileJp.setName(newFilename);
43
+ this.updateIncludes(includesOfHeader, newFilename);
44
+ return new MISRATransformationReport(MISRATransformationType.DescendantChange);
45
+ }
46
+ /**
47
+ * Finds all include joinpoints that reference a specific header file
48
+ *
49
+ * @param headerFileJp - The header file joinpoint
50
+ * @returns List of matching include statements
51
+ */
52
+ getMatchingIncludes(headerFileJp) {
53
+ return Query.search(Include).get().filter(includeJp => path.basename(includeJp.name) === headerFileJp.name &&
54
+ this.getHeaderFilePath(includeJp) === headerFileJp.path);
55
+ }
56
+ /**
57
+ * Computes the full path to the header file based on the include statement
58
+ *
59
+ * @param includeJp The include joinpoint
60
+ * @returns Resolved path to the header file
61
+ */
62
+ getHeaderFilePath(includeJp) {
63
+ try {
64
+ if (includeJp.name.startsWith("../")) {
65
+ return includeJp.relativeFolderpath;
66
+ }
67
+ else {
68
+ const relativeDir = path.dirname(includeJp.name);
69
+ const fileJp = includeJp.getAncestor("file");
70
+ return path.resolve(fileJp.path, relativeDir);
71
+ }
72
+ }
73
+ catch (error) {
74
+ return "";
75
+ }
76
+ }
77
+ /**
78
+ * Updates the provided include joinpoints to reference the new header file name
79
+ *
80
+ * @param includesOfHeader List of include joinpoints to update
81
+ * @param newFilename The new filename for the header file
82
+ */
83
+ updateIncludes(includesOfHeader, newFilename) {
84
+ for (const includeJp of includesOfHeader) {
85
+ const fileJp = includeJp.getAncestor("file");
86
+ const newIncludeJpName = this.getNewIncludeName(includeJp, newFilename);
87
+ fileJp.addInclude(newIncludeJpName);
88
+ const tempInclude = Query.searchFrom(fileJp, Include, { name: includeName => path.normalize(includeName) === newIncludeJpName }).first();
89
+ if (tempInclude) {
90
+ includeJp.replaceWith(tempInclude.deepCopy());
91
+ tempInclude.detach();
92
+ }
93
+ }
94
+ }
95
+ /**
96
+ * Computes the new include path with the updated header file name
97
+ *
98
+ * @param includeJp - Original include statement
99
+ * @param newHeaderFileName - New header file name
100
+ * @returns The updated include path
101
+ */
102
+ getNewIncludeName(includeJp, newHeaderFileName) {
103
+ const isFile = path.extname(includeJp.name) !== '';
104
+ const baseDir = isFile ? path.dirname(includeJp.name) : includeJp.name;
105
+ return path.join(baseDir, newHeaderFileName);
106
+ }
107
+ }
108
+ //# sourceMappingURL=Rule_20_2_InvalidHeaderFileName.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rule_20_2_InvalidHeaderFileName.js","sourceRoot":"","sources":["../../../src/rules/Section20-PreprocessingDirectives/Rule_20_2_InvalidHeaderFileName.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { Joinpoint } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import MISRARule from "../../MISRARule.js";
3
+ import MISRAContext from "../../MISRAContext.js";
4
+ import { MISRATransformationReport } from "../../MISRA.js";
5
+ /**
6
+ * MISRA-C Rule 2.3: A project should not contain unused type declarations.
7
+ */
8
+ export default class Rule_2_3_UnusedTypeDecl extends MISRARule {
9
+ constructor(context: MISRAContext);
10
+ /**
11
+ * Checks if a given joinpoint uses the specified typedef declaration.
12
+ * @param jp - The joinpoint to check
13
+ * @param typeDecl - The typedef declaration to check against
14
+ * @returns Returns true if the joinpoint uses the given typedef declaration, false otherwise
15
+ */
16
+ private isTypedefUsed;
17
+ /**
18
+ * Retrieves all joinpoints that use the specified typedef declaration
19
+ *
20
+ * @param typeDecl - The typedef declaration to search for in the joinpoints
21
+ * @returns Array of joinpoints that use the given typedef declaration
22
+ */
23
+ private getTypeDefUses;
24
+ /**
25
+ * Checks if the given joinpoint represents an unused type declaration
26
+ * @param $jp - Joinpoint to analyze
27
+ * @param logErrors - [logErrors=false] - Whether to log errors if a violation is detected
28
+ * @returns Returns true if the joinpoint violates the rule, false otherwise
29
+ */
30
+ match($jp: Joinpoint, logErrors?: boolean): boolean;
31
+ /**
32
+ * Transforms the joinpoint if it represents an unused type declaration
33
+ *
34
+ * - If the joinpoint defines a tag (named struct, enum or union) that is referenced elsewhere in the code,
35
+ * the joinpoint is replaced by the tag
36
+ * - Otherwise, the joinpoint is simply removed from the AST
37
+ *
38
+ * @param $jp - Joinpoint to transform
39
+ * @returns Report detailing the transformation result
40
+ */
41
+ transform($jp: Joinpoint): MISRATransformationReport;
42
+ }
43
+ //# sourceMappingURL=Rule_2_3_UnusedTypeDecl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rule_2_3_UnusedTypeDecl.d.ts","sourceRoot":"","sources":["../../../src/rules/Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,SAAS,EAAoC,MAAM,qCAAqC,CAAC;AAC5G,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,YAAY,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAA2B,MAAM,gBAAgB,CAAC;AAGpF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,uBAAwB,SAAQ,SAAS;gBAE9C,OAAO,EAAE,YAAY;IAIjC;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAKrB;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAItB;;;;;OAKG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO;IAW1D;;;;;;;;;OASG;IACH,SAAS,CAAC,GAAG,EAAE,SAAS,GAAG,yBAAyB;CAWvD"}
@@ -0,0 +1,68 @@
1
+ import { EnumDecl, RecordJp, TypedefType } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import MISRARule from "../../MISRARule.js";
3
+ import { MISRATransformationReport, MISRATransformationType } from "../../MISRA.js";
4
+ import { getBaseType, getTagUses, getTypeDecl, getTypedJps } from "../../utils/utils.js";
5
+ /**
6
+ * MISRA-C Rule 2.3: A project should not contain unused type declarations.
7
+ */
8
+ export default class Rule_2_3_UnusedTypeDecl extends MISRARule {
9
+ constructor(context) {
10
+ super("2.3", context);
11
+ }
12
+ /**
13
+ * Checks if a given joinpoint uses the specified typedef declaration.
14
+ * @param jp - The joinpoint to check
15
+ * @param typeDecl - The typedef declaration to check against
16
+ * @returns Returns true if the joinpoint uses the given typedef declaration, false otherwise
17
+ */
18
+ isTypedefUsed(jp, typeDecl) {
19
+ const jpType = getBaseType(jp);
20
+ return !jpType?.isBuiltin && jpType instanceof TypedefType && jpType.decl.astId === typeDecl.astId;
21
+ }
22
+ /**
23
+ * Retrieves all joinpoints that use the specified typedef declaration
24
+ *
25
+ * @param typeDecl - The typedef declaration to search for in the joinpoints
26
+ * @returns Array of joinpoints that use the given typedef declaration
27
+ */
28
+ getTypeDefUses(typeDecl) {
29
+ return getTypedJps().filter(jp => this.isTypedefUsed(jp, typeDecl));
30
+ }
31
+ /**
32
+ * Checks if the given joinpoint represents an unused type declaration
33
+ * @param $jp - Joinpoint to analyze
34
+ * @param logErrors - [logErrors=false] - Whether to log errors if a violation is detected
35
+ * @returns Returns true if the joinpoint violates the rule, false otherwise
36
+ */
37
+ match($jp, logErrors = false) {
38
+ const typeDecl = getTypeDecl($jp);
39
+ if (typeDecl === undefined)
40
+ return false;
41
+ const isUnused = this.getTypeDefUses(typeDecl).length === 0;
42
+ if (logErrors && isUnused) {
43
+ this.logMISRAError($jp, `Type declaration ${typeDecl.name} is declared but not used.`);
44
+ }
45
+ return isUnused;
46
+ }
47
+ /**
48
+ * Transforms the joinpoint if it represents an unused type declaration
49
+ *
50
+ * - If the joinpoint defines a tag (named struct, enum or union) that is referenced elsewhere in the code,
51
+ * the joinpoint is replaced by the tag
52
+ * - Otherwise, the joinpoint is simply removed from the AST
53
+ *
54
+ * @param $jp - Joinpoint to transform
55
+ * @returns Report detailing the transformation result
56
+ */
57
+ transform($jp) {
58
+ if (!this.match($jp))
59
+ return new MISRATransformationReport(MISRATransformationType.NoChange);
60
+ if (($jp instanceof RecordJp || $jp instanceof EnumDecl) && $jp.name && getTagUses($jp)) {
61
+ $jp.lastChild.detach();
62
+ return new MISRATransformationReport(MISRATransformationType.DescendantChange);
63
+ }
64
+ $jp.detach();
65
+ return new MISRATransformationReport(MISRATransformationType.Removal);
66
+ }
67
+ }
68
+ //# sourceMappingURL=Rule_2_3_UnusedTypeDecl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rule_2_3_UnusedTypeDecl.js","sourceRoot":"","sources":["../../../src/rules/Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAY,QAAQ,EAAc,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAC5G,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEzF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,uBAAwB,SAAQ,SAAS;IAE1D,YAAY,OAAqB;QAC7B,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC1B,CAAC;IAED;;;;;OAKG;IACK,aAAa,CAAC,EAAa,EAAE,QAAqB;QACtD,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;QAC/B,OAAO,CAAC,MAAM,EAAE,SAAS,IAAI,MAAM,YAAY,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC;IACvG,CAAC;IAED;;;;;OAKG;IACK,cAAc,CAAC,QAAqB;QACxC,OAAO,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;IACxE,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,GAAc,EAAE,YAAqB,KAAK;QAC5C,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAEzC,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;QAC5D,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;YACxB,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,oBAAoB,QAAQ,CAAC,IAAI,4BAA4B,CAAC,CAAA;QAC1F,CAAC;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED;;;;;;;;;OASG;IACH,SAAS,CAAC,GAAc;QACpB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YAChB,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAE3E,IAAI,CAAC,GAAG,YAAY,QAAQ,IAAI,GAAG,YAAY,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACtF,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YACvB,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,CAAC;QACnF,CAAC;QACD,GAAG,CAAC,MAAM,EAAE,CAAC;QACb,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAC1E,CAAC;CACJ"}
@@ -0,0 +1,29 @@
1
+ import { Joinpoint } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import MISRARule from "../../MISRARule.js";
3
+ import MISRAContext from "../../MISRAContext.js";
4
+ import { MISRATransformationReport } from "../../MISRA.js";
5
+ /**
6
+ * MISRA-C Rule 2.4: A project should not contain unused tag declarations.
7
+ */
8
+ export default class Rule_2_4_UnusedTagDecl extends MISRARule {
9
+ constructor(context: MISRAContext);
10
+ /**
11
+ * Checks if the given joinpoint is an unused tag declaration
12
+ * A tag is considered to be unused if it has no references in the code or is only used within a typedef
13
+ *
14
+ * @param $jp - Joinpoint to analyze
15
+ * @param logErrors - [logErrors=false] - Whether to log errors if a violation is detected
16
+ * @returns Returns true if the joinpoint violates the rule, false otherwise
17
+ */
18
+ match($jp: Joinpoint, logErrors?: boolean): boolean;
19
+ /**
20
+ * Transforms the joinpoint if it is an unused tag declaration
21
+ * - If the Joinpoint is a tag declared in a typedef, it removes the name.
22
+ * - Otherwise, the Joinpoint is detached.
23
+ *
24
+ * @param $jp - Joinpoint to transform
25
+ * @returns Report detailing the transformation result
26
+ */
27
+ transform($jp: Joinpoint): MISRATransformationReport;
28
+ }
29
+ //# sourceMappingURL=Rule_2_4_UnusedTagDecl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rule_2_4_UnusedTagDecl.d.ts","sourceRoot":"","sources":["../../../src/rules/Section2_UnusedCode/Rule_2_4_UnusedTagDecl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA+C,MAAM,qCAAqC,CAAC;AAC7G,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,YAAY,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAA2B,MAAM,gBAAgB,CAAC;AAGpF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,sBAAuB,SAAQ,SAAS;gBAE7C,OAAO,EAAE,YAAY;IAIjC;;;;;;;OAOG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO;IAiB1D;;;;;;;OAOG;IACH,SAAS,CAAC,GAAG,EAAE,SAAS,GAAG,yBAAyB;CAWvD"}
@@ -0,0 +1,53 @@
1
+ import { RecordJp, EnumDecl } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import MISRARule from "../../MISRARule.js";
3
+ import { MISRATransformationReport, MISRATransformationType } from "../../MISRA.js";
4
+ import { getTagUses, hasTypeDecl } from "../../utils/utils.js";
5
+ /**
6
+ * MISRA-C Rule 2.4: A project should not contain unused tag declarations.
7
+ */
8
+ export default class Rule_2_4_UnusedTagDecl extends MISRARule {
9
+ constructor(context) {
10
+ super("2.4", context);
11
+ }
12
+ /**
13
+ * Checks if the given joinpoint is an unused tag declaration
14
+ * A tag is considered to be unused if it has no references in the code or is only used within a typedef
15
+ *
16
+ * @param $jp - Joinpoint to analyze
17
+ * @param logErrors - [logErrors=false] - Whether to log errors if a violation is detected
18
+ * @returns Returns true if the joinpoint violates the rule, false otherwise
19
+ */
20
+ match($jp, logErrors = false) {
21
+ if (!($jp instanceof RecordJp || $jp instanceof EnumDecl))
22
+ return false;
23
+ const containsTypeDecl = hasTypeDecl($jp);
24
+ const jpName = $jp.name;
25
+ if (containsTypeDecl && jpName === undefined || jpName === null || jpName.trim().length === 0) {
26
+ return false;
27
+ }
28
+ const isUnused = getTagUses($jp).length === 0;
29
+ if (isUnused && logErrors) {
30
+ this.logMISRAError($jp, containsTypeDecl ? `The tag '${$jp.name}' is declared but only used in a typedef.` : `The tag '${$jp.name}' is declared but not used.`);
31
+ }
32
+ return isUnused;
33
+ }
34
+ /**
35
+ * Transforms the joinpoint if it is an unused tag declaration
36
+ * - If the Joinpoint is a tag declared in a typedef, it removes the name.
37
+ * - Otherwise, the Joinpoint is detached.
38
+ *
39
+ * @param $jp - Joinpoint to transform
40
+ * @returns Report detailing the transformation result
41
+ */
42
+ transform($jp) {
43
+ if (!this.match($jp))
44
+ return new MISRATransformationReport(MISRATransformationType.NoChange);
45
+ if (hasTypeDecl($jp)) {
46
+ $jp.setName('');
47
+ return new MISRATransformationReport(MISRATransformationType.DescendantChange);
48
+ }
49
+ $jp.detach();
50
+ return new MISRATransformationReport(MISRATransformationType.Removal);
51
+ }
52
+ }
53
+ //# sourceMappingURL=Rule_2_4_UnusedTagDecl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rule_2_4_UnusedTagDecl.js","sourceRoot":"","sources":["../../../src/rules/Section2_UnusedCode/Rule_2_4_UnusedTagDecl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,QAAQ,EAAE,QAAQ,EAA2B,MAAM,qCAAqC,CAAC;AAC7G,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAE/D;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,sBAAuB,SAAQ,SAAS;IAEzD,YAAY,OAAqB;QAC7B,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC1B,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,GAAc,EAAE,YAAqB,KAAK;QAC5C,IAAI,CAAC,CAAC,GAAG,YAAY,QAAQ,IAAI,GAAG,YAAY,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAC;QAExE,MAAM,gBAAgB,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC;QACxB,IAAI,gBAAgB,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,IAAK,MAAiB,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxG,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;QAC9C,IAAI,QAAQ,IAAI,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC,aAAa,CAAC,GAAG,EAClB,gBAAgB,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,IAAI,2CAA2C,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,IAAI,6BAA6B,CAAC,CAAC;QAChJ,CAAC;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED;;;;;;;OAOG;IACH,SAAS,CAAC,GAAc;QACpB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YAChB,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAE3E,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,GAA2B,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACzC,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,CAAC;QACnF,CAAC;QACD,GAAG,CAAC,MAAM,EAAE,CAAC;QACb,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAC1E,CAAC;CACJ"}
@@ -0,0 +1,15 @@
1
+ import { Joinpoint } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import MISRARule from "../../MISRARule.js";
3
+ import MISRAContext from "../../MISRAContext.js";
4
+ import { MISRATransformationReport } from "../../MISRA.js";
5
+ /**
6
+ * Rule 2.6: Unused Labels.
7
+ * Checks for labels within a function that are not used.
8
+ */
9
+ export default class Rule_2_6_UnusedLabels extends MISRARule {
10
+ constructor(context: MISRAContext);
11
+ private getUnusedLabels;
12
+ match($jp: Joinpoint, logErrors?: boolean): boolean;
13
+ transform($jp: Joinpoint): MISRATransformationReport;
14
+ }
15
+ //# sourceMappingURL=Rule_2_6_UnusedLabels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rule_2_6_UnusedLabels.d.ts","sourceRoot":"","sources":["../../../src/rules/Section2_UnusedCode/Rule_2_6_UnusedLabels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,SAAS,EAAa,MAAM,qCAAqC,CAAC;AACjG,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,YAAY,MAAM,uBAAuB,CAAC;AAEjD,OAAO,EAAE,yBAAyB,EAA2B,MAAM,gBAAgB,CAAC;AAEpF;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,SAAS;gBAE5C,OAAO,EAAE,YAAY;IAIjC,OAAO,CAAC,eAAe;IAMvB,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO;IAa1D,SAAS,CAAC,GAAG,EAAE,SAAS,GAAG,yBAAyB;CAUvD"}
@@ -0,0 +1,35 @@
1
+ import { GotoStmt, FunctionJp, LabelStmt } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import MISRARule from "../../MISRARule.js";
3
+ import Query from "@specs-feup/lara/api/weaver/Query.js";
4
+ import { MISRATransformationReport, MISRATransformationType } from "../../MISRA.js";
5
+ /**
6
+ * Rule 2.6: Unused Labels.
7
+ * Checks for labels within a function that are not used.
8
+ */
9
+ export default class Rule_2_6_UnusedLabels extends MISRARule {
10
+ constructor(context) {
11
+ super("2.6", context);
12
+ }
13
+ getUnusedLabels(func) {
14
+ return Query.searchFrom(func, LabelStmt).get().filter(label => Query.searchFrom(func, GotoStmt, { label: jp => jp.astId === label.decl.astId }).get().length === 0);
15
+ }
16
+ match($jp, logErrors = false) {
17
+ if (!($jp instanceof FunctionJp))
18
+ return false;
19
+ const unusedLabels = this.getUnusedLabels($jp);
20
+ if (logErrors) {
21
+ unusedLabels.forEach(label => this.logMISRAError(label, `Label ${label.decl.name} is unused in function ${$jp.name}.`));
22
+ }
23
+ return unusedLabels.length > 0;
24
+ }
25
+ transform($jp) {
26
+ if (!this.match($jp))
27
+ return new MISRATransformationReport(MISRATransformationType.NoChange);
28
+ const unusedLabels = this.getUnusedLabels($jp);
29
+ for (const label of unusedLabels) {
30
+ label.detach();
31
+ }
32
+ return new MISRATransformationReport(MISRATransformationType.DescendantChange);
33
+ }
34
+ }
35
+ //# sourceMappingURL=Rule_2_6_UnusedLabels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rule_2_6_UnusedLabels.js","sourceRoot":"","sources":["../../../src/rules/Section2_UnusedCode/Rule_2_6_UnusedLabels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAa,SAAS,EAAE,MAAM,qCAAqC,CAAC;AACjG,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAE3C,OAAO,KAAK,MAAM,sCAAsC,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAEpF;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,SAAS;IAExD,YAAY,OAAqB;QAC7B,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC1B,CAAC;IAEO,eAAe,CAAC,IAAgB;QACpC,OAAO,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC1D,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,KAAK,CAAC,CACtG,CAAC;IACN,CAAC;IAED,KAAK,CAAC,GAAc,EAAE,YAAqB,KAAK;QAC5C,IAAI,CAAC,CAAC,GAAG,YAAY,UAAU,CAAC;YAC5B,OAAO,KAAK,CAAC;QAEjB,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAC/C,IAAI,SAAS,EAAE,CAAC;YACZ,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CACzB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,KAAK,CAAC,IAAI,CAAC,IAAI,0BAA0B,GAAG,CAAC,IAAI,GAAG,CAAC,CAC3F,CAAA;QACL,CAAC;QACD,OAAO,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,SAAS,CAAC,GAAc;QACpB,IAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YACf,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAE3E,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,GAAiB,CAAC,CAAC;QAC7D,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;YAC/B,KAAK,CAAC,MAAM,EAAE,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,CAAC;IACnF,CAAC;CACJ"}
@@ -0,0 +1,13 @@
1
+ import { Joinpoint } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import MISRARule from "../../MISRARule.js";
3
+ import MISRAContext from "../../MISRAContext.js";
4
+ import { MISRATransformationReport } from "../../MISRA.js";
5
+ export default class Rule_2_7_UnusedParameters extends MISRARule {
6
+ constructor(context: MISRAContext);
7
+ private getUnusedParams;
8
+ private getUsedParams;
9
+ private getUsedParamsPositions;
10
+ match($jp: Joinpoint, logErrors?: boolean): boolean;
11
+ transform($jp: Joinpoint): MISRATransformationReport;
12
+ }
13
+ //# sourceMappingURL=Rule_2_7_UnusedParameters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rule_2_7_UnusedParameters.d.ts","sourceRoot":"","sources":["../../../src/rules/Section2_UnusedCode/Rule_2_7_UnusedParameters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,SAAS,EAAuB,MAAM,qCAAqC,CAAC;AACjG,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,YAAY,MAAM,uBAAuB,CAAC;AAEjD,OAAO,EAAE,yBAAyB,EAA2B,MAAM,gBAAgB,CAAC;AAGpF,MAAM,CAAC,OAAO,OAAO,yBAA0B,SAAQ,SAAS;gBAEhD,OAAO,EAAE,YAAY;IAIjC,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,sBAAsB;IAW9B,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO;IAY1D,SAAS,CAAC,GAAG,EAAE,SAAS,GAAG,yBAAyB;CAoBvD"}
@@ -0,0 +1,53 @@
1
+ import { FunctionJp, Varref, Call } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import MISRARule from "../../MISRARule.js";
3
+ import Query from "@specs-feup/lara/api/weaver/Query.js";
4
+ import { MISRATransformationReport, MISRATransformationType } from "../../MISRA.js";
5
+ import { getParamReferences } from "../../utils/utils.js";
6
+ export default class Rule_2_7_UnusedParameters extends MISRARule {
7
+ constructor(context) {
8
+ super("2.7", context);
9
+ }
10
+ getUnusedParams(func) {
11
+ return func.params.filter(param => getParamReferences(param, func).length === 0);
12
+ }
13
+ getUsedParams(func) {
14
+ return func.params.filter(param => getParamReferences(param, func).length > 0);
15
+ }
16
+ getUsedParamsPositions(func) {
17
+ let result = [];
18
+ for (let i = 0; i < func.params.length; i++) {
19
+ const param = func.params[i];
20
+ if (Query.searchFrom(func, Varref, { decl: jp => jp?.astId === param.astId }).get().length > 0) {
21
+ result.push(i);
22
+ }
23
+ }
24
+ return result;
25
+ }
26
+ match($jp, logErrors = false) {
27
+ if (!($jp instanceof FunctionJp && $jp.isImplementation))
28
+ return false;
29
+ const unusedParams = this.getUnusedParams($jp);
30
+ if (logErrors) {
31
+ unusedParams.forEach(param => this.logMISRAError(param, `Parameter '${param.name}' is unused in function ${$jp.name}.`));
32
+ }
33
+ return unusedParams.length > 0;
34
+ }
35
+ transform($jp) {
36
+ if (!this.match($jp))
37
+ return new MISRATransformationReport(MISRATransformationType.NoChange);
38
+ const usedParams = this.getUsedParams($jp);
39
+ const usedParamsPositions = this.getUsedParamsPositions($jp);
40
+ const calls = Query.search(Call, { function: jp => jp.astId === $jp.astId }).get();
41
+ $jp.setParams(usedParams);
42
+ for (const funcDecl of $jp.declarationJps) {
43
+ funcDecl.setParams(usedParams);
44
+ }
45
+ for (const call of calls) {
46
+ const newArgs = usedParamsPositions.map(i => call.args[i]);
47
+ const newCall = $jp.newCall(newArgs);
48
+ call.replaceWith(newCall);
49
+ }
50
+ return new MISRATransformationReport(MISRATransformationType.DescendantChange);
51
+ }
52
+ }
53
+ //# sourceMappingURL=Rule_2_7_UnusedParameters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rule_2_7_UnusedParameters.js","sourceRoot":"","sources":["../../../src/rules/Section2_UnusedCode/Rule_2_7_UnusedParameters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { Joinpoint } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import MISRARule from "../../MISRARule.js";
3
+ import MISRAContext from "../../MISRAContext.js";
4
+ import { MISRATransformationReport } from "../../MISRA.js";
5
+ /**
6
+ * MISRA Rule 3.1:
7
+ */
8
+ export default class Rule_3_1_CommentSequences extends MISRARule {
9
+ constructor(context: MISRAContext);
10
+ match($jp: Joinpoint, logErrors?: boolean): boolean;
11
+ transform($jp: Joinpoint): MISRATransformationReport;
12
+ }
13
+ //# sourceMappingURL=Rule_3_1_CommentSequences.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rule_3_1_CommentSequences.d.ts","sourceRoot":"","sources":["../../../src/rules/Section3_Comments/Rule_3_1_CommentSequences.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,SAAS,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,YAAY,MAAM,uBAAuB,CAAC;AAEjD,OAAO,EAAE,yBAAyB,EAA2B,MAAM,gBAAgB,CAAC;AAEpF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,yBAA0B,SAAQ,SAAS;gBAEhD,OAAO,EAAE,YAAY;IAIjC,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO;IAa1D,SAAS,CAAC,GAAG,EAAE,SAAS,GAAG,yBAAyB;CAYvD"}
@@ -0,0 +1,32 @@
1
+ import MISRARule from "../../MISRARule.js";
2
+ import { isInlineComment, getComments } from "../../utils/utils.js";
3
+ import { MISRATransformationReport, MISRATransformationType } from "../../MISRA.js";
4
+ /**
5
+ * MISRA Rule 3.1:
6
+ */
7
+ export default class Rule_3_1_CommentSequences extends MISRARule {
8
+ constructor(context) {
9
+ super("3.1", context);
10
+ }
11
+ match($jp, logErrors = false) {
12
+ const invalidComments = getComments($jp).filter(comment => (isInlineComment(comment) && /(\/\*)/g.test(comment.text)) ||
13
+ (!isInlineComment(comment) && /(\/\/|\/\*)/g.test(comment.text)));
14
+ if (logErrors) {
15
+ invalidComments.forEach(comment => this.logMISRAError(comment, `Comment ${comment.text} contains invalid character sequences.`));
16
+ }
17
+ return invalidComments.length > 0;
18
+ }
19
+ transform($jp) {
20
+ if (!this.match($jp))
21
+ return new MISRATransformationReport(MISRATransformationType.NoChange);
22
+ const comments = getComments($jp);
23
+ for (const comment of comments) {
24
+ const invalidSymbols = isInlineComment(comment) ? /(\/\*)/g : /(\/\/|\/\*)/g;
25
+ const newText = comment.text.replace(invalidSymbols, '');
26
+ comment.setText(newText);
27
+ }
28
+ return new MISRATransformationReport(MISRATransformationType.DescendantChange);
29
+ ;
30
+ }
31
+ }
32
+ //# sourceMappingURL=Rule_3_1_CommentSequences.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rule_3_1_CommentSequences.js","sourceRoot":"","sources":["../../../src/rules/Section3_Comments/Rule_3_1_CommentSequences.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAEpF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,yBAA0B,SAAQ,SAAS;IAE5D,YAAY,OAAqB;QAC7B,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,GAAc,EAAE,YAAqB,KAAK;QAC5C,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CACtD,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1D,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEtE,IAAI,SAAS,EAAE,CAAC;YACZ,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAC9B,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,WAAW,OAAO,CAAC,IAAI,wCAAwC,CAAC,CAC/F,CAAA;QACL,CAAC;QACD,OAAO,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;IACtC,CAAC;IAED,SAAS,CAAC,GAAc;QACpB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YAChB,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAE3E,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAClC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,cAAc,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC;YAC7E,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YACzD,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,CAAC;QAAA,CAAC;IACpF,CAAC;CACJ"}
@@ -0,0 +1,10 @@
1
+ import { Joinpoint } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import MISRARule from "../../MISRARule.js";
3
+ import MISRAContext from "../../MISRAContext.js";
4
+ import { MISRATransformationReport } from "../../MISRA.js";
5
+ export default class Rule_3_2_LineSplicing extends MISRARule {
6
+ constructor(context: MISRAContext);
7
+ match($jp: Joinpoint, logErrors?: boolean): boolean;
8
+ transform($jp: Joinpoint): MISRATransformationReport;
9
+ }
10
+ //# sourceMappingURL=Rule_3_2_LineSplicing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rule_3_2_LineSplicing.d.ts","sourceRoot":"","sources":["../../../src/rules/Section3_Comments/Rule_3_2_LineSplicing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAChE,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,YAAY,MAAM,uBAAuB,CAAC;AAEjD,OAAO,EAAE,yBAAyB,EAA2B,MAAM,gBAAgB,CAAC;AAEpF,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,SAAS;gBAE5C,OAAO,EAAE,YAAY;IAIjC,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO;IAY1D,SAAS,CAAC,GAAG,EAAE,SAAS,GAAG,yBAAyB;CAWvD"}
@@ -0,0 +1,26 @@
1
+ import MISRARule from "../../MISRARule.js";
2
+ import { isInlineComment, getComments } from "../../utils/utils.js";
3
+ import { MISRATransformationReport, MISRATransformationType } from "../../MISRA.js";
4
+ export default class Rule_3_2_LineSplicing extends MISRARule {
5
+ constructor(context) {
6
+ super("3.2", context);
7
+ }
8
+ match($jp, logErrors = false) {
9
+ const invalidComments = getComments($jp).filter(comment => (isInlineComment(comment) && /\/\n/g.test(comment.text)));
10
+ if (logErrors) {
11
+ invalidComments.forEach(comment => this.logMISRAError(comment, `Comment ${comment.text} contains invalid character sequences.`));
12
+ }
13
+ return invalidComments.length > 0;
14
+ }
15
+ transform($jp) {
16
+ if (!this.match($jp))
17
+ return new MISRATransformationReport(MISRATransformationType.NoChange);
18
+ const comments = getComments($jp);
19
+ for (const comment of comments) {
20
+ const newText = comment.text.replace(/\/\n/g, '');
21
+ comment.setText(newText);
22
+ }
23
+ return new MISRATransformationReport(MISRATransformationType.DescendantChange);
24
+ }
25
+ }
26
+ //# sourceMappingURL=Rule_3_2_LineSplicing.js.map