@specs-feup/clava-misra 1.0.2 → 1.0.3

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 (322) hide show
  1. package/.gitignore +8 -0
  2. package/README.md +53 -19
  3. package/dist/MISRA.d.ts +28 -10
  4. package/dist/MISRA.d.ts.map +1 -1
  5. package/dist/MISRA.js +30 -10
  6. package/dist/MISRA.js.map +1 -1
  7. package/dist/MISRAContext.d.ts +65 -11
  8. package/dist/MISRAContext.d.ts.map +1 -1
  9. package/dist/MISRAContext.js +131 -35
  10. package/dist/MISRAContext.js.map +1 -1
  11. package/dist/MISRARule.d.ts +38 -25
  12. package/dist/MISRARule.d.ts.map +1 -1
  13. package/dist/MISRARule.js +40 -18
  14. package/dist/MISRARule.js.map +1 -1
  15. package/dist/MISRATool.d.ts +39 -5
  16. package/dist/MISRATool.d.ts.map +1 -1
  17. package/dist/MISRATool.js +102 -46
  18. package/dist/MISRATool.js.map +1 -1
  19. package/dist/StandardGuideline.d.ts +22 -0
  20. package/dist/StandardGuideline.d.ts.map +1 -0
  21. package/dist/StandardGuideline.js +12 -0
  22. package/dist/StandardGuideline.js.map +1 -0
  23. package/dist/ast-visitor/Context.d.ts +11 -0
  24. package/dist/ast-visitor/Context.d.ts.map +1 -0
  25. package/dist/ast-visitor/Context.js +15 -0
  26. package/dist/ast-visitor/Context.js.map +1 -0
  27. package/dist/ast-visitor/Visit.d.ts +23 -0
  28. package/dist/ast-visitor/Visit.d.ts.map +1 -0
  29. package/dist/ast-visitor/Visit.js +18 -0
  30. package/dist/ast-visitor/Visit.js.map +1 -0
  31. package/dist/ast-visitor/VisitWithContext.d.ts +32 -0
  32. package/dist/ast-visitor/VisitWithContext.d.ts.map +1 -0
  33. package/dist/ast-visitor/VisitWithContext.js +26 -0
  34. package/dist/ast-visitor/VisitWithContext.js.map +1 -0
  35. package/dist/main.js +1 -1
  36. package/dist/main.js.map +1 -1
  37. package/dist/rules/Section13_SideEffects/Rule_13_6_SafeSizeOfOperand.d.ts +27 -0
  38. package/dist/rules/Section13_SideEffects/Rule_13_6_SafeSizeOfOperand.d.ts.map +1 -0
  39. package/dist/rules/Section13_SideEffects/Rule_13_6_SafeSizeOfOperand.js +98 -0
  40. package/dist/rules/Section13_SideEffects/Rule_13_6_SafeSizeOfOperand.js.map +1 -0
  41. package/dist/rules/Section16_SwitchStatements/Rule_16_2_TopLevelSwitch.d.ts +45 -6
  42. package/dist/rules/Section16_SwitchStatements/Rule_16_2_TopLevelSwitch.d.ts.map +1 -1
  43. package/dist/rules/Section16_SwitchStatements/Rule_16_2_TopLevelSwitch.js +91 -8
  44. package/dist/rules/Section16_SwitchStatements/Rule_16_2_TopLevelSwitch.js.map +1 -1
  45. package/dist/rules/Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.d.ts +15 -5
  46. package/dist/rules/Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.d.ts.map +1 -1
  47. package/dist/rules/Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.js +20 -6
  48. package/dist/rules/Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.js.map +1 -1
  49. package/dist/rules/Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.d.ts +11 -5
  50. package/dist/rules/Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.d.ts.map +1 -1
  51. package/dist/rules/Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.js +13 -10
  52. package/dist/rules/Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.js.map +1 -1
  53. package/dist/rules/Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.d.ts +11 -6
  54. package/dist/rules/Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.d.ts.map +1 -1
  55. package/dist/rules/Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.js +19 -11
  56. package/dist/rules/Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.js.map +1 -1
  57. package/dist/rules/Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.d.ts +15 -5
  58. package/dist/rules/Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.d.ts.map +1 -1
  59. package/dist/rules/Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.js +24 -10
  60. package/dist/rules/Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.js.map +1 -1
  61. package/dist/rules/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.d.ts +22 -6
  62. package/dist/rules/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.d.ts.map +1 -1
  63. package/dist/rules/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.js +37 -10
  64. package/dist/rules/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.js.map +1 -1
  65. package/dist/rules/Section17_Functions/Rule_17_3_ImplicitFunction.d.ts +66 -0
  66. package/dist/rules/Section17_Functions/Rule_17_3_ImplicitFunction.d.ts.map +1 -0
  67. package/dist/rules/Section17_Functions/Rule_17_3_ImplicitFunction.js +209 -0
  68. package/dist/rules/Section17_Functions/Rule_17_3_ImplicitFunction.js.map +1 -0
  69. package/dist/rules/Section17_Functions/Rule_17_4_NonVoidReturn.d.ts +37 -12
  70. package/dist/rules/Section17_Functions/Rule_17_4_NonVoidReturn.d.ts.map +1 -1
  71. package/dist/rules/Section17_Functions/Rule_17_4_NonVoidReturn.js +112 -39
  72. package/dist/rules/Section17_Functions/Rule_17_4_NonVoidReturn.js.map +1 -1
  73. package/dist/rules/Section17_Functions/Rule_17_6_StaticArraySizeParam.d.ts +15 -5
  74. package/dist/rules/Section17_Functions/Rule_17_6_StaticArraySizeParam.d.ts.map +1 -1
  75. package/dist/rules/Section17_Functions/Rule_17_6_StaticArraySizeParam.js +21 -7
  76. package/dist/rules/Section17_Functions/Rule_17_6_StaticArraySizeParam.js.map +1 -1
  77. package/dist/rules/Section17_Functions/Rule_17_7_UnusedReturnValue.d.ts +11 -6
  78. package/dist/rules/Section17_Functions/Rule_17_7_UnusedReturnValue.d.ts.map +1 -1
  79. package/dist/rules/Section17_Functions/Rule_17_7_UnusedReturnValue.js +17 -8
  80. package/dist/rules/Section17_Functions/Rule_17_7_UnusedReturnValue.js.map +1 -1
  81. package/dist/rules/Section21-StandardLibraries/DisallowedStdLibFunctionRule.d.ts +105 -0
  82. package/dist/rules/Section21-StandardLibraries/DisallowedStdLibFunctionRule.d.ts.map +1 -0
  83. package/dist/rules/Section21-StandardLibraries/DisallowedStdLibFunctionRule.js +258 -0
  84. package/dist/rules/Section21-StandardLibraries/DisallowedStdLibFunctionRule.js.map +1 -0
  85. package/dist/rules/Section21-StandardLibraries/Rule_21_10_NoTimeDateFunctions.d.ts +25 -0
  86. package/dist/rules/Section21-StandardLibraries/Rule_21_10_NoTimeDateFunctions.d.ts.map +1 -0
  87. package/dist/rules/Section21-StandardLibraries/Rule_21_10_NoTimeDateFunctions.js +27 -0
  88. package/dist/rules/Section21-StandardLibraries/Rule_21_10_NoTimeDateFunctions.js.map +1 -0
  89. package/dist/rules/Section21-StandardLibraries/Rule_21_11_NoTgmathFunctions.d.ts +29 -0
  90. package/dist/rules/Section21-StandardLibraries/Rule_21_11_NoTgmathFunctions.d.ts.map +1 -0
  91. package/dist/rules/Section21-StandardLibraries/Rule_21_11_NoTgmathFunctions.js +31 -0
  92. package/dist/rules/Section21-StandardLibraries/Rule_21_11_NoTgmathFunctions.js.map +1 -0
  93. package/dist/rules/Section21-StandardLibraries/Rule_21_3_NoDynamicMemory.d.ts +25 -0
  94. package/dist/rules/Section21-StandardLibraries/Rule_21_3_NoDynamicMemory.d.ts.map +1 -0
  95. package/dist/rules/Section21-StandardLibraries/Rule_21_3_NoDynamicMemory.js +27 -0
  96. package/dist/rules/Section21-StandardLibraries/Rule_21_3_NoDynamicMemory.js.map +1 -0
  97. package/dist/rules/Section21-StandardLibraries/Rule_21_6_NoStdIOFunctions.d.ts +25 -0
  98. package/dist/rules/Section21-StandardLibraries/Rule_21_6_NoStdIOFunctions.d.ts.map +1 -0
  99. package/dist/rules/Section21-StandardLibraries/Rule_21_6_NoStdIOFunctions.js +27 -0
  100. package/dist/rules/Section21-StandardLibraries/Rule_21_6_NoStdIOFunctions.js.map +1 -0
  101. package/dist/rules/Section21-StandardLibraries/Rule_21_7_NoNumericStringConversions.d.ts +25 -0
  102. package/dist/rules/Section21-StandardLibraries/Rule_21_7_NoNumericStringConversions.d.ts.map +1 -0
  103. package/dist/rules/Section21-StandardLibraries/Rule_21_7_NoNumericStringConversions.js +27 -0
  104. package/dist/rules/Section21-StandardLibraries/Rule_21_7_NoNumericStringConversions.js.map +1 -0
  105. package/dist/rules/Section21-StandardLibraries/Rule_21_8_NoProcessControlFunctions.d.ts +30 -0
  106. package/dist/rules/Section21-StandardLibraries/Rule_21_8_NoProcessControlFunctions.d.ts.map +1 -0
  107. package/dist/rules/Section21-StandardLibraries/Rule_21_8_NoProcessControlFunctions.js +32 -0
  108. package/dist/rules/Section21-StandardLibraries/Rule_21_8_NoProcessControlFunctions.js.map +1 -0
  109. package/dist/rules/Section21-StandardLibraries/Rule_21_9_NoGenericSearchOrSort.d.ts +25 -0
  110. package/dist/rules/Section21-StandardLibraries/Rule_21_9_NoGenericSearchOrSort.d.ts.map +1 -0
  111. package/dist/rules/Section21-StandardLibraries/Rule_21_9_NoGenericSearchOrSort.js +27 -0
  112. package/dist/rules/Section21-StandardLibraries/Rule_21_9_NoGenericSearchOrSort.js.map +1 -0
  113. package/dist/rules/Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.d.ts +6 -14
  114. package/dist/rules/Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.d.ts.map +1 -1
  115. package/dist/rules/Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.js +17 -27
  116. package/dist/rules/Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.js.map +1 -1
  117. package/dist/rules/Section2_UnusedCode/Rule_2_4_UnusedTagDecl.d.ts +13 -7
  118. package/dist/rules/Section2_UnusedCode/Rule_2_4_UnusedTagDecl.d.ts.map +1 -1
  119. package/dist/rules/Section2_UnusedCode/Rule_2_4_UnusedTagDecl.js +31 -17
  120. package/dist/rules/Section2_UnusedCode/Rule_2_4_UnusedTagDecl.js.map +1 -1
  121. package/dist/rules/Section2_UnusedCode/Rule_2_6_UnusedLabels.d.ts +26 -7
  122. package/dist/rules/Section2_UnusedCode/Rule_2_6_UnusedLabels.d.ts.map +1 -1
  123. package/dist/rules/Section2_UnusedCode/Rule_2_6_UnusedLabels.js +32 -14
  124. package/dist/rules/Section2_UnusedCode/Rule_2_6_UnusedLabels.js.map +1 -1
  125. package/dist/rules/Section2_UnusedCode/Rule_2_7_UnusedParameters.d.ts +48 -6
  126. package/dist/rules/Section2_UnusedCode/Rule_2_7_UnusedParameters.d.ts.map +1 -1
  127. package/dist/rules/Section2_UnusedCode/Rule_2_7_UnusedParameters.js +84 -34
  128. package/dist/rules/Section2_UnusedCode/Rule_2_7_UnusedParameters.js.map +1 -1
  129. package/dist/rules/Section3_Comments/Rule_3_1_CommentSequences.d.ts +24 -5
  130. package/dist/rules/Section3_Comments/Rule_3_1_CommentSequences.d.ts.map +1 -1
  131. package/dist/rules/Section3_Comments/Rule_3_1_CommentSequences.js +27 -7
  132. package/dist/rules/Section3_Comments/Rule_3_1_CommentSequences.js.map +1 -1
  133. package/dist/rules/Section5_Identifiers/IdentifierRenameRule.d.ts +46 -0
  134. package/dist/rules/Section5_Identifiers/IdentifierRenameRule.d.ts.map +1 -0
  135. package/dist/rules/Section5_Identifiers/IdentifierRenameRule.js +40 -0
  136. package/dist/rules/Section5_Identifiers/IdentifierRenameRule.js.map +1 -0
  137. package/dist/rules/Section5_Identifiers/Rule_5_1_DistinctExternalIdentifiers.d.ts +25 -0
  138. package/dist/rules/Section5_Identifiers/Rule_5_1_DistinctExternalIdentifiers.d.ts.map +1 -0
  139. package/dist/rules/Section5_Identifiers/Rule_5_1_DistinctExternalIdentifiers.js +46 -0
  140. package/dist/rules/Section5_Identifiers/Rule_5_1_DistinctExternalIdentifiers.js.map +1 -0
  141. package/dist/rules/Section5_Identifiers/Rule_5_6_UniqueTypedefNames.d.ts +26 -0
  142. package/dist/rules/Section5_Identifiers/Rule_5_6_UniqueTypedefNames.d.ts.map +1 -0
  143. package/dist/rules/Section5_Identifiers/Rule_5_6_UniqueTypedefNames.js +54 -0
  144. package/dist/rules/Section5_Identifiers/Rule_5_6_UniqueTypedefNames.js.map +1 -0
  145. package/dist/rules/Section5_Identifiers/Rule_5_7_UniqueTagNames.d.ts +27 -0
  146. package/dist/rules/Section5_Identifiers/Rule_5_7_UniqueTagNames.d.ts.map +1 -0
  147. package/dist/rules/Section5_Identifiers/Rule_5_7_UniqueTagNames.js +55 -0
  148. package/dist/rules/Section5_Identifiers/Rule_5_7_UniqueTagNames.js.map +1 -0
  149. package/dist/rules/Section5_Identifiers/Rule_5_8_UniqueExternalLinkIdentifiers.d.ts +24 -0
  150. package/dist/rules/Section5_Identifiers/Rule_5_8_UniqueExternalLinkIdentifiers.d.ts.map +1 -0
  151. package/dist/rules/Section5_Identifiers/Rule_5_8_UniqueExternalLinkIdentifiers.js +42 -0
  152. package/dist/rules/Section5_Identifiers/Rule_5_8_UniqueExternalLinkIdentifiers.js.map +1 -0
  153. package/dist/rules/Section5_Identifiers/Rule_5_9_UniqueInternalLinkIdentifiers.d.ts +24 -0
  154. package/dist/rules/Section5_Identifiers/Rule_5_9_UniqueInternalLinkIdentifiers.d.ts.map +1 -0
  155. package/dist/rules/Section5_Identifiers/Rule_5_9_UniqueInternalLinkIdentifiers.js +42 -0
  156. package/dist/rules/Section5_Identifiers/Rule_5_9_UniqueInternalLinkIdentifiers.js.map +1 -0
  157. package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_6_SingleExternalDefinition.d.ts +35 -0
  158. package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_6_SingleExternalDefinition.d.ts.map +1 -0
  159. package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_6_SingleExternalDefinition.js +98 -0
  160. package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_6_SingleExternalDefinition.js.map +1 -0
  161. package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_7_RestrictExternalLinkage.d.ts +35 -0
  162. package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_7_RestrictExternalLinkage.d.ts.map +1 -0
  163. package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_7_RestrictExternalLinkage.js +76 -0
  164. package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_7_RestrictExternalLinkage.js.map +1 -0
  165. package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_9_BlockScopeDefinition.d.ts +32 -0
  166. package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_9_BlockScopeDefinition.d.ts.map +1 -0
  167. package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_9_BlockScopeDefinition.js +57 -0
  168. package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_9_BlockScopeDefinition.js.map +1 -0
  169. package/dist/rules/UserConfigurableRule.d.ts +55 -0
  170. package/dist/rules/UserConfigurableRule.d.ts.map +1 -0
  171. package/dist/rules/UserConfigurableRule.js +16 -0
  172. package/dist/rules/UserConfigurableRule.js.map +1 -0
  173. package/dist/rules/index.d.ts +11 -18
  174. package/dist/rules/index.d.ts.map +1 -1
  175. package/dist/rules/index.js +47 -7
  176. package/dist/rules/index.js.map +1 -1
  177. package/dist/tests/Section17_Functions/misra_config.json +10 -0
  178. package/dist/tests/Section21-StandardLibraries/misra_config.json +88 -0
  179. package/dist/tests/Section21-StandardLibraries/problematic_misra_config.json +19 -0
  180. package/dist/tests/utils.d.ts +6 -3
  181. package/dist/tests/utils.d.ts.map +1 -1
  182. package/dist/tests/utils.js +33 -7
  183. package/dist/tests/utils.js.map +1 -1
  184. package/dist/utils/CallUtils.d.ts +15 -0
  185. package/dist/utils/CallUtils.d.ts.map +1 -0
  186. package/dist/utils/CallUtils.js +34 -0
  187. package/dist/utils/CallUtils.js.map +1 -0
  188. package/dist/utils/CommentUtils.d.ts +21 -0
  189. package/dist/utils/CommentUtils.d.ts.map +1 -0
  190. package/dist/utils/CommentUtils.js +27 -0
  191. package/dist/utils/CommentUtils.js.map +1 -0
  192. package/dist/utils/FileUtils.d.ts +51 -0
  193. package/dist/utils/FileUtils.d.ts.map +1 -0
  194. package/dist/utils/FileUtils.js +121 -0
  195. package/dist/utils/FileUtils.js.map +1 -0
  196. package/dist/utils/FunctionUtils.d.ts +25 -0
  197. package/dist/utils/FunctionUtils.d.ts.map +1 -0
  198. package/dist/utils/FunctionUtils.js +65 -0
  199. package/dist/utils/FunctionUtils.js.map +1 -0
  200. package/dist/utils/IdentifierUtils.d.ts +14 -0
  201. package/dist/utils/IdentifierUtils.d.ts.map +1 -0
  202. package/dist/utils/IdentifierUtils.js +87 -0
  203. package/dist/utils/IdentifierUtils.js.map +1 -0
  204. package/dist/utils/JoinpointUtils.d.ts +19 -0
  205. package/dist/utils/JoinpointUtils.d.ts.map +1 -0
  206. package/dist/utils/JoinpointUtils.js +46 -0
  207. package/dist/utils/JoinpointUtils.js.map +1 -0
  208. package/dist/utils/ProgramUtils.d.ts +14 -0
  209. package/dist/utils/ProgramUtils.d.ts.map +1 -0
  210. package/dist/utils/ProgramUtils.js +72 -0
  211. package/dist/utils/ProgramUtils.js.map +1 -0
  212. package/dist/utils/SwitchUtils.d.ts +21 -0
  213. package/dist/utils/SwitchUtils.d.ts.map +1 -0
  214. package/dist/utils/SwitchUtils.js +47 -0
  215. package/dist/utils/SwitchUtils.js.map +1 -0
  216. package/dist/utils/TypeDeclUtils.d.ts +35 -0
  217. package/dist/utils/TypeDeclUtils.d.ts.map +1 -0
  218. package/dist/utils/TypeDeclUtils.js +78 -0
  219. package/dist/utils/TypeDeclUtils.js.map +1 -0
  220. package/dist/utils/VarUtils.d.ts +19 -0
  221. package/dist/utils/VarUtils.d.ts.map +1 -0
  222. package/dist/utils/VarUtils.js +59 -0
  223. package/dist/utils/VarUtils.js.map +1 -0
  224. package/package.json +16 -6
  225. package/src/MISRA.ts +33 -17
  226. package/src/MISRAContext.ts +128 -30
  227. package/src/MISRARule.ts +61 -29
  228. package/src/MISRATool.ts +108 -42
  229. package/src/StandardGuideline.ts +23 -0
  230. package/src/ast-visitor/Context.ts +16 -0
  231. package/src/ast-visitor/Visit.ts +26 -0
  232. package/src/ast-visitor/VisitWithContext.ts +42 -0
  233. package/src/main.ts +1 -1
  234. package/src/rules/Section13_SideEffects/Rule_13_6_SafeSizeOfOperand.ts +114 -0
  235. package/src/rules/Section16_SwitchStatements/Rule_16_2_TopLevelSwitch.ts +103 -13
  236. package/src/rules/Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.ts +24 -10
  237. package/src/rules/Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.ts +17 -8
  238. package/src/rules/Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.ts +20 -12
  239. package/src/rules/Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.ts +23 -12
  240. package/src/rules/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.ts +44 -13
  241. package/src/rules/Section17_Functions/Rule_17_3_ImplicitFunction.ts +153 -104
  242. package/src/rules/Section17_Functions/Rule_17_4_NonVoidReturn.ts +114 -44
  243. package/src/rules/Section17_Functions/Rule_17_6_StaticArraySizeParam.ts +27 -10
  244. package/src/rules/Section17_Functions/Rule_17_7_UnusedReturnValue.ts +20 -12
  245. package/src/rules/Section21-StandardLibraries/DisallowedStdLibFunctionRule.ts +317 -0
  246. package/src/rules/Section21-StandardLibraries/Rule_21_10_NoTimeDateFunctions.ts +30 -0
  247. package/src/rules/Section21-StandardLibraries/Rule_21_11_NoTgmathFunctions.ts +35 -0
  248. package/src/rules/Section21-StandardLibraries/Rule_21_3_NoDynamicMemory.ts +30 -0
  249. package/src/rules/Section21-StandardLibraries/Rule_21_6_NoStdIOFunctions.ts +30 -0
  250. package/src/rules/Section21-StandardLibraries/Rule_21_7_NoNumericStringConversions.ts +29 -0
  251. package/src/rules/Section21-StandardLibraries/Rule_21_8_NoProcessControlFunctions.ts +36 -0
  252. package/src/rules/Section21-StandardLibraries/Rule_21_9_NoGenericSearchOrSort.ts +30 -0
  253. package/src/rules/Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.ts +14 -29
  254. package/src/rules/Section2_UnusedCode/Rule_2_4_UnusedTagDecl.ts +33 -19
  255. package/src/rules/Section2_UnusedCode/Rule_2_6_UnusedLabels.ts +33 -20
  256. package/src/rules/Section2_UnusedCode/Rule_2_7_UnusedParameters.ts +90 -45
  257. package/src/rules/Section3_Comments/Rule_3_1_CommentSequences.ts +27 -8
  258. package/src/rules/Section5_Identifiers/IdentifierRenameRule.ts +63 -0
  259. package/src/rules/Section5_Identifiers/Rule_5_1_DistinctExternalIdentifiers.ts +52 -0
  260. package/src/rules/Section5_Identifiers/Rule_5_6_UniqueTypedefNames.ts +62 -0
  261. package/src/rules/Section5_Identifiers/Rule_5_7_UniqueTagNames.ts +61 -0
  262. package/src/rules/Section5_Identifiers/Rule_5_8_UniqueExternalLinkIdentifiers.ts +47 -0
  263. package/src/rules/Section5_Identifiers/Rule_5_9_UniqueInternalLinkIdentifiers.ts +47 -0
  264. package/src/rules/Section8_DeclarationsAndDefinitions/Rule_8_6_SingleExternalDefinition.ts +118 -0
  265. package/src/rules/Section8_DeclarationsAndDefinitions/Rule_8_7_RestrictExternalLinkage.ts +89 -0
  266. package/src/rules/Section8_DeclarationsAndDefinitions/Rule_8_9_BlockScopeDefinition.ts +65 -0
  267. package/src/rules/UserConfigurableRule.ts +60 -0
  268. package/src/rules/index.ts +45 -7
  269. package/src/tests/Section13_SideEffects/Rule_13_6_SafeSizeOfOperand.test.ts +114 -0
  270. package/src/tests/Section16_SwitchStatements/Rule_16_2_TopLevelSwitch.test.ts +7 -5
  271. package/src/tests/Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.test.ts +40 -13
  272. package/src/tests/Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.test.ts +10 -12
  273. package/src/tests/Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.test.ts +5 -5
  274. package/src/tests/Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.test.ts +5 -5
  275. package/src/tests/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.test.ts +5 -5
  276. package/src/tests/Section17_Functions/Rule_17_3_ImplicitFunctions.test.ts +68 -40
  277. package/src/tests/Section17_Functions/Rule_17_3_ImplicitFunctions_MissingConfig.test.ts +98 -0
  278. package/src/tests/Section17_Functions/Rule_17_3_ImplicitFunctions_ProblematicConfig.test.ts +71 -0
  279. package/src/tests/Section17_Functions/Rule_17_4_NonVoidReturn.test.ts +103 -49
  280. package/src/tests/Section17_Functions/Rule_17_4_NonVoidReturn_MissingConfig.test.ts +7 -7
  281. package/src/tests/Section17_Functions/Rule_17_6_StaticArraySizeParam.test.ts +36 -7
  282. package/src/tests/Section17_Functions/Rule_17_7_UnusedReturnValue.test.ts +25 -21
  283. package/src/tests/Section17_Functions/misra_config.json +4 -3
  284. package/src/tests/Section21-StandardLibraries/Rule_21_10_NoTimeDateFunctions.test.ts +62 -0
  285. package/src/tests/Section21-StandardLibraries/Rule_21_11_NoTgmathFunctions.test.ts +67 -0
  286. package/src/tests/Section21-StandardLibraries/Rule_21_3_NoDynamicMemory.test.ts +84 -0
  287. package/src/tests/Section21-StandardLibraries/Rule_21_3_NoDynamicMemory_MissingConfig.test.ts +33 -0
  288. package/src/tests/Section21-StandardLibraries/Rule_21_3_NoDynamicMemory_ProblematicConfig.test.ts +71 -0
  289. package/src/tests/Section21-StandardLibraries/Rule_21_6_NoStdIOFunctions.test.ts +63 -0
  290. package/src/tests/Section21-StandardLibraries/Rule_21_7_NoNumericStringConversions.test.ts +91 -0
  291. package/src/tests/Section21-StandardLibraries/Rule_21_8_NoProcessControlFunctions.test.ts +65 -0
  292. package/src/tests/Section21-StandardLibraries/Rule_21_9_NoGenericSearchOrSort.test.ts +89 -0
  293. package/src/tests/Section21-StandardLibraries/misra_config.json +88 -0
  294. package/src/tests/Section21-StandardLibraries/problematic_misra_config.json +19 -0
  295. package/src/tests/Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.test.ts +148 -113
  296. package/src/tests/Section2_UnusedCode/Rule_2_4_UnusedTagDecl.test.ts +243 -163
  297. package/src/tests/Section2_UnusedCode/Rule_2_6_UnusedLabels.test.ts +32 -20
  298. package/src/tests/Section2_UnusedCode/Rule_2_7_UnusedParameters.test.ts +36 -30
  299. package/src/tests/Section3_Comments/Rule_3_1_CommentSequences.test.ts +37 -8
  300. package/src/tests/Section5_Identifiers/Rule_5_1_DistinctExternalIdentifiers.test.ts +78 -0
  301. package/src/tests/Section5_Identifiers/Rule_5_6_UniqueTypedefNames.test.ts +120 -0
  302. package/src/tests/Section5_Identifiers/Rule_5_7_UniqueTagNames.test.ts +51 -0
  303. package/src/tests/Section5_Identifiers/Rule_5_8_UniqueExternalLinkIdentifiers.test.ts +73 -0
  304. package/src/tests/Section5_Identifiers/Rule_5_9_UniqueInternalLinkIdentifiers.test.ts +97 -0
  305. package/src/tests/Section8_DeclarationsAndDefinitions/Rule_8_6_SingleExternalDefinition.test.ts +160 -0
  306. package/src/tests/Section8_DeclarationsAndDefinitions/Rule_8_7_RestrictExternalLinkage.test.ts +46 -0
  307. package/src/tests/Section8_DeclarationsAndDefinitions/Rule_8_9_BlockScopeDefinition.test.ts +69 -0
  308. package/src/tests/utils.ts +32 -7
  309. package/src/utils/CallUtils.ts +40 -0
  310. package/src/utils/CommentUtils.ts +29 -0
  311. package/src/utils/FileUtils.ts +141 -0
  312. package/src/utils/FunctionUtils.ts +75 -0
  313. package/src/utils/IdentifierUtils.ts +94 -0
  314. package/src/utils/JoinpointUtils.ts +53 -0
  315. package/src/utils/ProgramUtils.ts +83 -0
  316. package/src/utils/SwitchUtils.ts +52 -0
  317. package/src/utils/TypeDeclUtils.ts +89 -0
  318. package/src/utils/VarUtils.ts +70 -0
  319. package/tsconfig.json +2 -1
  320. package/src/rules/Section20-PreprocessingDirectives/Rule_20_2_InvalidHeaderFileName.ts +0 -120
  321. package/src/rules/Section3_Comments/Rule_3_2_LineSplicing.ts +0 -36
  322. package/src/utils/utils.ts +0 -280
@@ -1 +1 @@
1
- {"version":3,"file":"MISRAContext.js","sourceRoot":"","sources":["../src/MISRAContext.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MISRAContext.js","sourceRoot":"","sources":["../src/MISRAContext.ts"],"names":[],"mappings":"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"}
@@ -1,43 +1,48 @@
1
1
  import { Joinpoint } from "@specs-feup/clava/api/Joinpoints.js";
2
2
  import MISRAContext from "./MISRAContext.js";
3
- import { MISRATransformationReport } from "./MISRA.js";
3
+ import { AnalysisType, MISRATransformationReport, MISRATransformationResults } from "./MISRA.js";
4
+ import { LaraJoinPoint } from "@specs-feup/lara/api/LaraJoinPoint.js";
5
+ import StandardGuideline from "./StandardGuideline.js";
4
6
  /**
5
7
  * Represents a MISRA Rule that detects and corrects violations in the code according to MISRA standards.
6
8
  *
7
- * Need to implement:
9
+ * Need to implement/define:
10
+ * - analysisType
11
+ * - name()
8
12
  * - match($jp, logErrors)
9
- * - transform($jp)
13
+ * - apply($jp)
10
14
  */
11
- export default abstract class MISRARule {
15
+ export default abstract class MISRARule extends StandardGuideline<MISRATransformationResults, MISRAContext> {
12
16
  /**
13
- * Unique identifier for the MISRA rule.
17
+ * A positive integer starting from 1 that indicates the rule's priority, determining the order in which rules are applied.
18
+ * By default, a rule has the lowest priority unless overridden.
14
19
  */
15
- readonly ruleID: string;
20
+ readonly priority: number;
16
21
  /**
17
- * MISRA context for error tracking and rule transformations state
22
+ * Scope of analysis: single unit or entire system.
18
23
  */
19
- protected context: MISRAContext;
24
+ abstract readonly analysisType: AnalysisType;
25
+ /**
26
+ * Standards to which this rule applies to
27
+ */
28
+ protected readonly appliesTo: Set<string>;
20
29
  /**
21
30
  *
22
- * @param ruleID - Unique identifier for the MISRA-C rule
23
31
  * @param context - MISRA context for error tracking and rule transformations state
24
32
  */
25
- constructor(ruleID: string, context: MISRAContext);
33
+ constructor(context: MISRAContext);
26
34
  /**
27
- * Checks if the joinpoint violates the rule
28
- *
29
- * @param $jp - Joinpoint to analyze
30
- * @param logErrors - [logErrors=false] - Whether to log errors if a violation is detected
31
- * @returns Returns true if the joinpoint violates the rule, false otherwise
35
+ * @returns Initial value stored in the shared context
32
36
  */
33
- abstract match($jp: Joinpoint, logErrors: boolean): boolean;
37
+ initialValue(): MISRATransformationResults;
34
38
  /**
35
- * Transforms the joinpoint to comply with the MISRA-C rule
36
- *
37
- * @param $jp - Joinpoint to transform
38
- * @returns Report detailing the transformation result
39
+ * @returns Rule identifier according to MISRA-C:2012
40
+ */
41
+ abstract get name(): string;
42
+ /**
43
+ * An alias for 'name'
39
44
  */
40
- abstract transform($jp: Joinpoint): MISRATransformationReport;
45
+ get ruleID(): string;
41
46
  /**
42
47
  * Logs a MISRA-C rule violation error
43
48
  *
@@ -46,11 +51,19 @@ export default abstract class MISRARule {
46
51
  */
47
52
  protected logMISRAError($jp: Joinpoint, msg: string): void;
48
53
  /**
49
- * Logs a warning from automatic MISRA-C correction, which may change the program's behavior
54
+ * Verifies if the rule applies to the standard being used
55
+ */
56
+ protected appliesToCurrentStandard(): boolean;
57
+ /**
58
+ * Rebuilds the program based on the current AST, clears stored data in the shared context, and resets all caches
59
+ */
60
+ protected rebuildProgram(): void;
61
+ /**
62
+ * Transforms the joinpoint to comply with the MISRA-C rule
50
63
  *
51
- * @param $jp - The joinpoint where the correction was applied
52
- * @param msg - Description of the warning
64
+ * @param $jp - Joinpoint to transform
65
+ * @returns Report detailing the transformation result
53
66
  */
54
- protected logMISRAWarning($jp: Joinpoint, msg: string): void;
67
+ abstract apply($jp: LaraJoinPoint): MISRATransformationReport;
55
68
  }
56
69
  //# sourceMappingURL=MISRARule.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MISRARule.d.ts","sourceRoot":"","sources":["../src/MISRARule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAChE,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEvD;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,SAAS;IACnC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,YAAY,CAAC;IAEhC;;;;OAIG;gBACS,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY;IAKjD;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO;IAE3D;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,GAAG,yBAAyB;IAE7D;;;;;OAKG;IACH,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAC,MAAM,GAAG,IAAI;IAQzD;;;;;OAKG;IACH,SAAS,CAAC,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAC,MAAM,GAAG,IAAI;CAO9D"}
1
+ {"version":3,"file":"MISRARule.d.ts","sourceRoot":"","sources":["../src/MISRARule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAW,MAAM,qCAAqC,CAAC;AACzE,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AACjG,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAItE,OAAO,iBAAiB,MAAM,wBAAwB,CAAC;AAEvD;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,SAAU,SAAQ,iBAAiB,CAAC,0BAA0B,EAAE,YAAY,CAAC;IACvG;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAoB;IAE7C;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IAE7C;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAkC;IAE3E;;;OAGG;gBACS,OAAO,EAAE,YAAY;IAIjC;;OAEG;IACM,YAAY,IAAI,0BAA0B;IAInD;;OAEG;IACH,aAAsB,IAAI,IAAI,MAAM,CAAC;IAErC;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED;;;;;OAKG;IACH,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAC,MAAM,GAAG,IAAI;IAIzD;;OAEG;IACH,SAAS,CAAC,wBAAwB,IAAI,OAAO;IAI7C;;OAEG;IACH,SAAS,CAAC,cAAc;IAMxB;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,yBAAyB;CAChE"}
package/dist/MISRARule.js CHANGED
@@ -1,27 +1,44 @@
1
+ import Clava from "@specs-feup/clava/api/clava/Clava.js";
2
+ import Query from "@specs-feup/lara/api/weaver/Query.js";
3
+ import { resetCaches } from "./utils/ProgramUtils.js";
4
+ import StandardGuideline from "./StandardGuideline.js";
1
5
  /**
2
6
  * Represents a MISRA Rule that detects and corrects violations in the code according to MISRA standards.
3
7
  *
4
- * Need to implement:
8
+ * Need to implement/define:
9
+ * - analysisType
10
+ * - name()
5
11
  * - match($jp, logErrors)
6
- * - transform($jp)
12
+ * - apply($jp)
7
13
  */
8
- export default class MISRARule {
14
+ export default class MISRARule extends StandardGuideline {
9
15
  /**
10
- * Unique identifier for the MISRA rule.
16
+ * A positive integer starting from 1 that indicates the rule's priority, determining the order in which rules are applied.
17
+ * By default, a rule has the lowest priority unless overridden.
11
18
  */
12
- ruleID;
19
+ priority = Number.MAX_VALUE;
13
20
  /**
14
- * MISRA context for error tracking and rule transformations state
21
+ * Standards to which this rule applies to
15
22
  */
16
- context;
23
+ appliesTo = new Set(["c90", "c99", "c11"]);
17
24
  /**
18
25
  *
19
- * @param ruleID - Unique identifier for the MISRA-C rule
20
26
  * @param context - MISRA context for error tracking and rule transformations state
21
27
  */
22
- constructor(ruleID, context) {
23
- this.ruleID = ruleID;
24
- this.context = context;
28
+ constructor(context) {
29
+ super(context);
30
+ }
31
+ /**
32
+ * @returns Initial value stored in the shared context
33
+ */
34
+ initialValue() {
35
+ return new Map();
36
+ }
37
+ /**
38
+ * An alias for 'name'
39
+ */
40
+ get ruleID() {
41
+ return this.name;
25
42
  }
26
43
  /**
27
44
  * Logs a MISRA-C rule violation error
@@ -30,16 +47,21 @@ export default class MISRARule {
30
47
  * @param msg - Description of the violation
31
48
  */
32
49
  logMISRAError($jp, msg) {
33
- this.context.addMISRAError(this.ruleID, $jp, `MISRA-C Rule ${this.ruleID} violation at ${$jp.filepath}@${$jp.line}:${$jp.column}: ${msg}`);
50
+ this.context.addMISRAError(this.ruleID, $jp, msg);
34
51
  }
35
52
  /**
36
- * Logs a warning from automatic MISRA-C correction, which may change the program's behavior
37
- *
38
- * @param $jp - The joinpoint where the correction was applied
39
- * @param msg - Description of the warning
53
+ * Verifies if the rule applies to the standard being used
54
+ */
55
+ appliesToCurrentStandard() {
56
+ return this.appliesTo.has(Clava.getStandard());
57
+ }
58
+ /**
59
+ * Rebuilds the program based on the current AST, clears stored data in the shared context, and resets all caches
40
60
  */
41
- logMISRAWarning($jp, msg) {
42
- this.context.addMISRAWarning(this.ruleID, $jp, `Warning: MISRA-C Rule ${this.ruleID} correction at ${$jp.filepath}@${$jp.line}:${$jp.column}: ${msg}.`);
61
+ rebuildProgram() {
62
+ Query.root().rebuild();
63
+ this.context.resetStorage();
64
+ resetCaches();
43
65
  }
44
66
  }
45
67
  //# sourceMappingURL=MISRARule.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MISRARule.js","sourceRoot":"","sources":["../src/MISRARule.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,OAAgB,SAAS;IACnC;;OAEG;IACM,MAAM,CAAS;IAExB;;OAEG;IACO,OAAO,CAAe;IAEhC;;;;OAIG;IACH,YAAY,MAAc,EAAE,OAAqB;QAC7C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAmBD;;;;;OAKG;IACO,aAAa,CAAC,GAAc,EAAE,GAAU;QAC9C,IAAI,CAAC,OAAO,CAAC,aAAa,CACtB,IAAI,CAAC,MAAM,EACX,GAAG,EACH,gBAAgB,IAAI,CAAC,MAAM,iBAAiB,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAC/F,CAAA;IACL,CAAC;IAED;;;;;OAKG;IACO,eAAe,CAAC,GAAc,EAAE,GAAU;QAChD,IAAI,CAAC,OAAO,CAAC,eAAe,CACxB,IAAI,CAAC,MAAM,EACX,GAAG,EACH,yBAAyB,IAAI,CAAC,MAAM,kBAAkB,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,GAAG,CAC1G,CAAA;IACL,CAAC;CACJ"}
1
+ {"version":3,"file":"MISRARule.js","sourceRoot":"","sources":["../src/MISRARule.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,sCAAsC,CAAC;AACzD,OAAO,KAAK,MAAM,sCAAsC,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,iBAAiB,MAAM,wBAAwB,CAAC;AAEvD;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,OAAgB,SAAU,SAAQ,iBAA2D;IACvG;;;OAGG;IACM,QAAQ,GAAW,MAAM,CAAC,SAAS,CAAC;IAO7C;;OAEG;IACgB,SAAS,GAAgB,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAE3E;;;OAGG;IACH,YAAY,OAAqB;QAC7B,KAAK,CAAC,OAAO,CAAC,CAAC;IACnB,CAAC;IAED;;OAEG;IACM,YAAY;QACjB,OAAO,IAAI,GAAG,EAAE,CAAC;IACrB,CAAC;IAOD;;OAEG;IACH,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED;;;;;OAKG;IACO,aAAa,CAAC,GAAc,EAAE,GAAU;QAC9C,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACO,wBAAwB;QAC9B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACO,cAAc;QACnB,KAAK,CAAC,IAAI,EAAc,CAAC,OAAO,EAAE,CAAC;QACpC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAC5B,WAAW,EAAE,CAAC;IAClB,CAAC;CASJ"}
@@ -1,12 +1,46 @@
1
1
  import { FileJp, Program } from "@specs-feup/clava/api/Joinpoints.js";
2
- import { MISRAError } from "./MISRA.js";
2
+ import MISRAContext from "./MISRAContext.js";
3
3
  export default class MISRATool {
4
4
  #private;
5
- private static init;
6
- private static validateStdVersion;
5
+ static context: MISRAContext;
7
6
  static checkCompliance(startingPoint?: Program | FileJp): void;
8
- static applyCorrections(configFilePath?: string, startingPoint?: Program | FileJp): void;
7
+ /**
8
+ * Transforms the source code to comply with the coding guidelines.
9
+ * After the transformation, any violations that could not be fixed will be displayed along with their justification.
10
+ */
11
+ static correctViolations(): void;
12
+ /**
13
+ * Recursively transforms the AST using a pre-order traversal
14
+ *
15
+ * @param $jp AST node from which to start the visit.
16
+ * @returns Return true if any modifications were made (removal, replacement, or changes in descendants). Otherwise, returns false.
17
+ */
9
18
  private static transformAST;
10
- static getMISRAErrors(): MISRAError[];
19
+ private static init;
20
+ /**
21
+ * Selects applicable rules according to the analysis type. When not specified, both system and single translation unit rules are selected.
22
+ */
23
+ private static initRules;
24
+ /**
25
+ * Checks whether the provided standard version is valid and supported
26
+ */
27
+ private static validateStdVersion;
28
+ private static getArgValue;
29
+ /**
30
+ * Displays standard violations based on execution mode.
31
+ * - In detection mode, all violations are shown.
32
+ * - In correction mode, only the remaining violations are displayed
33
+ *
34
+ * @param mode execution mode
35
+ */
36
+ private static outputReport;
37
+ /**
38
+ * @returns Returns the number of identified violations.
39
+ */
40
+ static getErrorCount(): number;
41
+ /**
42
+ * @returns Returns the number of active errors linked to nodes that are still present in the AST after correction.
43
+ */
44
+ static getActiveErrorCount(): number;
11
45
  }
12
46
  //# sourceMappingURL=MISRATool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MISRATool.d.ts","sourceRoot":"","sources":["../src/MISRATool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAa,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAIjF,OAAO,EAAE,UAAU,EAA2B,MAAM,YAAY,CAAC;AAEjE,MAAM,CAAC,OAAO,OAAO,SAAS;;IAI1B,OAAO,CAAC,MAAM,CAAC,IAAI;IAMnB,OAAO,CAAC,MAAM,CAAC,kBAAkB;WAUnB,eAAe,CAAC,aAAa,GAAE,OAAO,GAAG,MAAgC;WAgBzE,gBAAgB,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,aAAa,GAAE,OAAO,GAAG,MAAgC;IA2BjH,OAAO,CAAC,MAAM,CAAC,YAAY;WAsBb,cAAc,IAAI,UAAU,EAAE;CAG/C"}
1
+ {"version":3,"file":"MISRATool.d.ts","sourceRoot":"","sources":["../src/MISRATool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAa,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAEjF,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAW7C,MAAM,CAAC,OAAO,OAAO,SAAS;;IAE1B,OAAc,OAAO,EAAE,YAAY,CAAC;WAItB,eAAe,CAAC,aAAa,GAAE,OAAO,GAAG,MAAgC;IAYvF;;;OAGG;WACW,iBAAiB;IAkB/B;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAsB3B,OAAO,CAAC,MAAM,CAAC,IAAI;IAOnB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,SAAS;IAKxB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IASjC,OAAO,CAAC,MAAM,CAAC,WAAW;IAe1B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAgB3B;;OAEG;WACW,aAAa,IAAI,MAAM;IAIrC;;OAEG;WACW,mBAAmB,IAAI,MAAM;CAG9C"}
package/dist/MISRATool.js CHANGED
@@ -1,68 +1,58 @@
1
1
  import Query from "@specs-feup/lara/api/weaver/Query.js";
2
- import { Program } from "@specs-feup/clava/api/Joinpoints.js";
3
- import misraRules from "./rules/index.js";
4
2
  import MISRAContext from "./MISRAContext.js";
5
3
  import { MISRATransformationType } from "./MISRA.js";
4
+ import Clava from "@specs-feup/clava/api/clava/Clava.js";
5
+ import { resetCaches } from "./utils/ProgramUtils.js";
6
+ import { selectRules } from "./rules/index.js";
7
+ var ExecutionMode;
8
+ (function (ExecutionMode) {
9
+ ExecutionMode[ExecutionMode["CORRECTION"] = 0] = "CORRECTION";
10
+ ExecutionMode[ExecutionMode["DETECTION"] = 1] = "DETECTION";
11
+ })(ExecutionMode || (ExecutionMode = {}));
6
12
  export default class MISRATool {
7
13
  static #misraRules;
8
- static #context;
9
- static init(startingPoint) {
10
- this.validateStdVersion(startingPoint);
11
- this.#context = new MISRAContext();
12
- this.#misraRules = misraRules(this.#context);
13
- }
14
- static validateStdVersion(startingPoint) {
15
- const allowedVersions = ["c90", "c99", "c11"];
16
- const stdVersion = startingPoint instanceof Program ? startingPoint.standard : startingPoint.root.standard;
17
- if (!allowedVersions.includes(stdVersion)) {
18
- console.error(`[Clava-MISRATool] Invalid --std value. Allowed values: ${allowedVersions.join(", ")}`);
19
- process.exit(1);
20
- }
21
- }
14
+ static context;
15
+ static #standards = new Set(["c90", "c99", "c11"]);
16
+ static #ruleTypes = new Set(["all", "single", "system"]);
22
17
  static checkCompliance(startingPoint = Query.root()) {
23
- this.init(startingPoint);
24
- const nodes = startingPoint.descendants;
18
+ this.init();
19
+ const nodes = [startingPoint, ...startingPoint.descendants];
25
20
  for (const node of nodes) {
26
21
  for (const rule of this.#misraRules) {
27
22
  rule.match(node, true);
28
23
  }
29
24
  }
30
- if (this.#context.errors.length > 0) {
31
- this.#context.printErrors();
32
- }
33
- else {
34
- console.log("[Clava-MISRATool] No MISRA-C violations detected.");
35
- }
25
+ this.outputReport(ExecutionMode.DETECTION);
36
26
  }
37
- static applyCorrections(configFilePath, startingPoint = Query.root()) {
38
- this.init(startingPoint);
27
+ /**
28
+ * Transforms the source code to comply with the coding guidelines.
29
+ * After the transformation, any violations that could not be fixed will be displayed along with their justification.
30
+ */
31
+ static correctViolations() {
32
+ this.init();
33
+ // Store config file in context, if provided
34
+ const configFilePath = this.getArgValue("config");
39
35
  if (configFilePath) {
40
- this.#context.config = configFilePath;
36
+ this.context.config = configFilePath;
41
37
  }
42
38
  let iteration = 0;
43
- let modified = false;
44
- do {
39
+ let modified = true;
40
+ while (modified) {
45
41
  console.log(`[Clava-MISRATool] Iteration #${++iteration}: Applying MISRA-C transformations...`);
46
- modified = this.transformAST(startingPoint);
47
- } while (modified);
48
- if (this.#context.errors.length === 0 && this.#context.warnings.length === 0) {
49
- console.log("[Clava-MISRATool] All detected violations were corrected.");
50
- }
51
- else {
52
- if (this.#context.warnings.length > 0) {
53
- console.log("\n[Clava-MISRATool] Warnings from automatic MISRA-C corrections (these may change the program's behavior):");
54
- this.#context.printWarnings();
55
- }
56
- if (this.#context.errors.length > 0) {
57
- console.log("\n[Clava-MISRATool] Remaining MISRA-C violations:");
58
- this.#context.printErrors();
59
- }
42
+ modified = this.transformAST(Query.root());
60
43
  }
44
+ this.outputReport(ExecutionMode.CORRECTION);
61
45
  }
46
+ /**
47
+ * Recursively transforms the AST using a pre-order traversal
48
+ *
49
+ * @param $jp AST node from which to start the visit.
50
+ * @returns Return true if any modifications were made (removal, replacement, or changes in descendants). Otherwise, returns false.
51
+ */
62
52
  static transformAST($jp) {
63
53
  let modified = false;
64
54
  for (const rule of this.#misraRules) {
65
- const transformReport = rule.transform($jp);
55
+ const transformReport = rule.apply($jp);
66
56
  if (transformReport.type !== MISRATransformationType.NoChange) {
67
57
  modified = true;
68
58
  if (transformReport.type === MISRATransformationType.Removal)
@@ -77,8 +67,74 @@ export default class MISRATool {
77
67
  }
78
68
  return modified;
79
69
  }
80
- static getMISRAErrors() {
81
- return this.#context.errors;
70
+ static init() {
71
+ this.validateStdVersion();
72
+ this.context = new MISRAContext();
73
+ resetCaches();
74
+ this.initRules();
75
+ }
76
+ /**
77
+ * Selects applicable rules according to the analysis type. When not specified, both system and single translation unit rules are selected.
78
+ */
79
+ static initRules() {
80
+ const typeStr = this.getArgValue("type", this.#ruleTypes) ?? "all";
81
+ this.#misraRules = selectRules(this.context, typeStr);
82
+ }
83
+ /**
84
+ * Checks whether the provided standard version is valid and supported
85
+ */
86
+ static validateStdVersion() {
87
+ const stdVersion = Query.root().standard;
88
+ if (!this.#standards.has(stdVersion)) {
89
+ console.error(`[Clava-MISRATool] Invalid -std value. Allowed values: ${[...this.#standards].join(", ")}`);
90
+ process.exit(1);
91
+ }
92
+ }
93
+ static getArgValue(field, validValues) {
94
+ const args = Clava.getData().get("argv");
95
+ if (!args)
96
+ return undefined;
97
+ const pair = args.split(/\s+/).find(arg => arg.startsWith(field + "="));
98
+ if (!pair)
99
+ return undefined;
100
+ const value = pair.split("=")[1];
101
+ if (validValues && !validValues.has(value)) {
102
+ console.error(`[Clava-MISRATool] Invalid '${field}' value. Allowed values: ${[...validValues].join(", ")}`);
103
+ process.exit(1);
104
+ }
105
+ return value;
106
+ }
107
+ /**
108
+ * Displays standard violations based on execution mode.
109
+ * - In detection mode, all violations are shown.
110
+ * - In correction mode, only the remaining violations are displayed
111
+ *
112
+ * @param mode execution mode
113
+ */
114
+ static outputReport(mode) {
115
+ const isDetection = mode === ExecutionMode.DETECTION;
116
+ const errorCount = isDetection ? this.getErrorCount() : this.getActiveErrorCount();
117
+ if (errorCount > 0) {
118
+ console.log(isDetection
119
+ ? `[Clava-MISRATool] Detected ${errorCount} MISRA-C violation${errorCount === 1 ? "" : "s"}:\n`
120
+ : `[Clava-MISRATool] ${errorCount} MISRA-C violation${errorCount === 1 ? "" : "s"} remain${errorCount === 1 ? "s" : ""} after transformation:\n`);
121
+ isDetection ? this.context.outputAllErrors() : this.context.outputActiveErrors();
122
+ }
123
+ else {
124
+ console.log(isDetection ? "[Clava-MISRATool] No MISRA-C violations detected.\n" : "[Clava-MISRATool] All detected violations were corrected.\n");
125
+ }
126
+ }
127
+ /**
128
+ * @returns Returns the number of identified violations.
129
+ */
130
+ static getErrorCount() {
131
+ return this.context.errors.length;
132
+ }
133
+ /**
134
+ * @returns Returns the number of active errors linked to nodes that are still present in the AST after correction.
135
+ */
136
+ static getActiveErrorCount() {
137
+ return this.context.activeErrors.length;
82
138
  }
83
139
  }
84
140
  //# sourceMappingURL=MISRATool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MISRATool.js","sourceRoot":"","sources":["../src/MISRATool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MISRATool.js","sourceRoot":"","sources":["../src/MISRATool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { Joinpoint } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import Context from "./ast-visitor/Context.js";
3
+ import VisitWithContext from "./ast-visitor/VisitWithContext.js";
4
+ /**
5
+ * Represents a standard guideline that detects and corrects violations in the code according to a particular coding standard.
6
+ *
7
+ * Need to implement/define:
8
+ * - initialValue()
9
+ * - match($jp, logErrors)
10
+ * - apply($jp)
11
+ */
12
+ export default abstract class StandardGuideline<T, C extends Context<T> = Context<T>> extends VisitWithContext<T, C> {
13
+ /**
14
+ * Checks if the joinpoint violates the guideline
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 guideline, false otherwise
19
+ */
20
+ abstract match($jp: Joinpoint, logErrors: boolean): boolean;
21
+ }
22
+ //# sourceMappingURL=StandardGuideline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StandardGuideline.d.ts","sourceRoot":"","sources":["../src/StandardGuideline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAChE,OAAO,OAAO,MAAM,0BAA0B,CAAC;AAC/C,OAAO,gBAAgB,MAAM,mCAAmC,CAAC;AAEjE;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,iBAAiB,CAAC,CAAC,EAAC,CAAC,SAAS,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAE,SAAQ,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC;IAE/G;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO;CAC9D"}
@@ -0,0 +1,12 @@
1
+ import VisitWithContext from "./ast-visitor/VisitWithContext.js";
2
+ /**
3
+ * Represents a standard guideline that detects and corrects violations in the code according to a particular coding standard.
4
+ *
5
+ * Need to implement/define:
6
+ * - initialValue()
7
+ * - match($jp, logErrors)
8
+ * - apply($jp)
9
+ */
10
+ export default class StandardGuideline extends VisitWithContext {
11
+ }
12
+ //# sourceMappingURL=StandardGuideline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StandardGuideline.js","sourceRoot":"","sources":["../src/StandardGuideline.ts"],"names":[],"mappings":"AAEA,OAAO,gBAAgB,MAAM,mCAAmC,CAAC;AAEjE;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,OAAgB,iBAAuD,SAAQ,gBAAsB;CAUlH"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Key-value storage to share data between visits
3
+ *
4
+ * @template T Type of the stored values
5
+ */
6
+ export default class Context<T> {
7
+ protected storage: Map<string, T>;
8
+ put(key: string, value: T): void;
9
+ get(key: string): T | undefined;
10
+ }
11
+ //# sourceMappingURL=Context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Context.d.ts","sourceRoot":"","sources":["../../src/ast-visitor/Context.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,OAAO,CAAC,CAAC;IAC1B,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAa;IAE9C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAIzB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;CAGlC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Key-value storage to share data between visits
3
+ *
4
+ * @template T Type of the stored values
5
+ */
6
+ export default class Context {
7
+ storage = new Map();
8
+ put(key, value) {
9
+ this.storage.set(key, value);
10
+ }
11
+ get(key) {
12
+ return this.storage.get(key);
13
+ }
14
+ }
15
+ //# sourceMappingURL=Context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Context.js","sourceRoot":"","sources":["../../src/ast-visitor/Context.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,OAAO;IACd,OAAO,GAAmB,IAAI,GAAG,EAAE,CAAC;IAE9C,GAAG,CAAC,GAAW,EAAE,KAAQ;QACrB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,GAAG,CAAC,GAAW;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;CACJ"}
@@ -0,0 +1,23 @@
1
+ import { LaraJoinPoint } from "@specs-feup/lara/api/LaraJoinPoint.js";
2
+ /**
3
+ * Common interface for AST transformations applied to a single node
4
+ *
5
+ * Need to implement:
6
+ * - apply($jp)
7
+ *
8
+ * @template T Type of data stored in the shared context
9
+ * @template C Type of the context (default is Context<T>)
10
+ */
11
+ export default abstract class Visit {
12
+ /**
13
+ * Applies the transformation to the given node
14
+ * @param $jp The node to transform
15
+ * @returns Transformation result
16
+ */
17
+ abstract apply($jp: LaraJoinPoint): unknown;
18
+ /**
19
+ * @returns List of dependent visits, which is empty by default
20
+ */
21
+ get dependencies(): Visit[];
22
+ }
23
+ //# sourceMappingURL=Visit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Visit.d.ts","sourceRoot":"","sources":["../../src/ast-visitor/Visit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAEtE;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,KAAK;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO;IAE3C;;OAEG;IACH,IAAI,YAAY,IAAI,KAAK,EAAE,CAE1B;CACJ"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Common interface for AST transformations applied to a single node
3
+ *
4
+ * Need to implement:
5
+ * - apply($jp)
6
+ *
7
+ * @template T Type of data stored in the shared context
8
+ * @template C Type of the context (default is Context<T>)
9
+ */
10
+ export default class Visit {
11
+ /**
12
+ * @returns List of dependent visits, which is empty by default
13
+ */
14
+ get dependencies() {
15
+ return [];
16
+ }
17
+ }
18
+ //# sourceMappingURL=Visit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Visit.js","sourceRoot":"","sources":["../../src/ast-visitor/Visit.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,OAAgB,KAAK;IAQ/B;;OAEG;IACH,IAAI,YAAY;QACZ,OAAO,EAAE,CAAC;IACd,CAAC;CACJ"}