@specs-feup/clava-misra 1.0.2 → 1.0.4

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 +46 -5
  16. package/dist/MISRATool.d.ts.map +1 -1
  17. package/dist/MISRATool.js +118 -45
  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 -2
  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 +67 -0
  193. package/dist/utils/FileUtils.d.ts.map +1 -0
  194. package/dist/utils/FileUtils.js +144 -0
  195. package/dist/utils/FileUtils.js.map +1 -0
  196. package/dist/utils/FunctionUtils.d.ts +47 -0
  197. package/dist/utils/FunctionUtils.d.ts.map +1 -0
  198. package/dist/utils/FunctionUtils.js +87 -0
  199. package/dist/utils/FunctionUtils.js.map +1 -0
  200. package/dist/utils/IdentifierUtils.d.ts +63 -0
  201. package/dist/utils/IdentifierUtils.d.ts.map +1 -0
  202. package/dist/utils/IdentifierUtils.js +133 -0
  203. package/dist/utils/IdentifierUtils.js.map +1 -0
  204. package/dist/utils/JoinpointUtils.d.ts +36 -0
  205. package/dist/utils/JoinpointUtils.d.ts.map +1 -0
  206. package/dist/utils/JoinpointUtils.js +63 -0
  207. package/dist/utils/JoinpointUtils.js.map +1 -0
  208. package/dist/utils/ProgramUtils.d.ts +39 -0
  209. package/dist/utils/ProgramUtils.d.ts.map +1 -0
  210. package/dist/utils/ProgramUtils.js +97 -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 +51 -0
  221. package/dist/utils/VarUtils.d.ts.map +1 -0
  222. package/dist/utils/VarUtils.js +91 -0
  223. package/dist/utils/VarUtils.js.map +1 -0
  224. package/package.json +16 -7
  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 +126 -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 -4
  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 +37 -0
  310. package/src/utils/CommentUtils.ts +29 -0
  311. package/src/utils/FileUtils.ts +169 -0
  312. package/src/utils/FunctionUtils.ts +97 -0
  313. package/src/utils/IdentifierUtils.ts +142 -0
  314. package/src/utils/JoinpointUtils.ts +70 -0
  315. package/src/utils/ProgramUtils.ts +107 -0
  316. package/src/utils/SwitchUtils.ts +52 -0
  317. package/src/utils/TypeDeclUtils.ts +88 -0
  318. package/src/utils/VarUtils.ts +102 -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
@@ -0,0 +1,57 @@
1
+ import { Vardecl } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import MISRARule from "../../MISRARule.js";
3
+ import { AnalysisType, MISRATransformationReport, MISRATransformationType } from "../../MISRA.js";
4
+ import { findReferencingFunctions } from "../../utils/VarUtils.js";
5
+ import { isInternalLinkageIdentifier } from "../../utils/IdentifierUtils.js";
6
+ import { resetCaches } from "../../utils/ProgramUtils.js";
7
+ /**
8
+ * MISRA-C Rule 8.9: An object should be defined at block scope if its identifier only appears in a single function
9
+ */
10
+ export default class Rule_8_9_BlockScopeDefinition extends MISRARule {
11
+ /**
12
+ * Scope of analysis
13
+ */
14
+ analysisType = AnalysisType.SYSTEM;
15
+ /**
16
+ * @returns Rule identifier according to MISRA-C:2012
17
+ */
18
+ get name() {
19
+ return "8.9";
20
+ }
21
+ /**
22
+ * Checks if the provided joinpoint represents an object definition with internal linkage, whose identifier only appears in a single function.
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
+ */
28
+ match($jp, logErrors = false) {
29
+ if (!($jp instanceof Vardecl && isInternalLinkageIdentifier($jp))) {
30
+ return false;
31
+ }
32
+ const nonCompliant = findReferencingFunctions($jp).length <= 1;
33
+ if (nonCompliant && logErrors) {
34
+ this.logMISRAError($jp, `Object '${$jp.name}' should be defined at block scope because its identifier only appears in one single function.`);
35
+ }
36
+ return nonCompliant;
37
+ }
38
+ /**
39
+ * If the joinpoint represents the definition of an object with internal linkage used exclusively in one function, it is moved to that function's block scope.
40
+ *
41
+ * @param $jp - Joinpoint to transform
42
+ * @returns Report detailing the transformation result
43
+ */
44
+ apply($jp) {
45
+ if (!this.match($jp)) {
46
+ return new MISRATransformationReport(MISRATransformationType.NoChange);
47
+ }
48
+ const referencingFunctions = findReferencingFunctions($jp);
49
+ const functionJp = referencingFunctions.length > 0 ? referencingFunctions[0] : undefined;
50
+ const declStmt = $jp.getAncestor("declStmt");
51
+ declStmt.detach();
52
+ functionJp?.body.firstChild.insertBefore(declStmt);
53
+ resetCaches();
54
+ return new MISRATransformationReport(MISRATransformationType.Removal);
55
+ }
56
+ }
57
+ //# sourceMappingURL=Rule_8_9_BlockScopeDefinition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rule_8_9_BlockScopeDefinition.js","sourceRoot":"","sources":["../../../src/rules/Section8_DeclarationsAndDefinitions/Rule_8_9_BlockScopeDefinition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAElG,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE1D;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,6BAA8B,SAAQ,SAAS;IAChE;;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,IAAI,2BAA2B,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAChE,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,MAAM,YAAY,GAAG,wBAAwB,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;QAE/D,IAAI,YAAY,IAAI,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,WAAW,GAAG,CAAC,IAAI,gGAAgG,CAAC,CAAA;QAChJ,CAAC;QACD,OAAO,YAAY,CAAC;IACxB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,GAAc;QAChB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAC3E,CAAC;QAED,MAAM,oBAAoB,GAAG,wBAAwB,CAAC,GAAc,CAAC,CAAC;QACtE,MAAM,UAAU,GAAG,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACzF,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAC7C,QAAQ,CAAC,MAAM,EAAE,CAAC;QAClB,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACnD,WAAW,EAAE,CAAC;QAEd,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAC1E,CAAC;CACJ"}
@@ -0,0 +1,55 @@
1
+ import { Joinpoint } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import { LaraJoinPoint } from "@specs-feup/lara/api/LaraJoinPoint.js";
3
+ import MISRARule from "../MISRARule.js";
4
+ import { AnalysisType, MISRATransformationReport } from "../MISRA.js";
5
+ /**
6
+ * Represents a MISRARule that requires the user to provide custom settings to assist in the automatic transformation.
7
+ *
8
+ * Need to implement/define:
9
+ * - analysisType
10
+ * - name()
11
+ * - getErrorMsgPrefix($jp)
12
+ * - getFixFromConfig($jp, errorMsgPrefix)
13
+ * - match($jp, logErrors)
14
+ * - apply($jp)
15
+ *
16
+ */
17
+ export default abstract class UserConfigurableRule extends MISRARule {
18
+ /**
19
+ * Specifies the scope of analysis: single unit or entire system.
20
+ */
21
+ abstract readonly analysisType: AnalysisType;
22
+ /**
23
+ * @returns Rule identifier according to MISRA-C:2012
24
+ */
25
+ abstract get name(): string;
26
+ /**
27
+ * Returns the prefix to be used for error messages related to the given joinpoint
28
+ *
29
+ * @param $jp - Joinpoint where the violation was detected
30
+ * @returns Returns a prefix to prepend to error messages if no configuration is specified or if the configuration does not contain a fix for this violation
31
+ */
32
+ protected abstract getErrorMsgPrefix($jp: Joinpoint): string;
33
+ /**
34
+ * Retrieves a fix for the given joinpoint using the provided configuration file
35
+ * @param $jp - Joinpoint where the violation was detected
36
+ * @return The fix retrieved from the configuration for the violation, or `undefined` if no applicable fix is found.
37
+ */
38
+ protected abstract getFixFromConfig($jp: Joinpoint): any;
39
+ /**
40
+ * Checks if the joinpoint violates the rule
41
+ *
42
+ * @param $jp - Joinpoint to analyze
43
+ * @param logErrors - [logErrors=false] - Whether to log errors if a violation is detected
44
+ * @returns Returns true if the joinpoint violates the rule, false otherwise
45
+ */
46
+ abstract match($jp: Joinpoint, logErrors: boolean): boolean;
47
+ /**
48
+ * Transforms the joinpoint to comply with the MISRA-C rule
49
+ *
50
+ * @param $jp - Joinpoint to transform
51
+ * @returns Report detailing the transformation result
52
+ */
53
+ abstract apply($jp: LaraJoinPoint): MISRATransformationReport;
54
+ }
55
+ //# sourceMappingURL=UserConfigurableRule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserConfigurableRule.d.ts","sourceRoot":"","sources":["../../src/rules/UserConfigurableRule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAEtE;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,oBAAqB,SAAQ,SAAS;IAChE;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IAE7C;;OAEG;IACH,aAAsB,IAAI,IAAI,MAAM,CAAC;IAErC;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM;IAE5D;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,EAAE,SAAS,GAAG,GAAG;IAExD;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO;IAE3D;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,yBAAyB;CAChE"}
@@ -0,0 +1,16 @@
1
+ import MISRARule from "../MISRARule.js";
2
+ /**
3
+ * Represents a MISRARule that requires the user to provide custom settings to assist in the automatic transformation.
4
+ *
5
+ * Need to implement/define:
6
+ * - analysisType
7
+ * - name()
8
+ * - getErrorMsgPrefix($jp)
9
+ * - getFixFromConfig($jp, errorMsgPrefix)
10
+ * - match($jp, logErrors)
11
+ * - apply($jp)
12
+ *
13
+ */
14
+ export default class UserConfigurableRule extends MISRARule {
15
+ }
16
+ //# sourceMappingURL=UserConfigurableRule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserConfigurableRule.js","sourceRoot":"","sources":["../../src/rules/UserConfigurableRule.ts"],"names":[],"mappings":"AAEA,OAAO,SAAS,MAAM,iBAAiB,CAAC;AAGxC;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,OAAO,OAAgB,oBAAqB,SAAQ,SAAS;CA0CnE"}
@@ -1,20 +1,13 @@
1
1
  import MISRAContext from "../MISRAContext.js";
2
- import Rule_16_2_TopLevelSwitch from "./Section16_SwitchStatements/Rule_16_2_TopLevelSwitch.js";
3
- import Rule_16_3_UnconditionalBreak from "./Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.js";
4
- import Rule_16_4_SwitchHasDefault from "./Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.js";
5
- import Rule_16_5_DefaultFirstOrLast from "./Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.js";
6
- import Rule_16_6_SwitchMinTwoClauses from "./Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.js";
7
- import Rule_16_7_NonBooleanSwitchCondition from "./Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.js";
8
- import Rule_17_4_NonVoidReturn from "./Section17_Functions/Rule_17_4_NonVoidReturn.js";
9
- import Rule_17_6_StaticArraySizeParam from "./Section17_Functions/Rule_17_6_StaticArraySizeParam.js";
10
- import Rule_17_7_UnusedReturnValue from "./Section17_Functions/Rule_17_7_UnusedReturnValue.js";
11
- import Rule_20_2_InvalidHeaderFileName from "./Section20-PreprocessingDirectives/Rule_20_2_InvalidHeaderFileName.js";
12
- import Rule_2_3_UnusedTypeDecl from "./Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.js";
13
- import Rule_2_4_UnusedTagDecl from "./Section2_UnusedCode/Rule_2_4_UnusedTagDecl.js";
14
- import Rule_2_6_UnusedLabels from "./Section2_UnusedCode/Rule_2_6_UnusedLabels.js";
15
- import Rule_2_7_UnusedParameters from "./Section2_UnusedCode/Rule_2_7_UnusedParameters.js";
16
- import Rule_3_1_CommentSequences from "./Section3_Comments/Rule_3_1_CommentSequences.js";
17
- import Rule_3_2_CommentSequences from "./Section3_Comments/Rule_3_2_LineSplicing.js";
18
- export declare function misraRules(context: MISRAContext): (Rule_16_2_TopLevelSwitch | Rule_16_3_UnconditionalBreak | Rule_16_4_SwitchHasDefault | Rule_16_5_DefaultFirstOrLast | Rule_16_6_SwitchMinTwoClauses | Rule_16_7_NonBooleanSwitchCondition | Rule_17_4_NonVoidReturn | Rule_17_6_StaticArraySizeParam | Rule_17_7_UnusedReturnValue | Rule_20_2_InvalidHeaderFileName | Rule_2_3_UnusedTypeDecl | Rule_2_4_UnusedTagDecl | Rule_2_6_UnusedLabels | Rule_2_7_UnusedParameters | Rule_3_1_CommentSequences | Rule_3_2_CommentSequences)[];
19
- export default misraRules;
2
+ import MISRARule from "../MISRARule.js";
3
+ /**
4
+ * Selects MISRA-C rules based on the provided analysis type.
5
+ * Returns rules sorted by priority (lower value has higher priority).
6
+ *
7
+ * @param context - The shared analysis context
8
+ * @param analysisType - Rule type to include ("all" for all rules).
9
+ * @returns Filtered and sorted list of MISRA rules.
10
+ */
11
+ export declare function selectRules(context: MISRAContext, analysisType: string): MISRARule[];
12
+ export default selectRules;
20
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,wBAAwB,MAAM,0DAA0D,CAAC;AAChG,OAAO,4BAA4B,MAAM,8DAA8D,CAAC;AACxG,OAAO,0BAA0B,MAAM,4DAA4D,CAAC;AACpG,OAAO,4BAA4B,MAAM,8DAA8D,CAAC;AACxG,OAAO,6BAA6B,MAAM,+DAA+D,CAAC;AAC1G,OAAO,mCAAmC,MAAM,qEAAqE,CAAC;AACtH,OAAO,uBAAuB,MAAM,kDAAkD,CAAC;AACvF,OAAO,8BAA8B,MAAM,yDAAyD,CAAC;AACrG,OAAO,2BAA2B,MAAM,sDAAsD,CAAC;AAC/F,OAAO,+BAA+B,MAAM,wEAAwE,CAAC;AACrH,OAAO,uBAAuB,MAAM,kDAAkD,CAAC;AACvF,OAAO,sBAAsB,MAAM,iDAAiD,CAAC;AACrF,OAAO,qBAAqB,MAAM,gDAAgD,CAAC;AACnF,OAAO,yBAAyB,MAAM,oDAAoD,CAAC;AAC3F,OAAO,yBAAyB,MAAM,kDAAkD,CAAC;AACzF,OAAO,yBAAyB,MAAM,8CAA8C,CAAC;AAErF,wBAAgB,UAAU,CAAC,OAAO,EAAE,YAAY,2dAmB/C;AAED,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,SAAS,MAAM,iBAAiB,CAAC;AAiCxC;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAqCtE;AAED,eAAe,WAAW,CAAC"}
@@ -1,38 +1,78 @@
1
+ import Rule_13_6_SafeSizeOfOperand from "./Section13_SideEffects/Rule_13_6_SafeSizeOfOperand.js";
1
2
  import Rule_16_2_TopLevelSwitch from "./Section16_SwitchStatements/Rule_16_2_TopLevelSwitch.js";
2
3
  import Rule_16_3_UnconditionalBreak from "./Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.js";
3
4
  import Rule_16_4_SwitchHasDefault from "./Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.js";
4
5
  import Rule_16_5_DefaultFirstOrLast from "./Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.js";
5
6
  import Rule_16_6_SwitchMinTwoClauses from "./Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.js";
6
7
  import Rule_16_7_NonBooleanSwitchCondition from "./Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.js";
8
+ import Rule_17_3_ImplicitFunction from "./Section17_Functions/Rule_17_3_ImplicitFunction.js";
7
9
  import Rule_17_4_NonVoidReturn from "./Section17_Functions/Rule_17_4_NonVoidReturn.js";
8
10
  import Rule_17_6_StaticArraySizeParam from "./Section17_Functions/Rule_17_6_StaticArraySizeParam.js";
9
11
  import Rule_17_7_UnusedReturnValue from "./Section17_Functions/Rule_17_7_UnusedReturnValue.js";
10
- import Rule_20_2_InvalidHeaderFileName from "./Section20-PreprocessingDirectives/Rule_20_2_InvalidHeaderFileName.js";
12
+ import Rule_21_10_NoTimeDateFunctions from "./Section21-StandardLibraries/Rule_21_10_NoTimeDateFunctions.js";
13
+ import Rule_21_11_NoTgmathFunctions from "./Section21-StandardLibraries/Rule_21_11_NoTgmathFunctions.js";
14
+ import Rule_21_3_NoDynamicMemory from "./Section21-StandardLibraries/Rule_21_3_NoDynamicMemory.js";
15
+ import Rule_21_6_NoStdIOFunctions from "./Section21-StandardLibraries/Rule_21_6_NoStdIOFunctions.js";
16
+ import Rule_21_7_NoNumericStringConversions from "./Section21-StandardLibraries/Rule_21_7_NoNumericStringConversions.js";
17
+ import Rule_21_8_NoProcessControlFunctions from "./Section21-StandardLibraries/Rule_21_8_NoProcessControlFunctions.js";
18
+ import Rule_21_9_NoGenericSearchOrSort from "./Section21-StandardLibraries/Rule_21_9_NoGenericSearchOrSort.js";
11
19
  import Rule_2_3_UnusedTypeDecl from "./Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.js";
12
20
  import Rule_2_4_UnusedTagDecl from "./Section2_UnusedCode/Rule_2_4_UnusedTagDecl.js";
13
21
  import Rule_2_6_UnusedLabels from "./Section2_UnusedCode/Rule_2_6_UnusedLabels.js";
14
22
  import Rule_2_7_UnusedParameters from "./Section2_UnusedCode/Rule_2_7_UnusedParameters.js";
15
23
  import Rule_3_1_CommentSequences from "./Section3_Comments/Rule_3_1_CommentSequences.js";
16
- import Rule_3_2_CommentSequences from "./Section3_Comments/Rule_3_2_LineSplicing.js";
17
- export function misraRules(context) {
18
- return [
24
+ import Rule_5_1_DistinctExternalIdentifiers from "./Section5_Identifiers/Rule_5_1_DistinctExternalIdentifiers.js";
25
+ import Rule_5_6_UniqueTypedefNames from "./Section5_Identifiers/Rule_5_6_UniqueTypedefNames.js";
26
+ import Rule_5_7_UniqueTagNames from "./Section5_Identifiers/Rule_5_7_UniqueTagNames.js";
27
+ import Rule_5_8_UniqueExternalLinkIdentifiers from "./Section5_Identifiers/Rule_5_8_UniqueExternalLinkIdentifiers.js";
28
+ import Rule_5_9_UniqueInternalLinkIdentifiers from "./Section5_Identifiers/Rule_5_9_UniqueInternalLinkIdentifiers.js";
29
+ import Rule_8_6_SingleExternalDefinition from "./Section8_DeclarationsAndDefinitions/Rule_8_6_SingleExternalDefinition.js";
30
+ import Rule_8_7_RestrictExternalLinkage from "./Section8_DeclarationsAndDefinitions/Rule_8_7_RestrictExternalLinkage.js";
31
+ import Rule_8_9_BlockScopeDefinition from "./Section8_DeclarationsAndDefinitions/Rule_8_9_BlockScopeDefinition.js";
32
+ /**
33
+ * Selects MISRA-C rules based on the provided analysis type.
34
+ * Returns rules sorted by priority (lower value has higher priority).
35
+ *
36
+ * @param context - The shared analysis context
37
+ * @param analysisType - Rule type to include ("all" for all rules).
38
+ * @returns Filtered and sorted list of MISRA rules.
39
+ */
40
+ export function selectRules(context, analysisType) {
41
+ let rules = [
19
42
  new Rule_2_3_UnusedTypeDecl(context),
20
43
  new Rule_2_4_UnusedTagDecl(context),
21
44
  new Rule_2_6_UnusedLabels(context),
22
45
  new Rule_2_7_UnusedParameters(context),
23
46
  new Rule_3_1_CommentSequences(context),
24
- new Rule_3_2_CommentSequences(context),
47
+ new Rule_5_1_DistinctExternalIdentifiers(context),
48
+ new Rule_5_6_UniqueTypedefNames(context),
49
+ new Rule_5_7_UniqueTagNames(context),
50
+ new Rule_5_8_UniqueExternalLinkIdentifiers(context),
51
+ new Rule_5_9_UniqueInternalLinkIdentifiers(context),
52
+ new Rule_8_6_SingleExternalDefinition(context),
53
+ new Rule_8_7_RestrictExternalLinkage(context),
54
+ new Rule_8_9_BlockScopeDefinition(context),
55
+ new Rule_13_6_SafeSizeOfOperand(context),
25
56
  new Rule_16_2_TopLevelSwitch(context),
26
57
  new Rule_16_3_UnconditionalBreak(context),
27
58
  new Rule_16_4_SwitchHasDefault(context),
28
59
  new Rule_16_5_DefaultFirstOrLast(context),
29
60
  new Rule_16_6_SwitchMinTwoClauses(context),
30
61
  new Rule_16_7_NonBooleanSwitchCondition(context),
62
+ new Rule_17_3_ImplicitFunction(context),
31
63
  new Rule_17_4_NonVoidReturn(context),
32
64
  new Rule_17_6_StaticArraySizeParam(context),
33
65
  new Rule_17_7_UnusedReturnValue(context),
34
- new Rule_20_2_InvalidHeaderFileName(context),
66
+ new Rule_21_3_NoDynamicMemory(context),
67
+ new Rule_21_6_NoStdIOFunctions(context),
68
+ new Rule_21_7_NoNumericStringConversions(context),
69
+ new Rule_21_8_NoProcessControlFunctions(context),
70
+ new Rule_21_9_NoGenericSearchOrSort(context),
71
+ new Rule_21_10_NoTimeDateFunctions(context),
72
+ new Rule_21_11_NoTgmathFunctions(context)
35
73
  ];
74
+ rules.sort((ruleA, ruleB) => ruleA.priority - ruleB.priority);
75
+ return analysisType === "all" ? rules : rules.filter(rule => rule.analysisType === analysisType);
36
76
  }
37
- export default misraRules;
77
+ export default selectRules;
38
78
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AACA,OAAO,wBAAwB,MAAM,0DAA0D,CAAC;AAChG,OAAO,4BAA4B,MAAM,8DAA8D,CAAC;AACxG,OAAO,0BAA0B,MAAM,4DAA4D,CAAC;AACpG,OAAO,4BAA4B,MAAM,8DAA8D,CAAC;AACxG,OAAO,6BAA6B,MAAM,+DAA+D,CAAC;AAC1G,OAAO,mCAAmC,MAAM,qEAAqE,CAAC;AACtH,OAAO,uBAAuB,MAAM,kDAAkD,CAAC;AACvF,OAAO,8BAA8B,MAAM,yDAAyD,CAAC;AACrG,OAAO,2BAA2B,MAAM,sDAAsD,CAAC;AAC/F,OAAO,+BAA+B,MAAM,wEAAwE,CAAC;AACrH,OAAO,uBAAuB,MAAM,kDAAkD,CAAC;AACvF,OAAO,sBAAsB,MAAM,iDAAiD,CAAC;AACrF,OAAO,qBAAqB,MAAM,gDAAgD,CAAC;AACnF,OAAO,yBAAyB,MAAM,oDAAoD,CAAC;AAC3F,OAAO,yBAAyB,MAAM,kDAAkD,CAAC;AACzF,OAAO,yBAAyB,MAAM,8CAA8C,CAAC;AAErF,MAAM,UAAU,UAAU,CAAC,OAAqB;IAC5C,OAAO;QACH,IAAI,uBAAuB,CAAC,OAAO,CAAC;QACpC,IAAI,sBAAsB,CAAC,OAAO,CAAC;QACnC,IAAI,qBAAqB,CAAC,OAAO,CAAC;QAClC,IAAI,yBAAyB,CAAC,OAAO,CAAC;QACtC,IAAI,yBAAyB,CAAC,OAAO,CAAC;QACtC,IAAI,yBAAyB,CAAC,OAAO,CAAC;QACtC,IAAI,wBAAwB,CAAC,OAAO,CAAC;QACrC,IAAI,4BAA4B,CAAC,OAAO,CAAC;QACzC,IAAI,0BAA0B,CAAC,OAAO,CAAC;QACvC,IAAI,4BAA4B,CAAC,OAAO,CAAC;QACzC,IAAI,6BAA6B,CAAC,OAAO,CAAC;QAC1C,IAAI,mCAAmC,CAAC,OAAO,CAAC;QAChD,IAAI,uBAAuB,CAAC,OAAO,CAAC;QACpC,IAAI,8BAA8B,CAAC,OAAO,CAAC;QAC3C,IAAI,2BAA2B,CAAC,OAAO,CAAC;QACxC,IAAI,+BAA+B,CAAC,OAAO,CAAC;KAC/C,CAAC;AACN,CAAC;AAED,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,16 @@
5
5
  "float": 0.0,
6
6
  "enum Status": "SUCCESS",
7
7
  "Color": "RED",
8
+ "Size": "MEDIUM",
8
9
  "my_int_type": 0
10
+ },
11
+ "implicitCalls": {
12
+ "toupper": "ctype.h",
13
+ "toupper_transformation": "ctype.h",
14
+ "sin": "math.h",
15
+ "pow": "math.h",
16
+ "half": "math.h",
17
+ "foo_17_3": "good.c",
18
+ "test_17_3_1": "good.c"
9
19
  }
10
20
  }
@@ -0,0 +1,88 @@
1
+ {
2
+ "disallowedFunctions": {
3
+ "stdlib.h": {
4
+ "malloc": {
5
+ "replacement": "my_malloc",
6
+ "location": "custom_stdlib.c"
7
+ },
8
+ "calloc": {
9
+ "replacement": "my_calloc",
10
+ "location": "custom_stdlib.c"
11
+ },
12
+ "realloc": {
13
+ "replacement": "my_realloc",
14
+ "location": "custom_stdlib.c"
15
+ },
16
+ "free": {
17
+ "replacement": "my_free",
18
+ "location": "custom_stdlib.c"
19
+ },
20
+ "atof": {
21
+ "replacement": "my_atof",
22
+ "location": "custom_stdlib.c"
23
+ },
24
+ "atoi": {
25
+ "replacement": "my_atoi",
26
+ "location": "custom_stdlib.c"
27
+ },
28
+ "atol": {
29
+ "replacement": "my_atol",
30
+ "location": "custom_stdlib.c"
31
+ },
32
+ "atoll": {
33
+ "replacement": "my_atoll",
34
+ "location": "custom_stdlib.c"
35
+ },
36
+ "abort": {
37
+ "replacement": "my_abort",
38
+ "location": "custom_stdlib.c"
39
+ },
40
+ "exit": {
41
+ "replacement": "my_exit",
42
+ "location": "custom_stdlib.c"
43
+ },
44
+ "getenv": {
45
+ "replacement": "my_getenv",
46
+ "location": "custom_stdlib.c"
47
+ },
48
+ "system": {
49
+ "replacement": "my_system",
50
+ "location": "custom_stdlib.c"
51
+ },
52
+ "qsort": {
53
+ "replacement": "my_qsort",
54
+ "location": "custom_stdlib.c"
55
+ },
56
+ "bsearch": {
57
+ "replacement": "my_bsearch",
58
+ "location": "custom_stdlib.c"
59
+ }
60
+ },
61
+ "stdio.h": {
62
+ "printf": {
63
+ "replacement": "my_printf",
64
+ "location": "custom_stdio.c"
65
+ },
66
+ "fgets": {
67
+ "replacement": "my_fgets",
68
+ "location": "custom_stdio.c"
69
+ }
70
+ },
71
+ "time.h": {
72
+ "difftime": {
73
+ "replacement": "my_difftime",
74
+ "location": "custom_time.c"
75
+ },
76
+ "clock": {
77
+ "replacement": "my_clock",
78
+ "location": "custom_time.c"
79
+ }
80
+ },
81
+ "tgmath.h": {
82
+ "__tg_sqrt": {
83
+ "replacement": "my_sqrt",
84
+ "location": "custom_math.c"
85
+ }
86
+ }
87
+ }
88
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "disallowedFunctions": {
3
+ "stdlib.h": {
4
+ "malloc": {
5
+ "replacement": "my_malloc",
6
+ "location": "custom_stdlib.c"
7
+ },
8
+ "calloc": {
9
+ "replacement": "my_calloc",
10
+ "location": "custom_stdlib.c"
11
+ },
12
+ "realloc": {
13
+ "replacement": "my_realloc",
14
+ "location": "custom_stdlib.c"
15
+ },
16
+ "free": {}
17
+ }
18
+ }
19
+ }
@@ -1,10 +1,13 @@
1
1
  import { FileJp, Program } from "@specs-feup/clava/api/Joinpoints.js";
2
- export declare function countMISRAErrors(startingPoint?: FileJp | Program): number;
3
- export declare function countErrorsAfterCorrection(configPath?: string): number;
2
+ export declare function countMISRAErrors(): number;
3
+ export declare function countMISRAErrors(ruleID: string): number;
4
+ export declare function countMISRAErrors(startingPoint: FileJp | Program): number;
5
+ export declare function countMISRAErrors(startingPoint: FileJp | Program, ruleID: string): number;
6
+ export declare function countErrorsAfterCorrection(ruleID?: string): number;
4
7
  export interface TestFile {
5
8
  name: string;
6
9
  code: string;
7
10
  path?: string;
8
11
  }
9
- export declare function registerSourceCode(files: TestFile[]): void;
12
+ export declare function registerSourceCode(files: TestFile[], configPath?: string): void;
10
13
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/tests/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAGtE,wBAAgB,gBAAgB,CAAC,aAAa,GAAE,MAAM,GAAG,OAAiC,GAAG,MAAM,CAGlG;AAED,wBAAgB,0BAA0B,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAGtE;AAED,MAAM,WAAW,QAAQ;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CAgB1D"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/tests/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAKtE,wBAAgB,gBAAgB,IAAI,MAAM,CAAC;AAC3C,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;AACzD,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAC1E,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;AAqB1F,wBAAgB,0BAA0B,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAMlE;AAED,MAAM,WAAW,QAAQ;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CA6B/E"}
@@ -2,17 +2,43 @@ import MISRATool from "../MISRATool.js";
2
2
  import Clava from "@specs-feup/clava/api/clava/Clava.js";
3
3
  import ClavaJoinPoints from "@specs-feup/clava/api/clava/ClavaJoinPoints.js";
4
4
  import Query from "@specs-feup/lara/api/weaver/Query.js";
5
- export function countMISRAErrors(startingPoint = Query.root()) {
5
+ import * as os from 'os';
6
+ import { resetCaches } from "../utils/ProgramUtils.js";
7
+ export function countMISRAErrors(arg1, arg2) {
8
+ let startingPoint;
9
+ let ruleID;
10
+ if (typeof arg1 === "string") {
11
+ ruleID = arg1;
12
+ startingPoint = Query.root();
13
+ }
14
+ else {
15
+ startingPoint = arg1 ?? Query.root();
16
+ ruleID = arg2;
17
+ }
6
18
  MISRATool.checkCompliance(startingPoint);
7
- return MISRATool.getMISRAErrors().length;
19
+ return ruleID ?
20
+ MISRATool.context.errors.filter(error => error.ruleID === ruleID).length :
21
+ MISRATool.getErrorCount();
8
22
  }
9
- export function countErrorsAfterCorrection(configPath) {
10
- MISRATool.applyCorrections(configPath);
11
- return MISRATool.getMISRAErrors().length;
23
+ export function countErrorsAfterCorrection(ruleID) {
24
+ MISRATool.correctViolations();
25
+ return ruleID ?
26
+ MISRATool.context.activeErrors.filter(error => error.ruleID === ruleID).length :
27
+ MISRATool.getActiveErrorCount();
12
28
  }
13
- export function registerSourceCode(files) {
29
+ export function registerSourceCode(files, configPath) {
14
30
  beforeEach(() => {
15
- Clava.getData().setStandard(process.env.STD_VERSION);
31
+ resetCaches();
32
+ const dataStore = Clava.getData();
33
+ dataStore.setStandard(process.env.STD_VERSION);
34
+ dataStore.put("argv", configPath ? `config=${configPath}` : undefined);
35
+ // If running on macOS, change libcCxxMode
36
+ if (os.platform() === 'darwin') {
37
+ const key = "libcCxxMode";
38
+ const allowedValues = dataStore.getType(key).getEnumConstants();
39
+ const systemValue = allowedValues.find((value) => value.name() === "SYSTEM");
40
+ dataStore.put(key, systemValue);
41
+ }
16
42
  Clava.getProgram().push();
17
43
  const program = Clava.getProgram();
18
44
  files.forEach(file => {
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/tests/utils.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,MAAM,sCAAsC,CAAC;AACzD,OAAO,eAAe,MAAM,gDAAgD,CAAC;AAE7E,OAAO,KAAK,MAAM,sCAAsC,CAAC;AAEzD,MAAM,UAAU,gBAAgB,CAAC,gBAAkC,KAAK,CAAC,IAAI,EAAa;IACxF,SAAS,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;IACzC,OAAO,SAAS,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,UAAmB;IAC5D,SAAS,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACvC,OAAO,SAAS,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC;AAC3C,CAAC;AAQD,MAAM,UAAU,kBAAkB,CAAC,KAAiB;IAChD,UAAU,CAAC,GAAG,EAAE;QACd,KAAK,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,WAAY,CAAC,CAAC;QACtD,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;QACnC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACnB,MAAM,UAAU,GAAG,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACnF,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,OAAO,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,CAAC;QAC7B,KAAK,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/tests/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { Call, FileJp } from "@specs-feup/clava/api/Joinpoints.js";
2
+ /**
3
+ * Checks if the given joinpoint represents a call to an implicit function.
4
+ *
5
+ * @param callJp The call join point to analyze
6
+ */
7
+ export declare function isCallToImplicitFunction(callJp: Call): boolean;
8
+ /**
9
+ * Computes the index of a call in a file
10
+ * @param fileJp The file to search in
11
+ * @param callJp The call to find
12
+ * @returns The index of the call or -1 if not found
13
+ */
14
+ export declare function getCallIndex(fileJp: FileJp, callJp: Call): number;
15
+ //# sourceMappingURL=CallUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CallUtils.d.ts","sourceRoot":"","sources":["../../src/utils/CallUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAsB,MAAM,qCAAqC,CAAC;AAGvF;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAkB9D;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAG,MAAM,CAEjE"}
@@ -0,0 +1,34 @@
1
+ import { Call, FunctionJp, Varref } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import Query from "@specs-feup/lara/api/weaver/Query.js";
3
+ /**
4
+ * Checks if the given joinpoint represents a call to an implicit function.
5
+ *
6
+ * @param callJp The call join point to analyze
7
+ */
8
+ export function isCallToImplicitFunction(callJp) {
9
+ if (callJp.function?.isInSystemHeader) { // Call to system header function
10
+ return false;
11
+ }
12
+ const varrefs = Query.searchFrom(callJp, Varref, { isFunctionCall: false }).get().map(varRef => varRef.astId);
13
+ const args = new Set(callJp.argList.flatMap(arg => Query.searchFromInclusive(arg, Varref).get().map(varRef => varRef.astId)));
14
+ if (varrefs.length > 0 && !args.has(varrefs[0])) { // Call using function pointer
15
+ return false;
16
+ }
17
+ const directCallee = callJp.directCallee;
18
+ if (directCallee === undefined)
19
+ return true;
20
+ const fileJp = directCallee.getAncestor("file");
21
+ if (fileJp === undefined)
22
+ return true;
23
+ return Query.searchFrom(fileJp, FunctionJp, { name: callJp.name }).get().length === 0;
24
+ }
25
+ /**
26
+ * Computes the index of a call in a file
27
+ * @param fileJp The file to search in
28
+ * @param callJp The call to find
29
+ * @returns The index of the call or -1 if not found
30
+ */
31
+ export function getCallIndex(fileJp, callJp) {
32
+ return Query.searchFrom(fileJp, Call, { name: callJp.name }).get().findIndex(c => c.equals(callJp));
33
+ }
34
+ //# sourceMappingURL=CallUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CallUtils.js","sourceRoot":"","sources":["../../src/utils/CallUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAU,UAAU,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AACvF,OAAO,KAAK,MAAM,sCAAsC,CAAC;AAEzD;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAY;IACjD,IAAK,MAAM,CAAC,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAC,iCAAiC;QACvE,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,EAAC,cAAc,EAAE,KAAK,EAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5G,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9H,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,8BAA8B;QAC7E,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;IACzC,IAAI,YAAY,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5C,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAChD,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAEtC,OAAO,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,EAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAC,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC;AACxF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,MAAY;IACrD,OAAO,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AACxG,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { Joinpoint, Comment } from "@specs-feup/clava/api/Joinpoints.js";
2
+ /**
3
+ * Checks if the comment is an inline comment
4
+ * @param $comment - The comment to check
5
+ * @returns Returns true if it's an inline comment, otherwise returns false
6
+ */
7
+ export declare function isInlineComment($comment: Comment): boolean;
8
+ /**
9
+ * Retrieves all comments associated with a given joinpoint
10
+ * @param $jp - The joinpoint to retrieve comments from
11
+ * @returns Array of comments
12
+ */
13
+ export declare function getComments($jp: Joinpoint): Comment[];
14
+ /**
15
+ * Checks if a given join point is a comment statement
16
+ *
17
+ * @param $jp The join point to check
18
+ * @returns Returns true if the given join point is a comment statement, otherwise false
19
+ */
20
+ export declare function isCommentStmt($jp: Joinpoint): boolean;
21
+ //# sourceMappingURL=CommentUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommentUtils.d.ts","sourceRoot":"","sources":["../../src/utils/CommentUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAe,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAEtF;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAE1D;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,EAAE,CAErD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAErD"}
@@ -0,0 +1,27 @@
1
+ import { WrapperStmt, Comment } from "@specs-feup/clava/api/Joinpoints.js";
2
+ /**
3
+ * Checks if the comment is an inline comment
4
+ * @param $comment - The comment to check
5
+ * @returns Returns true if it's an inline comment, otherwise returns false
6
+ */
7
+ export function isInlineComment($comment) {
8
+ return $comment.astName === "InlineComment";
9
+ }
10
+ /**
11
+ * Retrieves all comments associated with a given joinpoint
12
+ * @param $jp - The joinpoint to retrieve comments from
13
+ * @returns Array of comments
14
+ */
15
+ export function getComments($jp) {
16
+ return $jp instanceof Comment ? [$jp] : $jp.inlineComments;
17
+ }
18
+ /**
19
+ * Checks if a given join point is a comment statement
20
+ *
21
+ * @param $jp The join point to check
22
+ * @returns Returns true if the given join point is a comment statement, otherwise false
23
+ */
24
+ export function isCommentStmt($jp) {
25
+ return $jp instanceof WrapperStmt && $jp.kind === "comment";
26
+ }
27
+ //# sourceMappingURL=CommentUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommentUtils.js","sourceRoot":"","sources":["../../src/utils/CommentUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,WAAW,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAEtF;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,QAAiB;IAC7C,OAAO,QAAQ,CAAC,OAAO,KAAK,eAAe,CAAC;AAChD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,GAAc;IACtC,OAAO,GAAG,YAAY,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC;AAC/D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,GAAc;IACxC,OAAO,GAAG,YAAY,WAAW,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC;AAChE,CAAC"}