@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,31 +1,49 @@
1
- import { GotoStmt, FunctionJp, LabelStmt } from "@specs-feup/clava/api/Joinpoints.js";
1
+ import { FunctionJp } from "@specs-feup/clava/api/Joinpoints.js";
2
2
  import MISRARule from "../../MISRARule.js";
3
- import Query from "@specs-feup/lara/api/weaver/Query.js";
4
- import { MISRATransformationReport, MISRATransformationType } from "../../MISRA.js";
3
+ import { AnalysisType, MISRATransformationReport, MISRATransformationType } from "../../MISRA.js";
4
+ import { getUnusedLabels } from "../../utils/FunctionUtils.js";
5
5
  /**
6
- * Rule 2.6: Unused Labels.
7
- * Checks for labels within a function that are not used.
6
+ * MISRA-C Rule 2.6: A function should not contain unused label declarations.
7
+ *
8
8
  */
9
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);
10
+ /**
11
+ * Scope of analysis
12
+ */
13
+ analysisType = AnalysisType.SINGLE_TRANSLATION_UNIT;
14
+ /**
15
+ * @returns Rule identifier according to MISRA-C:2012
16
+ */
17
+ get name() {
18
+ return "2.6";
15
19
  }
20
+ /**
21
+ * Checks if the given joinpoint represents a function with unused labels.
22
+ * A tag is considered unused if it is declared but not referenced by any goto statement.
23
+ *
24
+ * @param $jp - Joinpoint to analyze
25
+ * @param logErrors - [logErrors=false] - Whether to log errors if a violation is detected
26
+ * @returns Returns true if the joinpoint violates the rule, false otherwise
27
+ */
16
28
  match($jp, logErrors = false) {
17
29
  if (!($jp instanceof FunctionJp))
18
30
  return false;
19
- const unusedLabels = this.getUnusedLabels($jp);
31
+ const unusedLabels = getUnusedLabels($jp);
20
32
  if (logErrors) {
21
- unusedLabels.forEach(label => this.logMISRAError(label, `Label ${label.decl.name} is unused in function ${$jp.name}.`));
33
+ unusedLabels.forEach(label => this.logMISRAError(label, `Label '${label.decl.name}' is unused in function ${$jp.name}.`));
22
34
  }
23
35
  return unusedLabels.length > 0;
24
36
  }
25
- transform($jp) {
37
+ /**
38
+ * Removes all unused labels if the provided joinpoint represents a function
39
+ *
40
+ * @param $jp - Joinpoint to transform
41
+ * @returns Report detailing the transformation result
42
+ */
43
+ apply($jp) {
26
44
  if (!this.match($jp))
27
45
  return new MISRATransformationReport(MISRATransformationType.NoChange);
28
- const unusedLabels = this.getUnusedLabels($jp);
46
+ const unusedLabels = getUnusedLabels($jp);
29
47
  for (const label of unusedLabels) {
30
48
  label.detach();
31
49
  }
@@ -1 +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"}
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,UAAU,EAAa,MAAM,qCAAqC,CAAC;AAC5E,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAClG,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,SAAS;IACxD;;OAEG;IACM,YAAY,GAAG,YAAY,CAAC,uBAAuB,CAAC;IAE7D;;OAEG;IACH,IAAa,IAAI;QACb,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,GAAc,EAAE,YAAqB,KAAK;QAC5C,IAAI,CAAC,CAAC,GAAG,YAAY,UAAU,CAAC;YAC5B,OAAO,KAAK,CAAC;QAEjB,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,SAAS,EAAE,CAAC;YACZ,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CACzB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,UAAU,KAAK,CAAC,IAAI,CAAC,IAAI,2BAA2B,GAAG,CAAC,IAAI,GAAG,CAAC,CAC7F,CAAA;QACL,CAAC;QACD,OAAO,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IACnC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,GAAc;QAChB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YAChB,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAE3E,MAAM,YAAY,GAAG,eAAe,CAAC,GAAiB,CAAC,CAAC;QACxD,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"}
@@ -1,13 +1,55 @@
1
1
  import { Joinpoint } from "@specs-feup/clava/api/Joinpoints.js";
2
2
  import MISRARule from "../../MISRARule.js";
3
- import MISRAContext from "../../MISRAContext.js";
4
- import { MISRATransformationReport } from "../../MISRA.js";
3
+ import { AnalysisType, MISRATransformationReport } from "../../MISRA.js";
4
+ /**
5
+ * MISRA-C Rule 2.7: There should be no unused parameters in functions.
6
+ */
5
7
  export default class Rule_2_7_UnusedParameters extends MISRARule {
6
- constructor(context: MISRAContext);
8
+ #private;
9
+ /**
10
+ * Scope of analysis
11
+ */
12
+ readonly analysisType = AnalysisType.SINGLE_TRANSLATION_UNIT;
13
+ /**
14
+ * @returns Rule identifier according to MISRA-C:2012
15
+ */
16
+ get name(): string;
17
+ /**
18
+ * Checks if the program contains function with unused parameters.
19
+ * A parameter is considered unused if it is never referenced anywhere in the function.
20
+ *
21
+ * @param $jp - Joinpoint to analyze
22
+ * @param logErrors - [logErrors=false] - Whether to log errors if a violation is detected
23
+ * @returns Returns true if the joinpoint violates the rule, false otherwise
24
+ */
25
+ match($jp: Joinpoint, logErrors?: boolean): boolean;
26
+ /**
27
+ * Removes all unused parameters from functions in the program
28
+ *
29
+ * @param $jp - Joinpoint to transform
30
+ * @returns Report detailing the transformation result
31
+ */
32
+ apply($jp: Joinpoint): MISRATransformationReport;
33
+ /**
34
+ * Gets all unused parameters from a function joinpoint
35
+ *
36
+ * @param func - Function joinpoint to analyze
37
+ * @returns Returns a list of all unused parameters from a function.
38
+ */
7
39
  private getUnusedParams;
40
+ /**
41
+ * Gets all used parameters from a function joinpoint
42
+ *
43
+ * @param func - Function joinpoint to analyze
44
+ * @returns Returns a list of parameters that are used within a function.
45
+ */
8
46
  private getUsedParams;
9
- private getUsedParamsPositions;
10
- match($jp: Joinpoint, logErrors?: boolean): boolean;
11
- transform($jp: Joinpoint): MISRATransformationReport;
47
+ /**
48
+ * Returns the positions (indexes) of parameters that are used in the given function joinpoint.
49
+ *
50
+ * @param func - Function joinpoint to analyze
51
+ * @returns returns a list of numbers representing the indexes of used parameters.
52
+ */
53
+ private getUnusedParamsPositions;
12
54
  }
13
55
  //# sourceMappingURL=Rule_2_7_UnusedParameters.d.ts.map
@@ -1 +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"}
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,EAAgC,MAAM,qCAAqC,CAAC;AAC1G,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAA2B,MAAM,gBAAgB,CAAC;AAGlG;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,yBAA0B,SAAQ,SAAS;;IAC5D;;OAEG;IACH,QAAQ,CAAC,YAAY,wCAAwC;IAE7D;;OAEG;IACH,IAAa,IAAI,IAAI,MAAM,CAE1B;IAID;;;;;;;OAOG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO;IAY1D;;;;;OAKG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS,GAAG,yBAAyB;IAkBhD;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAOvB;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAOrB;;;;;OAKG;IACH,OAAO,CAAC,wBAAwB;CAWnC"}
@@ -1,53 +1,103 @@
1
1
  import { FunctionJp, Varref, Call } from "@specs-feup/clava/api/Joinpoints.js";
2
2
  import MISRARule from "../../MISRARule.js";
3
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";
4
+ import { AnalysisType, MISRATransformationReport, MISRATransformationType } from "../../MISRA.js";
5
+ import { getDirectParamReferences, getParamReferences, getVLAFieldParamReferences } from "../../utils/FunctionUtils.js";
6
+ /**
7
+ * MISRA-C Rule 2.7: There should be no unused parameters in functions.
8
+ */
6
9
  export default class Rule_2_7_UnusedParameters extends MISRARule {
7
- constructor(context) {
8
- super("2.7", context);
10
+ /**
11
+ * Scope of analysis
12
+ */
13
+ analysisType = AnalysisType.SINGLE_TRANSLATION_UNIT;
14
+ /**
15
+ * @returns Rule identifier according to MISRA-C:2012
16
+ */
17
+ get name() {
18
+ return "2.7";
9
19
  }
20
+ #unusedParams = [];
21
+ /**
22
+ * Checks if the program contains function with unused parameters.
23
+ * A parameter is considered unused if it is never referenced anywhere in the function.
24
+ *
25
+ * @param $jp - Joinpoint to analyze
26
+ * @param logErrors - [logErrors=false] - Whether to log errors if a violation is detected
27
+ * @returns Returns true if the joinpoint violates the rule, false otherwise
28
+ */
29
+ match($jp, logErrors = false) {
30
+ if (!($jp instanceof FunctionJp && $jp.isImplementation))
31
+ return false;
32
+ const nonCompliant = $jp.params.some((param) => getParamReferences(param, $jp).length === 0);
33
+ if (logErrors && nonCompliant) {
34
+ this.#unusedParams = this.getUnusedParams($jp);
35
+ this.#unusedParams.forEach(param => this.logMISRAError(param, `Parameter '${param.name}' is unused in function '${$jp.name}'.`));
36
+ }
37
+ return nonCompliant;
38
+ }
39
+ /**
40
+ * Removes all unused parameters from functions in the program
41
+ *
42
+ * @param $jp - Joinpoint to transform
43
+ * @returns Report detailing the transformation result
44
+ */
45
+ apply($jp) {
46
+ if (!this.match($jp))
47
+ return new MISRATransformationReport(MISRATransformationType.NoChange);
48
+ const funcJp = $jp;
49
+ const usedParams = this.getUsedParams(funcJp);
50
+ const unusedParamsPosition = this.getUnusedParamsPositions(funcJp);
51
+ const calls = Query.search(Call, { function: jp => jp?.astId === funcJp.astId }).get();
52
+ funcJp.setParams(usedParams);
53
+ for (const call of calls) {
54
+ const unusedArgs = unusedParamsPosition.map(i => call.args[i]);
55
+ unusedArgs.forEach(arg => arg.detach());
56
+ }
57
+ return new MISRATransformationReport(MISRATransformationType.DescendantChange);
58
+ }
59
+ /**
60
+ * Gets all unused parameters from a function joinpoint
61
+ *
62
+ * @param func - Function joinpoint to analyze
63
+ * @returns Returns a list of all unused parameters from a function.
64
+ */
10
65
  getUnusedParams(func) {
11
- return func.params.filter(param => getParamReferences(param, func).length === 0);
66
+ return func.params.filter((param) => {
67
+ if (getDirectParamReferences(param, func).length > 0)
68
+ return false;
69
+ return getVLAFieldParamReferences(param, func).length === 0;
70
+ });
12
71
  }
72
+ /**
73
+ * Gets all used parameters from a function joinpoint
74
+ *
75
+ * @param func - Function joinpoint to analyze
76
+ * @returns Returns a list of parameters that are used within a function.
77
+ */
13
78
  getUsedParams(func) {
14
- return func.params.filter(param => getParamReferences(param, func).length > 0);
79
+ return func.params.filter((param) => {
80
+ if (getDirectParamReferences(param, func).length > 0)
81
+ return true;
82
+ return getVLAFieldParamReferences(param, func).length > 0;
83
+ });
15
84
  }
16
- getUsedParamsPositions(func) {
85
+ /**
86
+ * Returns the positions (indexes) of parameters that are used in the given function joinpoint.
87
+ *
88
+ * @param func - Function joinpoint to analyze
89
+ * @returns returns a list of numbers representing the indexes of used parameters.
90
+ */
91
+ getUnusedParamsPositions(func) {
17
92
  let result = [];
18
93
  for (let i = 0; i < func.params.length; i++) {
19
94
  const param = func.params[i];
20
- if (Query.searchFrom(func, Varref, { decl: jp => jp?.astId === param.astId }).get().length > 0) {
95
+ const varRefs = Query.searchFrom(func, Varref, { decl: jp => jp?.astId === param.astId }).get();
96
+ if (varRefs.length === 0) {
21
97
  result.push(i);
22
98
  }
23
99
  }
24
100
  return result;
25
101
  }
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
102
  }
53
103
  //# sourceMappingURL=Rule_2_7_UnusedParameters.js.map
@@ -1 +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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"}
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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"}
@@ -1,13 +1,32 @@
1
1
  import { Joinpoint } from "@specs-feup/clava/api/Joinpoints.js";
2
2
  import MISRARule from "../../MISRARule.js";
3
- import MISRAContext from "../../MISRAContext.js";
4
- import { MISRATransformationReport } from "../../MISRA.js";
3
+ import { AnalysisType, MISRATransformationReport } from "../../MISRA.js";
5
4
  /**
6
- * MISRA Rule 3.1:
5
+ * MISRA-C Rule 3.1: The character sequences /* an d // shall not be used within a comment.
7
6
  */
8
7
  export default class Rule_3_1_CommentSequences extends MISRARule {
9
- constructor(context: MISRAContext);
8
+ /**
9
+ * Scope of analysis
10
+ */
11
+ readonly analysisType = AnalysisType.SINGLE_TRANSLATION_UNIT;
12
+ /**
13
+ * @returns Rule identifier according to MISRA-C:2012
14
+ */
15
+ get name(): string;
16
+ /**
17
+ * Checks if given joinpoint contains disallowed character sequences in comments.
18
+ *
19
+ * @param $jp - Joinpoint to analyze
20
+ * @param logErrors - [logErrors=false] - Whether to log errors if a violation is detected
21
+ * @returns Returns true if the joinpoint violates the rule, false otherwise
22
+ */
10
23
  match($jp: Joinpoint, logErrors?: boolean): boolean;
11
- transform($jp: Joinpoint): MISRATransformationReport;
24
+ /**
25
+ * Transforms the given joinpoint if it represents a joinpoint containing disallowed character sequences in comments.
26
+ *
27
+ * @param $jp - Joinpoint to transform
28
+ * @returns Report detailing the transformation result
29
+ */
30
+ apply($jp: Joinpoint): MISRATransformationReport;
12
31
  }
13
32
  //# sourceMappingURL=Rule_3_1_CommentSequences.d.ts.map
@@ -1 +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"}
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,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAChE,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAA2B,MAAM,gBAAgB,CAAC;AAElG;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,yBAA0B,SAAQ,SAAS;IAC5D;;OAEG;IACH,QAAQ,CAAC,YAAY,wCAAwC;IAE5D;;MAEE;IACH,IAAa,IAAI,IAAI,MAAM,CAE1B;IAED;;;;;;OAMG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO;IAa1D;;;;;OAKG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS,GAAG,yBAAyB;CAYnD"}
@@ -1,22 +1,42 @@
1
1
  import MISRARule from "../../MISRARule.js";
2
- import { isInlineComment, getComments } from "../../utils/utils.js";
3
- import { MISRATransformationReport, MISRATransformationType } from "../../MISRA.js";
2
+ import { isInlineComment, getComments } from "../../utils/CommentUtils.js";
3
+ import { AnalysisType, MISRATransformationReport, MISRATransformationType } from "../../MISRA.js";
4
4
  /**
5
- * MISRA Rule 3.1:
5
+ * MISRA-C Rule 3.1: The character sequences /* an d // shall not be used within a comment.
6
6
  */
7
7
  export default class Rule_3_1_CommentSequences extends MISRARule {
8
- constructor(context) {
9
- super("3.1", context);
8
+ /**
9
+ * Scope of analysis
10
+ */
11
+ analysisType = AnalysisType.SINGLE_TRANSLATION_UNIT;
12
+ /**
13
+ * @returns Rule identifier according to MISRA-C:2012
14
+ */
15
+ get name() {
16
+ return "3.1";
10
17
  }
18
+ /**
19
+ * Checks if given joinpoint contains disallowed character sequences in comments.
20
+ *
21
+ * @param $jp - Joinpoint to analyze
22
+ * @param logErrors - [logErrors=false] - Whether to log errors if a violation is detected
23
+ * @returns Returns true if the joinpoint violates the rule, false otherwise
24
+ */
11
25
  match($jp, logErrors = false) {
12
26
  const invalidComments = getComments($jp).filter(comment => (isInlineComment(comment) && /(\/\*)/g.test(comment.text)) ||
13
27
  (!isInlineComment(comment) && /(\/\/|\/\*)/g.test(comment.text)));
14
28
  if (logErrors) {
15
- invalidComments.forEach(comment => this.logMISRAError(comment, `Comment ${comment.text} contains invalid character sequences.`));
29
+ invalidComments.forEach(comment => this.logMISRAError(comment, `Comment \'${comment.text}\' contains invalid character sequences.`));
16
30
  }
17
31
  return invalidComments.length > 0;
18
32
  }
19
- transform($jp) {
33
+ /**
34
+ * Transforms the given joinpoint if it represents a joinpoint containing disallowed character sequences in comments.
35
+ *
36
+ * @param $jp - Joinpoint to transform
37
+ * @returns Report detailing the transformation result
38
+ */
39
+ apply($jp) {
20
40
  if (!this.match($jp))
21
41
  return new MISRATransformationReport(MISRATransformationType.NoChange);
22
42
  const comments = getComments($jp);
@@ -1 +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"}
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;AAC3C,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAElG;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,yBAA0B,SAAQ,SAAS;IAC5D;;OAEG;IACM,YAAY,GAAG,YAAY,CAAC,uBAAuB,CAAC;IAE5D;;MAEE;IACH,IAAa,IAAI;QACb,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;;;OAMG;IACH,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,aAAa,OAAO,CAAC,IAAI,0CAA0C,CAAC,CACnG,CAAA;QACL,CAAC;QACD,OAAO,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;IACtC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,GAAc;QAChB,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,46 @@
1
+ import { Joinpoint } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import MISRARule from "../../MISRARule.js";
3
+ import { AnalysisType, MISRATransformationReport } from "../../MISRA.js";
4
+ /**
5
+ * Abstract base class for MISRA-C rules that enforce constraints on identifier uniqueness where renaming may be required.
6
+ *
7
+ * Need to implement:
8
+ * - analysisType
9
+ * - name()
10
+ * - match($jp, logErrors)
11
+ */
12
+ export default abstract class IdentifierRenameRule extends MISRARule {
13
+ /**
14
+ * A positive integer starting from 1 that indicates the rule's priority, determining the order in which rules are applied.
15
+ */
16
+ readonly priority = 2;
17
+ /**
18
+ * Specifies the scope of analysis: single unit or entire system.
19
+ */
20
+ abstract readonly analysisType: AnalysisType;
21
+ /**
22
+ * @returns Rule identifier according to MISRA-C:2012
23
+ */
24
+ abstract get name(): string;
25
+ /**
26
+ * Identifiers with invalid names that require renaming.
27
+ */
28
+ protected invalidIdentifiers: any[];
29
+ /**
30
+ * Checks if the joinpoint violates the rule
31
+ *
32
+ * @param $jp - Joinpoint to analyze
33
+ * @param logErrors - [logErrors=false] - Whether to log errors if a violation is detected
34
+ * @returns Returns true if the joinpoint violates the rule, false otherwise
35
+ */
36
+ abstract match($jp: Joinpoint, logErrors: boolean): boolean;
37
+ /**
38
+ * Renames all invalid identifiers found in the program.
39
+ * After renaming, the program is rebuilt to ensure proper linking of functions, variables, and their external declarations.
40
+ *
41
+ * @param $jp - Joinpoint to transform
42
+ * @returns Report detailing the transformation result
43
+ */
44
+ apply($jp: Joinpoint): MISRATransformationReport;
45
+ }
46
+ //# sourceMappingURL=IdentifierRenameRule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IdentifierRenameRule.d.ts","sourceRoot":"","sources":["../../../src/rules/Section5_Identifiers/IdentifierRenameRule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAU,MAAM,qCAAqC,CAAC;AACvE,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAA2B,MAAM,gBAAgB,CAAC;AAIlG;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,oBAAqB,SAAQ,SAAS;IAChE;;OAEG;IACH,QAAQ,CAAC,QAAQ,KAAK;IAEtB;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IAE7C;;OAEG;IACH,aAAsB,IAAI,IAAI,MAAM,CAAC;IAErC;;OAEG;IACH,SAAS,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAM;IAEzC;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO;IAE3D;;;;;;OAMG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS,GAAG,yBAAyB;CAWnD"}
@@ -0,0 +1,40 @@
1
+ import MISRARule from "../../MISRARule.js";
2
+ import { MISRATransformationReport, MISRATransformationType } from "../../MISRA.js";
3
+ import { renameIdentifier } from "../../utils/IdentifierUtils.js";
4
+ import Query from "@specs-feup/lara/api/weaver/Query.js";
5
+ /**
6
+ * Abstract base class for MISRA-C rules that enforce constraints on identifier uniqueness where renaming may be required.
7
+ *
8
+ * Need to implement:
9
+ * - analysisType
10
+ * - name()
11
+ * - match($jp, logErrors)
12
+ */
13
+ export default class IdentifierRenameRule extends MISRARule {
14
+ /**
15
+ * A positive integer starting from 1 that indicates the rule's priority, determining the order in which rules are applied.
16
+ */
17
+ priority = 2;
18
+ /**
19
+ * Identifiers with invalid names that require renaming.
20
+ */
21
+ invalidIdentifiers = [];
22
+ /**
23
+ * Renames all invalid identifiers found in the program.
24
+ * After renaming, the program is rebuilt to ensure proper linking of functions, variables, and their external declarations.
25
+ *
26
+ * @param $jp - Joinpoint to transform
27
+ * @returns Report detailing the transformation result
28
+ */
29
+ apply($jp) {
30
+ if (!this.match($jp, false)) {
31
+ return new MISRATransformationReport(MISRATransformationType.NoChange);
32
+ }
33
+ for (const identifierJp of this.invalidIdentifiers) {
34
+ const newName = this.context.generateIdentifierName(identifierJp);
35
+ renameIdentifier(identifierJp, newName);
36
+ }
37
+ return new MISRATransformationReport(MISRATransformationType.Replacement, Query.root());
38
+ }
39
+ }
40
+ //# sourceMappingURL=IdentifierRenameRule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IdentifierRenameRule.js","sourceRoot":"","sources":["../../../src/rules/Section5_Identifiers/IdentifierRenameRule.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAgB,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAClG,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,KAAK,MAAM,sCAAsC,CAAC;AAEzD;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,OAAgB,oBAAqB,SAAQ,SAAS;IAChE;;OAEG;IACM,QAAQ,GAAG,CAAC,CAAC;IAYtB;;OAEG;IACO,kBAAkB,GAAU,EAAE,CAAC;IAWzC;;;;;;OAMG;IACH,KAAK,CAAC,GAAc;QAChB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAC3E,CAAC;QAED,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACjD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,YAAY,CAAE,CAAC;YACnE,gBAAgB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,EAAa,CAAC,CAAC;IACvG,CAAC;CACJ"}
@@ -0,0 +1,25 @@
1
+ import { Joinpoint } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import IdentifierRenameRule from "./IdentifierRenameRule.js";
3
+ import { AnalysisType } from "../../MISRA.js";
4
+ /**
5
+ * MISRA-C Rule 5.1 External identifiers shall be distinct.
6
+ */
7
+ export default class Rule_5_1_DistinctExternalIdentifiers extends IdentifierRenameRule {
8
+ /**
9
+ * Scope of analysis
10
+ */
11
+ readonly analysisType = AnalysisType.SYSTEM;
12
+ /**
13
+ * @returns Rule identifier according to MISRA-C:2012
14
+ */
15
+ get name(): string;
16
+ /**
17
+ * Checks if the given joinpoint is an external identifier distinct from other external identifiers.
18
+ *
19
+ * @param $jp - Joinpoint to analyze
20
+ * @param logErrors - [logErrors=false] - Whether to log errors if a violation is detected
21
+ * @returns Returns true if the joinpoint violates the rule, false otherwise
22
+ */
23
+ match($jp: Joinpoint, logErrors?: boolean): boolean;
24
+ }
25
+ //# sourceMappingURL=Rule_5_1_DistinctExternalIdentifiers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rule_5_1_DistinctExternalIdentifiers.d.ts","sourceRoot":"","sources":["../../../src/rules/Section5_Identifiers/Rule_5_1_DistinctExternalIdentifiers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAW,MAAM,qCAAqC,CAAC;AAKxE,OAAO,oBAAoB,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,oCAAqC,SAAQ,oBAAoB;IAClF;;OAEG;IACH,QAAQ,CAAC,YAAY,uBAAuB;IAE5C;;OAEG;IACH,IAAa,IAAI,IAAI,MAAM,CAE1B;IAED;;;;;;OAMG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO;CAoB7D"}
@@ -0,0 +1,46 @@
1
+ import { Program } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import { areDistinctIdentifiers, getIdentifierName } from "../../utils/IdentifierUtils.js";
3
+ import { getExternalLinkageIdentifiers } from "../../utils/ProgramUtils.js";
4
+ import { compareLocation } from "../../utils/JoinpointUtils.js";
5
+ import { isSameVarDecl } from "../../utils/VarUtils.js";
6
+ import IdentifierRenameRule from "./IdentifierRenameRule.js";
7
+ import { AnalysisType } from "../../MISRA.js";
8
+ /**
9
+ * MISRA-C Rule 5.1 External identifiers shall be distinct.
10
+ */
11
+ export default class Rule_5_1_DistinctExternalIdentifiers extends IdentifierRenameRule {
12
+ /**
13
+ * Scope of analysis
14
+ */
15
+ analysisType = AnalysisType.SYSTEM;
16
+ /**
17
+ * @returns Rule identifier according to MISRA-C:2012
18
+ */
19
+ get name() {
20
+ return "5.1";
21
+ }
22
+ /**
23
+ * Checks if the given joinpoint is an external identifier distinct from other external identifiers.
24
+ *
25
+ * @param $jp - Joinpoint to analyze
26
+ * @param logErrors - [logErrors=false] - Whether to log errors if a violation is detected
27
+ * @returns Returns true if the joinpoint violates the rule, false otherwise
28
+ */
29
+ match($jp, logErrors = false) {
30
+ if (!($jp instanceof Program))
31
+ return false;
32
+ const externalIdentifiers = getExternalLinkageIdentifiers();
33
+ this.invalidIdentifiers =
34
+ externalIdentifiers.filter(identifier1 => externalIdentifiers.some(identifier2 => !isSameVarDecl(identifier1, identifier2) &&
35
+ !areDistinctIdentifiers(identifier1, identifier2) &&
36
+ compareLocation(identifier2, identifier1) < 0));
37
+ const nonCompliant = this.invalidIdentifiers.length > 0;
38
+ if (nonCompliant && logErrors) {
39
+ this.invalidIdentifiers.forEach(identifierJp => {
40
+ this.logMISRAError(identifierJp, `Identifier '${getIdentifierName(identifierJp)}' is not distinct from other external identifier within the first 31 characters.`);
41
+ });
42
+ }
43
+ return nonCompliant;
44
+ }
45
+ }
46
+ //# sourceMappingURL=Rule_5_1_DistinctExternalIdentifiers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rule_5_1_DistinctExternalIdentifiers.js","sourceRoot":"","sources":["../../../src/rules/Section5_Identifiers/Rule_5_1_DistinctExternalIdentifiers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,OAAO,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAC3F,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,oBAAoB,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,oCAAqC,SAAQ,oBAAoB;IAClF;;OAEG;IACM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC;IAE5C;;OAEG;IACH,IAAa,IAAI;QACb,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,GAAc,EAAE,YAAqB,KAAK;QAC5C,IAAI,CAAC,CAAC,GAAG,YAAY,OAAO,CAAC;YAAE,OAAO,KAAK,CAAC;QAE5C,MAAM,mBAAmB,GAAG,6BAA6B,EAAE,CAAC;QAC5D,IAAI,CAAC,kBAAkB;YACnB,mBAAmB,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CACrC,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CACnC,CAAC,aAAa,CAAC,WAAW,EAAE,WAAW,CAAC;gBACxC,CAAC,sBAAsB,CAAC,WAAW,EAAE,WAAW,CAAC;gBACjD,eAAe,CAAC,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,CAChD,CACJ,CAAC;QACN,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC;QACxD,IAAI,YAAY,IAAI,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;gBAC3C,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,eAAe,iBAAiB,CAAC,YAAY,CAAC,kFAAkF,CAAC,CAAA;YACtK,CAAC,CAAC,CAAC;QACP,CAAC;QACD,OAAO,YAAY,CAAC;IACxB,CAAC;CACJ"}
@@ -0,0 +1,26 @@
1
+ import { Joinpoint } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import IdentifierRenameRule from "./IdentifierRenameRule.js";
3
+ import { AnalysisType } from "../../MISRA.js";
4
+ /**
5
+ * MISRA-C Rule 5.6: A typedef name shall be a unique identifier.
6
+ *
7
+ * Exception: The typedef name may be the same as the structure, union or enumeration tag name associated with the typedef.
8
+ */
9
+ export default class Rule_5_6_UniqueTypedefNames extends IdentifierRenameRule {
10
+ /**
11
+ * Scope of analysis
12
+ */
13
+ readonly analysisType = AnalysisType.SYSTEM;
14
+ /**
15
+ * @returns Rule identifier according to MISRA-C:2012
16
+ */
17
+ get name(): string;
18
+ /**
19
+ *
20
+ * @param $jp - Joinpoint to analyze
21
+ * @param logErrors - [logErrors=false] - Whether to log errors if a violation is detected
22
+ * @returns Returns true if the joinpoint violates the rule, false otherwise
23
+ */
24
+ match($jp: Joinpoint, logErrors?: boolean): boolean;
25
+ }
26
+ //# sourceMappingURL=Rule_5_6_UniqueTypedefNames.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rule_5_6_UniqueTypedefNames.d.ts","sourceRoot":"","sources":["../../../src/rules/Section5_Identifiers/Rule_5_6_UniqueTypedefNames.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAwB,MAAM,qCAAqC,CAAC;AAMtF,OAAO,oBAAoB,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,2BAA4B,SAAQ,oBAAoB;IACzE;;OAEG;IACH,QAAQ,CAAC,YAAY,uBAAuB;IAE5C;;OAEG;IACH,IAAa,IAAI,IAAI,MAAM,CAE1B;IAED;;;;;OAKG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO;CA4B7D"}