@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
@@ -0,0 +1,209 @@
1
+ import { Call, Program } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import { AnalysisType, MISRATransformationReport, MISRATransformationType } from "../../MISRA.js";
3
+ import { findFunctionDef } from "../../utils/FunctionUtils.js";
4
+ import { getCallIndex, isCallToImplicitFunction } from "../../utils/CallUtils.js";
5
+ import Query from "@specs-feup/lara/api/weaver/Query.js";
6
+ import { addExternFunctionDecl, getFilesWithCallToImplicitFunction, getIncludesOfFile, isValidFileWithExplicitCall, removeIncludeFromFile } from "../../utils/FileUtils.js";
7
+ import UserConfigurableRule from "../UserConfigurableRule.js";
8
+ /**
9
+ * MISRA-C Rule 17.3: A function shall not be declared implicitly
10
+ */
11
+ export default class Rule_17_3_ImplicitFunction extends UserConfigurableRule {
12
+ /**
13
+ * A positive integer starting from 1 that indicates the rule's priority, determining the order in which rules are applied.
14
+ */
15
+ priority = 1;
16
+ /**
17
+ * Scope of analysis
18
+ */
19
+ analysisType = AnalysisType.SINGLE_TRANSLATION_UNIT;
20
+ /**
21
+ * Standards to which this rule applies to
22
+ */
23
+ appliesTo = new Set(["c90"]);
24
+ /**
25
+ * @returns Rule identifier according to MISRA-C:2012
26
+ */
27
+ get name() {
28
+ return "17.3";
29
+ }
30
+ /**
31
+ * Returns the prefix to be used for error messages related to the given joinpoint
32
+ *
33
+ * @param $jp - Joinpoint where the violation was detected
34
+ * @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
35
+ */
36
+ getErrorMsgPrefix(callJp) {
37
+ return `Function '${callJp.name}' is declared implicitly.`;
38
+ }
39
+ /**
40
+ * Retrieves the fix for a implicit call specified on the config file (.h or .c)
41
+ * @param callJp
42
+ * @param errorMsgPrefix
43
+ * @returns
44
+ */
45
+ getFixFromConfig(callJp) {
46
+ const errorMsgPrefix = this.getErrorMsgPrefix(callJp);
47
+ if (!this.context.config) {
48
+ this.logMISRAError(callJp, `${errorMsgPrefix} Include or extern not added due to missing config file.`);
49
+ return undefined;
50
+ }
51
+ let configFix;
52
+ try {
53
+ configFix = this.context.config.get("implicitCalls")[callJp.name];
54
+ }
55
+ catch {
56
+ this.logMISRAError(callJp, `${errorMsgPrefix} Include or extern was not added as \'implicitCalls\' is not defined in the configuration file.`);
57
+ return undefined;
58
+ }
59
+ if (configFix === undefined) {
60
+ this.logMISRAError(callJp, `${errorMsgPrefix} Couldn't add include or extern due to missing configuration for function '${callJp.name}'.`);
61
+ return undefined;
62
+ }
63
+ if (!(configFix.endsWith(".h") || configFix.endsWith(".c"))) {
64
+ this.logMISRAError(callJp, `${errorMsgPrefix} Cannot add include or extern without a .h or .c reference.`);
65
+ return undefined;
66
+ }
67
+ return configFix;
68
+ }
69
+ /**
70
+ * Checks if the given joinpoint represents a call to an implicit function.
71
+ *
72
+ * @param $jp - Joinpoint to analyze
73
+ * @param logErrors - [logErrors=false] - Whether to log errors if a violation is detected
74
+ * @returns Returns true if the joinpoint violates the rule, false otherwise
75
+ */
76
+ match($jp, logErrors = false) {
77
+ if (!($jp instanceof Program && this.appliesToCurrentStandard()))
78
+ return false;
79
+ const implicitCalls = Query.searchFrom($jp, Call, (callJp) => isCallToImplicitFunction(callJp)).get();
80
+ if (logErrors) {
81
+ for (const callJp of implicitCalls) {
82
+ this.logMISRAError(callJp, this.getErrorMsgPrefix(callJp));
83
+ }
84
+ }
85
+ return implicitCalls.length > 0;
86
+ }
87
+ /**
88
+ * Transforms every implicit call by adding a missing include directive or extern statement specified on the config file.
89
+ *
90
+ * - If the configuration is missing or the specified fix is invalid (i.e., not a '.h' or '.c' file), no transformation is performed and the call is left unchanged.
91
+ * - The fix is applied only if it successfully resolves the issue (i.e., makes the call explicit and the file compiles with no error).
92
+ * - Otherwise, the fix is removed.
93
+ *
94
+ * @param $jp - Joinpoint to transform
95
+ * @returns Report detailing the transformation result
96
+ */
97
+ apply($jp) {
98
+ if (!this.match($jp))
99
+ return new MISRATransformationReport(MISRATransformationType.NoChange);
100
+ const filesWithImplicitCall = getFilesWithCallToImplicitFunction($jp);
101
+ let changedDescendant = false;
102
+ for (const fileJp of filesWithImplicitCall) {
103
+ if (this.solveImplicitCalls(fileJp)) {
104
+ changedDescendant = true;
105
+ }
106
+ }
107
+ if (changedDescendant) {
108
+ this.rebuildProgram();
109
+ return new MISRATransformationReport(MISRATransformationType.Replacement, Query.root());
110
+ }
111
+ else {
112
+ return new MISRATransformationReport(MISRATransformationType.NoChange);
113
+ }
114
+ }
115
+ /**
116
+ * Attempts to resolve implicit function calls in a file by adding missing includes or extern statements based on the configuration file.
117
+ * @param fileJp The file to analyze
118
+ * @returns `true` if any changes were made to the file, otherwise `false`.
119
+ */
120
+ solveImplicitCalls(fileJp) {
121
+ const implicitCalls = Query.searchFrom(fileJp, Call, (callJp) => (isCallToImplicitFunction(callJp))).get();
122
+ const originalIncludes = getIncludesOfFile(fileJp);
123
+ let solvedCalls = new Set();
124
+ let addedIncludes = new Set();
125
+ let changedFile = false;
126
+ for (const callJp of implicitCalls) {
127
+ if (this.context.getRuleResult(this.ruleID, callJp) === MISRATransformationType.NoChange) {
128
+ continue;
129
+ }
130
+ if (solvedCalls.has(callJp.name)) {
131
+ continue;
132
+ }
133
+ const configFix = this.getFixFromConfig(callJp);
134
+ if (configFix === undefined) {
135
+ this.context.addRuleResult(this.ruleID, callJp, MISRATransformationType.NoChange);
136
+ continue;
137
+ }
138
+ const callIndex = getCallIndex(fileJp, callJp);
139
+ const isInclude = configFix.endsWith(".h");
140
+ const success = isInclude ?
141
+ this.solveWithInclude(fileJp, callJp, configFix, originalIncludes, addedIncludes, callIndex) :
142
+ this.solveWithExtern(fileJp, callJp, configFix, callIndex);
143
+ if (success) {
144
+ solvedCalls.add(callJp.name);
145
+ changedFile = true;
146
+ if (isInclude) {
147
+ addedIncludes.add(configFix);
148
+ }
149
+ }
150
+ else {
151
+ this.context.addRuleResult(this.ruleID, callJp, MISRATransformationType.NoChange);
152
+ }
153
+ }
154
+ return changedFile;
155
+ }
156
+ solveWithInclude(fileJp, callJp, includePath, originalIncludes, addedIncludes, callIndex) {
157
+ const errorMsgPrefix = this.getErrorMsgPrefix(callJp);
158
+ let success = false;
159
+ if (originalIncludes.has(includePath)) {
160
+ this.logMISRAError(callJp, `${errorMsgPrefix} Provided include \'${includePath}\' does not fix the violation.`);
161
+ }
162
+ else if (addedIncludes.has(includePath)) {
163
+ if (isValidFileWithExplicitCall(fileJp, callJp.name, callIndex)) {
164
+ success = true;
165
+ }
166
+ else {
167
+ this.logMISRAError(callJp, `${errorMsgPrefix} Provided include \'${includePath}\' does not fix the violation.`);
168
+ }
169
+ }
170
+ else {
171
+ fileJp.addInclude(includePath);
172
+ const fileCompiles = isValidFileWithExplicitCall(fileJp, callJp.name, callIndex);
173
+ if (fileCompiles) {
174
+ success = true;
175
+ }
176
+ else {
177
+ removeIncludeFromFile(includePath, fileJp);
178
+ this.logMISRAError(callJp, `${errorMsgPrefix} Provided include \'${includePath}\' does not fix the violation.`);
179
+ }
180
+ }
181
+ return success;
182
+ }
183
+ solveWithExtern(fileJp, callJp, functionLocation, callIndex) {
184
+ const errorMsgPrefix = this.getErrorMsgPrefix(callJp);
185
+ const functionDef = findFunctionDef(callJp.name, functionLocation);
186
+ let success = false;
187
+ if (!functionDef) {
188
+ this.logMISRAError(callJp, `${errorMsgPrefix} Provided file \'${functionLocation}\' does not have function definition.`);
189
+ }
190
+ else {
191
+ const externDecl = addExternFunctionDecl(fileJp, functionDef);
192
+ if (!externDecl) {
193
+ this.logMISRAError(callJp, `${errorMsgPrefix} Provided definition at \'${functionLocation}\' does not have external linkage.`);
194
+ }
195
+ else {
196
+ const fileCompiles = isValidFileWithExplicitCall(fileJp, callJp.name, callIndex, true);
197
+ if (fileCompiles) {
198
+ success = true;
199
+ }
200
+ else {
201
+ externDecl.detach();
202
+ this.logMISRAError(callJp, `${errorMsgPrefix} Provided definition at \'${functionLocation}\' does not fix the violation.`);
203
+ }
204
+ }
205
+ }
206
+ return success;
207
+ }
208
+ }
209
+ //# sourceMappingURL=Rule_17_3_ImplicitFunction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rule_17_3_ImplicitFunction.js","sourceRoot":"","sources":["../../../src/rules/Section17_Functions/Rule_17_3_ImplicitFunction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAqB,OAAO,EAAE,MAAM,qCAAqC,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAClG,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAClF,OAAO,KAAK,MAAM,sCAAsC,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,kCAAkC,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAC5K,OAAO,oBAAoB,MAAM,4BAA4B,CAAC;AAE9D;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,0BAA2B,SAAQ,oBAAoB;IACxE;;OAEG;IACM,QAAQ,GAAG,CAAC,CAAC;IAEtB;;OAEG;IACM,YAAY,GAAG,YAAY,CAAC,uBAAuB,CAAC;IAE7D;;OAEG;IACyB,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAEzD;;OAEG;IACH,IAAa,IAAI;QACb,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;;OAKG;IACH,iBAAiB,CAAC,MAAY;QAC1B,OAAO,aAAa,MAAM,CAAC,IAAI,2BAA2B,CAAC;IAC/D,CAAC;IAED;;;;;OAKG;IACH,gBAAgB,CAAC,MAAY;QACzB,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAEtD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACvB,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,cAAc,0DAA0D,CAAC,CAAC;YACxG,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,IAAI,SAA6B,CAAC;QAClC,IAAI,CAAC;YACD,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACtE,CAAC;QAAC,MAAM,CAAC;YACL,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,cAAc,iGAAiG,CAAC,CAAC;YAC/I,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,cAAc,8EAA8E,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;YAC3I,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAC1D,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,cAAc,6DAA6D,CAAC,CAAC;YAC3G,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,GAAc,EAAE,YAAqB,KAAK;QAC5C,IAAI,CAAC,CAAC,GAAG,YAAY,OAAO,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAAE,OAAO,KAAK,CAAC;QAE/E,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC,CAAE,GAAG,EAAE,CAAC;QACvG,IAAI,SAAS,EAAE,CAAC;YACZ,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;gBACjC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/D,CAAC;QACL,CAAC;QAED,OAAO,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;IACpC,CAAC;IAED;;;;;;;;;OASG;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,qBAAqB,GAAG,kCAAkC,CAAC,GAAc,CAAC,CAAC;QACjF,IAAI,iBAAiB,GAAG,KAAK,CAAC;QAE9B,KAAK,MAAM,MAAM,IAAI,qBAAqB,EAAE,CAAC;YACzC,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClC,iBAAiB,GAAG,IAAI,CAAC;YAC7B,CAAC;QACL,CAAC;QAED,IAAI,iBAAiB,EAAE,CAAC;YACpB,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,EAAa,CAAC,CAAC;QACvG,CAAC;aAAM,CAAC;YACJ,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAC3E,CAAC;IACL,CAAC;IAED;;;;OAIG;IACK,kBAAkB,CAAC,MAAc;QACrC,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAC3G,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;QACpC,IAAI,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;QACtC,IAAI,WAAW,GAAG,KAAK,CAAC;QAExB,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,uBAAuB,CAAC,QAAQ,EAAE,CAAC;gBACvF,SAAS;YACb,CAAC;YAED,IAAI,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,SAAS;YACb,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAChD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC1B,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,uBAAuB,CAAC,QAAQ,CAAC,CAAC;gBAClF,SAAS;YACb,CAAC;YAED,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC/C,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC;gBACvB,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC;gBAC9F,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;YAE/D,IAAI,OAAO,EAAE,CAAC;gBACV,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC7B,WAAW,GAAG,IAAI,CAAC;gBACnB,IAAI,SAAS,EAAE,CAAC;oBACZ,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACjC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,uBAAuB,CAAC,QAAQ,CAAC,CAAC;YACtF,CAAC;QACL,CAAC;QACD,OAAO,WAAW,CAAC;IACvB,CAAC;IAEO,gBAAgB,CAAC,MAAc,EAAE,MAAY,EAAE,WAAmB,EAAE,gBAA6B,EAAE,aAA0B,EAAE,SAAiB;QACpJ,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,IAAI,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,cAAc,uBAAuB,WAAW,gCAAgC,CAAC,CAAC;QACpH,CAAC;aACI,IAAI,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAEtC,IAAI,2BAA2B,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC;gBAC9D,OAAO,GAAG,IAAI,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,cAAc,uBAAuB,WAAW,gCAAgC,CAAC,CAAC;YACpH,CAAC;QACL,CAAC;aACI,CAAC;YACF,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAC/B,MAAM,YAAY,GAAG,2BAA2B,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAEjF,IAAI,YAAY,EAAE,CAAC;gBACf,OAAO,GAAG,IAAI,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACJ,qBAAqB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;gBAC3C,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,cAAc,uBAAuB,WAAW,gCAAgC,CAAC,CAAC;YACpH,CAAC;QACL,CAAC;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IAEO,eAAe,CAAC,MAAc,EAAE,MAAY,EAAE,gBAAwB,EAAE,SAAiB;QAC7F,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACtD,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;QACnE,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,IAAI,CAAC,WAAW,EAAE,CAAC;YACf,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,cAAc,oBAAoB,gBAAgB,uCAAuC,CAAC,CAAC;QAC7H,CAAC;aAAM,CAAC;YACJ,MAAM,UAAU,GAAG,qBAAqB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAE9D,IAAI,CAAC,UAAU,EAAE,CAAC;gBACd,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,cAAc,6BAA6B,gBAAgB,oCAAoC,CAAC,CAAC;YACnI,CAAC;iBAAM,CAAC;gBACJ,MAAM,YAAY,GAAG,2BAA2B,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;gBACvF,IAAI,YAAY,EAAE,CAAC;oBACf,OAAO,GAAG,IAAI,CAAC;gBACnB,CAAC;qBAAM,CAAC;oBACJ,UAAU,CAAC,MAAM,EAAE,CAAC;oBACpB,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,cAAc,6BAA6B,gBAAgB,gCAAgC,CAAC,CAAC;gBAC/H,CAAC;YACL,CAAC;QACL,CAAC;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ"}
@@ -1,15 +1,20 @@
1
- import { Joinpoint } from "@specs-feup/clava/api/Joinpoints.js";
2
- import MISRARule from "../../MISRARule.js";
3
- import MISRAContext from "../../MISRAContext.js";
4
- import { MISRATransformationReport } from "../../MISRA.js";
1
+ import { FunctionJp, Joinpoint } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import { AnalysisType, MISRATransformationReport } from "../../MISRA.js";
3
+ import UserConfigurableRule from "../UserConfigurableRule.js";
5
4
  /**
6
- * MISRA Rule 17.4: All exit paths from a function with non-void return type shall have an
7
- explicit return statement with an expression. In a non-void function:
8
- - Every return statement has an expression, and a
9
- - Control cannot reach the end of the function without encountering a return statement
5
+ * MISRA-C Rule 17.4: All exit paths from a function with non-void return type shall have an explicit return statement with an expression. In a non-void function:
6
+ * - Every return statement has an expression, and
7
+ * - Control cannot reach the end of the function without encountering a return statement
10
8
  */
11
- export default class Rule_17_4_NonVoidReturn extends MISRARule {
12
- constructor(context: MISRAContext);
9
+ export default class Rule_17_4_NonVoidReturn extends UserConfigurableRule {
10
+ /**
11
+ * Scope of analysis
12
+ */
13
+ readonly analysisType = AnalysisType.SINGLE_TRANSLATION_UNIT;
14
+ /**
15
+ * @returns Rule identifier according to MISRA-C:2012
16
+ */
17
+ get name(): string;
13
18
  /**
14
19
  * Checks if the given joinpoint represents a non-void function that lacks an explicit return statement with an expression.
15
20
  *
@@ -18,14 +23,34 @@ export default class Rule_17_4_NonVoidReturn extends MISRARule {
18
23
  * @returns Returns true if the joinpoint violates the rule, false otherwise
19
24
  */
20
25
  match($jp: Joinpoint, logErrors?: boolean): boolean;
26
+ /**
27
+ * Performs a depth.first search on the function's control flow graph (CFG) to check if all exit paths in the function have a return statement
28
+ *
29
+ * @param functionJp The function to analyze
30
+ * @returns Returns true if all exit paths in the function have an explicit return statement, otherwise returns false.
31
+ */
32
+ private allControlPathsReturn;
21
33
  /**
22
34
  * Transforms a non-void function joinpoint that has no return statement at the end, by adding a default return value based on the config file.
23
- * - If the configuration file is is missing or invalid, no transformation is performed.
35
+ * - If the configuration file is missing/invalid or the specified default value is invalid, no transformation is performed and the function is left unchanged.
24
36
  * - Otherwise, a return statement is inserted as the last statement of the function.
25
37
  *
26
38
  * @param $jp - Joinpoint to transform
27
39
  * @returns Report detailing the transformation result
28
40
  */
29
- transform($jp: Joinpoint): MISRATransformationReport;
41
+ apply($jp: Joinpoint): MISRATransformationReport;
42
+ /**
43
+ * Returns the prefix to be used for error messages related to the given joinpoint
44
+ *
45
+ * @param $jp - Joinpoint where the violation was detected
46
+ * @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
47
+ */
48
+ getErrorMsgPrefix(functionJp: FunctionJp): string;
49
+ /**
50
+ * Retrieves a fix for the given joinpoint using the provided configuration file
51
+ * @param $jp - Joinpoint where the violation was detected
52
+ * @return The fix retrieved from the configuration for the violation, or `undefined` if no applicable fix is found.
53
+ */
54
+ getFixFromConfig(functionJp: FunctionJp): string | undefined;
30
55
  }
31
56
  //# sourceMappingURL=Rule_17_4_NonVoidReturn.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Rule_17_4_NonVoidReturn.d.ts","sourceRoot":"","sources":["../../../src/rules/Section17_Functions/Rule_17_4_NonVoidReturn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqD,SAAS,EAAc,MAAM,qCAAqC,CAAC;AAC/H,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,YAAY,MAAM,uBAAuB,CAAC;AAEjD,OAAO,EAAE,yBAAyB,EAA2B,MAAM,gBAAgB,CAAC;AAGpF;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,uBAAwB,SAAQ,SAAS;gBAC9C,OAAO,EAAE,YAAY;IAIjC;;;;;;OAMG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO;IAkB1D;;;;;;;OAOG;IACH,SAAS,CAAC,GAAG,EAAE,SAAS,GAAG,yBAAyB;CA0BvD"}
1
+ {"version":3,"file":"Rule_17_4_NonVoidReturn.d.ts","sourceRoot":"","sources":["../../../src/rules/Section17_Functions/Rule_17_4_NonVoidReturn.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,UAAU,EAAE,SAAS,EAAc,MAAM,qCAAqC,CAAC;AAEnH,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAA2B,MAAM,gBAAgB,CAAC;AAElG,OAAO,oBAAoB,MAAM,4BAA4B,CAAC;AAQ9D;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,uBAAwB,SAAQ,oBAAoB;IACrE;;OAEG;IACH,QAAQ,CAAC,YAAY,wCAAwC;IAE7D;;OAEG;IACH,IAAa,IAAI,IAAI,MAAM,CAE1B;IAED;;;;;;OAMG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO;IAa1D;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IA2B7B;;;;;;;OAOG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS,GAAG,yBAAyB;IAgChD;;;;;OAKG;IACH,iBAAiB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM;IAIjD;;;;OAIG;IACH,gBAAgB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS;CAsB/D"}
@@ -1,17 +1,29 @@
1
- import { BuiltinType, FunctionJp, ReturnStmt } from "@specs-feup/clava/api/Joinpoints.js";
2
- import MISRARule from "../../MISRARule.js";
1
+ import { Body, BuiltinType, FunctionJp, ReturnStmt } from "@specs-feup/clava/api/Joinpoints.js";
3
2
  import ClavaJoinPoints from "@specs-feup/clava/api/clava/ClavaJoinPoints.js";
4
- import { MISRATransformationReport, MISRATransformationType } from "../../MISRA.js";
5
- import Query from "@specs-feup/lara/api/weaver/Query.js";
3
+ import { AnalysisType, MISRATransformationReport, MISRATransformationType } from "../../MISRA.js";
4
+ import { isValidFile } from "../../utils/FileUtils.js";
5
+ import UserConfigurableRule from "../UserConfigurableRule.js";
6
+ import ClavaNode from "@specs-feup/clava-flow/ClavaNode";
7
+ import ReturnNode from "@specs-feup/clava-flow/cfg/node/ReturnNode";
8
+ import ClavaCfgGenerator from "@specs-feup/clava-flow/transformation/ClavaCfgGenerator";
9
+ import BaseNode from "@specs-feup/flow/graph/BaseNode";
10
+ import Graph from "@specs-feup/flow/graph/Graph";
11
+ import ControlFlowEdge from "@specs-feup/flow/flow/ControlFlowEdge";
6
12
  /**
7
- * MISRA Rule 17.4: All exit paths from a function with non-void return type shall have an
8
- explicit return statement with an expression. In a non-void function:
9
- - Every return statement has an expression, and a
10
- - Control cannot reach the end of the function without encountering a return statement
13
+ * MISRA-C Rule 17.4: All exit paths from a function with non-void return type shall have an explicit return statement with an expression. In a non-void function:
14
+ * - Every return statement has an expression, and
15
+ * - Control cannot reach the end of the function without encountering a return statement
11
16
  */
12
- export default class Rule_17_4_NonVoidReturn extends MISRARule {
13
- constructor(context) {
14
- super("17.4", context);
17
+ export default class Rule_17_4_NonVoidReturn extends UserConfigurableRule {
18
+ /**
19
+ * Scope of analysis
20
+ */
21
+ analysisType = AnalysisType.SINGLE_TRANSLATION_UNIT;
22
+ /**
23
+ * @returns Rule identifier according to MISRA-C:2012
24
+ */
25
+ get name() {
26
+ return "17.4";
15
27
  }
16
28
  /**
17
29
  * Checks if the given joinpoint represents a non-void function that lacks an explicit return statement with an expression.
@@ -25,47 +37,108 @@ export default class Rule_17_4_NonVoidReturn extends MISRARule {
25
37
  return false;
26
38
  if ($jp.returnType instanceof BuiltinType && $jp.returnType.isVoid)
27
39
  return false;
28
- const emptyReturnStms = Query.searchFrom($jp, ReturnStmt, { returnExpr: undefined }).get();
29
- const exitReturn = $jp.body.children.filter(child => child instanceof ReturnStmt && !emptyReturnStms.includes(child))[0];
30
- if (logErrors) {
31
- emptyReturnStms?.forEach(emptyReturn => this.logMISRAError(emptyReturn, "Every return statement in a non-void function must include an expression."));
32
- if (exitReturn === undefined) {
33
- this.logMISRAError($jp, `Function '${$jp.name}' reaches the end without a return statement.`);
34
- }
40
+ if ($jp.body.children.some(childJp => childJp instanceof ReturnStmt))
41
+ return false;
42
+ const nonCompliant = !this.allControlPathsReturn($jp);
43
+ if (logErrors && nonCompliant) {
44
+ this.logMISRAError($jp, `Function '${$jp.name}' reaches the end without a return statement.`);
45
+ }
46
+ return nonCompliant;
47
+ }
48
+ /**
49
+ * Performs a depth.first search on the function's control flow graph (CFG) to check if all exit paths in the function have a return statement
50
+ *
51
+ * @param functionJp The function to analyze
52
+ * @returns Returns true if all exit paths in the function have an explicit return statement, otherwise returns false.
53
+ */
54
+ allControlPathsReturn(functionJp) {
55
+ // Generate control flow graph
56
+ const cfg = Graph.create().apply(new ClavaCfgGenerator(functionJp));
57
+ const startNode = cfg.nodes.filterIs(ClavaNode).filter(node => node.jp instanceof Body)[0];
58
+ cfg.edges.filter(edge => edge.is(ControlFlowEdge) && edge.as(ControlFlowEdge).isFake).forEach((edge) => {
59
+ edge.remove();
60
+ });
61
+ const stack = [startNode];
62
+ const visited = new Set();
63
+ while (stack.length > 0) {
64
+ const node = stack.pop();
65
+ if (visited.has(node) || node?.is(ReturnNode))
66
+ continue;
67
+ let children = Array.from(node.outgoers).map(edge => edge.target);
68
+ if (!children || children.length === 0)
69
+ return false; // Reached the end of the graph without finding a single return statement
70
+ children = children.filter(child => !visited.has(child));
71
+ children.forEach(child => stack.push(child.as(BaseNode)));
35
72
  }
36
- return emptyReturnStms.length > 0 || exitReturn === undefined;
73
+ return true;
37
74
  }
38
75
  /**
39
76
  * Transforms a non-void function joinpoint that has no return statement at the end, by adding a default return value based on the config file.
40
- * - If the configuration file is is missing or invalid, no transformation is performed.
77
+ * - If the configuration file is missing/invalid or the specified default value is invalid, no transformation is performed and the function is left unchanged.
41
78
  * - Otherwise, a return statement is inserted as the last statement of the function.
42
79
  *
43
80
  * @param $jp - Joinpoint to transform
44
81
  * @returns Report detailing the transformation result
45
82
  */
46
- transform($jp) {
47
- if (!this.match($jp))
83
+ apply($jp) {
84
+ const previousResult = $jp instanceof FunctionJp ? this.context.getRuleResult(this.ruleID, $jp) : undefined;
85
+ if (previousResult === MISRATransformationType.NoChange || !this.match($jp)) {
48
86
  return new MISRATransformationReport(MISRATransformationType.NoChange);
87
+ }
49
88
  const functionJp = $jp;
50
- if (this.context.config) {
51
- try {
52
- const returnType = functionJp.type.code;
53
- const defaultValueReturn = this.context.config.get("defaultValues")[returnType];
54
- if (defaultValueReturn === undefined) {
55
- this.logMISRAError($jp, `Function '${functionJp.name}' reaches the end without a return statement. Default value return not added due to missing default value configuration for type '${returnType}'.`);
56
- return new MISRATransformationReport(MISRATransformationType.NoChange);
57
- }
58
- const newJp = ClavaJoinPoints.returnStmt(ClavaJoinPoints.exprLiteral(String(defaultValueReturn), functionJp.returnType));
59
- functionJp.body.lastChild ? functionJp.body.lastChild.insertAfter(newJp) : functionJp.body.setFirstChild(newJp);
60
- return new MISRATransformationReport(MISRATransformationType.DescendantChange);
61
- }
62
- catch (error) {
63
- this.logMISRAError($jp, `Function '${functionJp.name}' reaches the end without a return statement. Default value return not added due to invalid structure of configuration file.`);
64
- return new MISRATransformationReport(MISRATransformationType.NoChange);
65
- }
89
+ const fileJp = functionJp.getAncestor("file");
90
+ const errorMsgPrefix = this.getErrorMsgPrefix(functionJp);
91
+ const defaultValueReturn = this.getFixFromConfig(functionJp);
92
+ if (defaultValueReturn === undefined) {
93
+ this.context.addRuleResult(this.ruleID, $jp, MISRATransformationType.NoChange);
94
+ return new MISRATransformationReport(MISRATransformationType.NoChange);
66
95
  }
67
- this.logMISRAError($jp, `Function '${functionJp.name}' reaches the end without a return statement. Default value return not added due to missing config file.`);
96
+ // Insert return statement and validate it
97
+ const returnStmt = ClavaJoinPoints.returnStmt(ClavaJoinPoints.exprLiteral(String(defaultValueReturn), functionJp.returnType));
98
+ functionJp.body.lastChild ? functionJp.body.lastChild.insertAfter(returnStmt) : functionJp.body.setFirstChild(returnStmt);
99
+ // Validate the provided default value
100
+ if (isValidFile(fileJp)) {
101
+ return new MISRATransformationReport(MISRATransformationType.DescendantChange);
102
+ }
103
+ // If the default value is invalid, the return stmt is removed
104
+ returnStmt.detach();
105
+ this.logMISRAError($jp, `${errorMsgPrefix} Provided default value for type '${functionJp.type.code}' is invalid and was therefore not inserted.`);
106
+ this.context.addRuleResult(this.ruleID, $jp, MISRATransformationType.NoChange);
68
107
  return new MISRATransformationReport(MISRATransformationType.NoChange);
69
108
  }
109
+ /**
110
+ * Returns the prefix to be used for error messages related to the given joinpoint
111
+ *
112
+ * @param $jp - Joinpoint where the violation was detected
113
+ * @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
114
+ */
115
+ getErrorMsgPrefix(functionJp) {
116
+ return `Function '${functionJp.name}' reaches the end without a return statement.`;
117
+ }
118
+ /**
119
+ * Retrieves a fix for the given joinpoint using the provided configuration file
120
+ * @param $jp - Joinpoint where the violation was detected
121
+ * @return The fix retrieved from the configuration for the violation, or `undefined` if no applicable fix is found.
122
+ */
123
+ getFixFromConfig(functionJp) {
124
+ const errorMsgPrefix = this.getErrorMsgPrefix(functionJp);
125
+ if (!this.context.config) {
126
+ this.logMISRAError(functionJp, `${errorMsgPrefix} Default value return not added due to missing config file.`);
127
+ return undefined;
128
+ }
129
+ let defaultValueReturn = undefined;
130
+ const returnType = functionJp.type.code;
131
+ try {
132
+ defaultValueReturn = this.context.config.get("defaultValues")[returnType];
133
+ }
134
+ catch (error) {
135
+ this.logMISRAError(functionJp, `${errorMsgPrefix} Default value return was not added as \'defaultValues\' is not defined in the configuration file.`);
136
+ return undefined;
137
+ }
138
+ if (defaultValueReturn === undefined) {
139
+ this.logMISRAError(functionJp, `${errorMsgPrefix} Default value return not added due to missing default value configuration for type '${returnType}'.`);
140
+ }
141
+ return defaultValueReturn;
142
+ }
70
143
  }
71
144
  //# sourceMappingURL=Rule_17_4_NonVoidReturn.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Rule_17_4_NonVoidReturn.js","sourceRoot":"","sources":["../../../src/rules/Section17_Functions/Rule_17_4_NonVoidReturn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA4B,UAAU,EAAa,UAAU,EAAE,MAAM,qCAAqC,CAAC;AAC/H,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAE3C,OAAO,eAAe,MAAM,gDAAgD,CAAC;AAC7E,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACpF,OAAO,KAAK,MAAM,sCAAsC,CAAC;AAEzD;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,uBAAwB,SAAQ,SAAS;IAC1D,YAAY,OAAqB;QAC7B,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,GAAc,EAAE,YAAqB,KAAK;QAC5C,IAAI,CAAC,CAAC,GAAG,YAAY,UAAU,IAAI,GAAG,CAAC,gBAAgB,CAAC;YAAE,OAAO,KAAK,CAAC;QAEvE,IAAI,GAAG,CAAC,UAAU,YAAY,WAAW,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAEjF,MAAM,eAAe,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,EAAC,UAAU,EAAE,SAAS,EAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACzF,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,YAAY,UAAU,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzH,IAAI,SAAS,EAAE,CAAC;YACZ,eAAe,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,CACnC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,2EAA2E,CAAC,CAC/G,CAAA;YACD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC3B,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,aAAa,GAAG,CAAC,IAAI,+CAA+C,CAAC,CAAA;YACjG,CAAC;QACL,CAAC;QACD,OAAO,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,KAAK,SAAS,CAAC;IAClE,CAAC;IAED;;;;;;;OAOG;IACH,SAAS,CAAC,GAAc;QACpB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAE7F,MAAM,UAAU,GAAG,GAAiB,CAAC;QACrC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACtB,IAAI,CAAC;gBACD,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;gBACxC,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,UAAU,CAAC,CAAC;gBAEhF,IAAI,kBAAkB,KAAK,SAAS,EAAE,CAAC;oBACnC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,aAAa,UAAU,CAAC,IAAI,qIAAqI,UAAU,IAAI,CAAC,CAAC;oBACzM,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;gBAC3E,CAAC;gBACD,MAAM,KAAK,GAAG,eAAe,CAAC,UAAU,CAAC,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,UAAU,CAAC,UAAU,CAAC,CAAe,CAAC;gBACvI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBAEhH,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,CAAC;YAEnF,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,aAAa,UAAU,CAAC,IAAI,8HAA8H,CAAC,CAAC;gBACpL,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;YAC3E,CAAC;QACL,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,aAAa,UAAU,CAAC,IAAI,0GAA0G,CAAC,CAAA;QAC/J,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAC3E,CAAC;CACJ"}
1
+ {"version":3,"file":"Rule_17_4_NonVoidReturn.js","sourceRoot":"","sources":["../../../src/rules/Section17_Functions/Rule_17_4_NonVoidReturn.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,23 @@
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 17.6: The declaration of an array parameter shall not contain the static keyword between the [ ]
5
+ * MISRA-C Rule 17.6: The declaration of an array parameter shall not contain the static keyword between the [ ]
7
6
  */
8
7
  export default class Rule_17_6_StaticArraySizeParam extends MISRARule {
9
8
  #private;
10
- constructor(context: MISRAContext);
9
+ /**
10
+ * Scope of analysis
11
+ */
12
+ readonly analysisType = AnalysisType.SINGLE_TRANSLATION_UNIT;
13
+ /**
14
+ * Standards to which this rule applies to
15
+ */
16
+ protected readonly appliesTo: Set<string>;
17
+ /**
18
+ * @returns Rule identifier according to MISRA-C:2012
19
+ */
20
+ get name(): string;
11
21
  /**
12
22
  * Checks if the given joinpoint represents a function with any array parameter containing the 'static' keyword between the [ ].
13
23
  *
@@ -22,6 +32,6 @@ export default class Rule_17_6_StaticArraySizeParam extends MISRARule {
22
32
  * @param $jp - Joinpoint to transform
23
33
  * @returns Report detailing the transformation result
24
34
  */
25
- transform($jp: Joinpoint): MISRATransformationReport;
35
+ apply($jp: Joinpoint): MISRATransformationReport;
26
36
  }
27
37
  //# sourceMappingURL=Rule_17_6_StaticArraySizeParam.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Rule_17_6_StaticArraySizeParam.d.ts","sourceRoot":"","sources":["../../../src/rules/Section17_Functions/Rule_17_6_StaticArraySizeParam.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,SAAS,EAAS,MAAM,qCAAqC,CAAC;AAC5G,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,YAAY,MAAM,uBAAuB,CAAC;AAEjD,OAAO,EAAE,yBAAyB,EAA2B,MAAM,gBAAgB,CAAC;AAGpF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,8BAA+B,SAAQ,SAAS;;gBAErD,OAAO,EAAE,YAAY;IAIjC;;;;;;OAMG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO;IAiB1D;;;;;OAKG;IACH,SAAS,CAAC,GAAG,EAAE,SAAS,GAAG,yBAAyB;CAqBvD"}
1
+ {"version":3,"file":"Rule_17_6_StaticArraySizeParam.d.ts","sourceRoot":"","sources":["../../../src/rules/Section17_Functions/Rule_17_6_StaticArraySizeParam.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,SAAS,EAAS,MAAM,qCAAqC,CAAC;AAC5G,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAA2B,MAAM,gBAAgB,CAAC;AAGlG;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,8BAA+B,SAAQ,SAAS;;IACjE;;OAEG;IACH,QAAQ,CAAC,YAAY,wCAAwC;IAE7D;;OAEG;IACH,mBAA4B,SAAS,cAA2B;IAOhE;;OAEG;IACH,IAAa,IAAI,IAAI,MAAM,CAE1B;IAED;;;;;;OAMG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO;IAiB1D;;;;;OAKG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS,GAAG,yBAAyB;CAsBnD"}
@@ -1,15 +1,29 @@
1
1
  import { AdjustedType, ArrayType, FunctionJp } from "@specs-feup/clava/api/Joinpoints.js";
2
2
  import MISRARule from "../../MISRARule.js";
3
3
  import ClavaJoinPoints from "@specs-feup/clava/api/clava/ClavaJoinPoints.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 { getParamReferences } from "../../utils/FunctionUtils.js";
6
6
  /**
7
- * MISRA Rule 17.6: The declaration of an array parameter shall not contain the static keyword between the [ ]
7
+ * MISRA-C Rule 17.6: The declaration of an array parameter shall not contain the static keyword between the [ ]
8
8
  */
9
9
  export default class Rule_17_6_StaticArraySizeParam extends MISRARule {
10
+ /**
11
+ * Scope of analysis
12
+ */
13
+ analysisType = AnalysisType.SINGLE_TRANSLATION_UNIT;
14
+ /**
15
+ * Standards to which this rule applies to
16
+ */
17
+ appliesTo = new Set(["c99", "c11"]);
18
+ /**
19
+ * List of static array size params
20
+ */
10
21
  #invalidParams = [];
11
- constructor(context) {
12
- super("17.6", context);
22
+ /**
23
+ * @returns Rule identifier according to MISRA-C:2012
24
+ */
25
+ get name() {
26
+ return "17.6";
13
27
  }
14
28
  /**
15
29
  * Checks if the given joinpoint represents a function with any array parameter containing the 'static' keyword between the [ ].
@@ -19,7 +33,7 @@ export default class Rule_17_6_StaticArraySizeParam extends MISRARule {
19
33
  * @returns Returns true if the joinpoint violates the rule, false otherwise
20
34
  */
21
35
  match($jp, logErrors = false) {
22
- if (!($jp instanceof FunctionJp) || $jp.root.standard === "c90")
36
+ if (!($jp instanceof FunctionJp && this.appliesToCurrentStandard()))
23
37
  return false;
24
38
  this.#invalidParams = $jp.params.filter(paramJp => paramJp.type instanceof AdjustedType &&
25
39
  paramJp.type.originalType instanceof ArrayType &&
@@ -38,7 +52,7 @@ export default class Rule_17_6_StaticArraySizeParam extends MISRARule {
38
52
  * @param $jp - Joinpoint to transform
39
53
  * @returns Report detailing the transformation result
40
54
  */
41
- transform($jp) {
55
+ apply($jp) {
42
56
  if (!this.match($jp))
43
57
  return new MISRATransformationReport(MISRATransformationType.NoChange);
44
58
  for (const invalidParam of this.#invalidParams) {
@@ -1 +1 @@
1
- {"version":3,"file":"Rule_17_6_StaticArraySizeParam.js","sourceRoot":"","sources":["../../../src/rules/Section17_Functions/Rule_17_6_StaticArraySizeParam.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAoB,MAAM,qCAAqC,CAAC;AAC5G,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAE3C,OAAO,eAAe,MAAM,gDAAgD,CAAC;AAC7E,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACpF,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,8BAA+B,SAAQ,SAAS;IACjE,cAAc,GAAY,EAAE,CAAC;IAC7B,YAAY,OAAqB;QAC7B,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,GAAc,EAAE,YAAqB,KAAK;QAC5C,IAAI,CAAC,CAAC,GAAG,YAAY,UAAU,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,KAAK;YAAE,OAAO,KAAK,CAAC;QAE9E,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,YAAY,YAAY;YACnF,OAAO,CAAC,IAAI,CAAC,YAAY,YAAY,SAAS;YAC9C,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,KAAK,CAAC,CAAC;YAC1C,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAC9C,CAAC;QAEF,IAAI,SAAS,EAAE,CAAC;YACZ,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC7C,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,uGAAuG,CAAC,CAAA;YAC7I,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;OAKG;IACH,SAAS,CAAC,GAAc;QACpB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAE7F,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAC7C,MAAM,SAAS,GAAG,kBAAkB,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;YAExD,yEAAyE;YACzE,MAAM,YAAY,GAAI,YAAY,CAAC,IAAqB,CAAC,YAAY,CAAC;YACtE,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAC/B,YAAY,CAAC,IAAI,EACjB,eAAe,CAAC,mBAAmB,CAAE,YAA0B,CAAC,WAAW,CAAC,CAC/E,CAAC;YACF,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,CAAC,KAAK,CAAU,CAAC;YAE1D,mEAAmE;YACnE,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;gBAC1B,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACvC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,CAAC;IACnF,CAAC;CACJ"}
1
+ {"version":3,"file":"Rule_17_6_StaticArraySizeParam.js","sourceRoot":"","sources":["../../../src/rules/Section17_Functions/Rule_17_6_StaticArraySizeParam.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAoB,MAAM,qCAAqC,CAAC;AAC5G,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,eAAe,MAAM,gDAAgD,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAClG,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAElE;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,8BAA+B,SAAQ,SAAS;IACjE;;OAEG;IACM,YAAY,GAAG,YAAY,CAAC,uBAAuB,CAAC;IAE7D;;OAEG;IACyB,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAEhE;;OAEG;IACH,cAAc,GAAY,EAAE,CAAC;IAE7B;;OAEG;IACH,IAAa,IAAI;QACb,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,GAAc,EAAE,YAAqB,KAAK;QAC5C,IAAI,CAAC,CAAC,GAAG,YAAY,UAAU,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAAE,OAAO,KAAK,CAAC;QAElF,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,YAAY,YAAY;YACnF,OAAO,CAAC,IAAI,CAAC,YAAY,YAAY,SAAS;YAC9C,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,KAAK,CAAC,CAAC;YAC1C,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAC9C,CAAC;QAEF,IAAI,SAAS,EAAE,CAAC;YACZ,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC7C,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,uGAAuG,CAAC,CAAA;YAC7I,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1C,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,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAC7C,MAAM,SAAS,GAAG,kBAAkB,CAAC,YAAY,EAAE,GAAiB,CAAC,CAAC;YAEtE,yEAAyE;YACzE,MAAM,YAAY,GAAI,YAAY,CAAC,IAAqB,CAAC,YAAY,CAAC;YACtE,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAC/B,YAAY,CAAC,IAAI,EACjB,eAAe,CAAC,mBAAmB,CAAE,YAA0B,CAAC,WAAW,CAAC,CAC/E,CAAC;YACF,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,CAAC,KAAK,CAAU,CAAC;YAE1D,mEAAmE;YACnE,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;gBAC1B,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACvC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,CAAC;IACnF,CAAC;CACJ"}