@specs-feup/clava-misra 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (322) hide show
  1. package/.gitignore +8 -0
  2. package/README.md +53 -19
  3. package/dist/MISRA.d.ts +28 -10
  4. package/dist/MISRA.d.ts.map +1 -1
  5. package/dist/MISRA.js +30 -10
  6. package/dist/MISRA.js.map +1 -1
  7. package/dist/MISRAContext.d.ts +65 -11
  8. package/dist/MISRAContext.d.ts.map +1 -1
  9. package/dist/MISRAContext.js +131 -35
  10. package/dist/MISRAContext.js.map +1 -1
  11. package/dist/MISRARule.d.ts +38 -25
  12. package/dist/MISRARule.d.ts.map +1 -1
  13. package/dist/MISRARule.js +40 -18
  14. package/dist/MISRARule.js.map +1 -1
  15. package/dist/MISRATool.d.ts +39 -5
  16. package/dist/MISRATool.d.ts.map +1 -1
  17. package/dist/MISRATool.js +102 -46
  18. package/dist/MISRATool.js.map +1 -1
  19. package/dist/StandardGuideline.d.ts +22 -0
  20. package/dist/StandardGuideline.d.ts.map +1 -0
  21. package/dist/StandardGuideline.js +12 -0
  22. package/dist/StandardGuideline.js.map +1 -0
  23. package/dist/ast-visitor/Context.d.ts +11 -0
  24. package/dist/ast-visitor/Context.d.ts.map +1 -0
  25. package/dist/ast-visitor/Context.js +15 -0
  26. package/dist/ast-visitor/Context.js.map +1 -0
  27. package/dist/ast-visitor/Visit.d.ts +23 -0
  28. package/dist/ast-visitor/Visit.d.ts.map +1 -0
  29. package/dist/ast-visitor/Visit.js +18 -0
  30. package/dist/ast-visitor/Visit.js.map +1 -0
  31. package/dist/ast-visitor/VisitWithContext.d.ts +32 -0
  32. package/dist/ast-visitor/VisitWithContext.d.ts.map +1 -0
  33. package/dist/ast-visitor/VisitWithContext.js +26 -0
  34. package/dist/ast-visitor/VisitWithContext.js.map +1 -0
  35. package/dist/main.js +1 -1
  36. package/dist/main.js.map +1 -1
  37. package/dist/rules/Section13_SideEffects/Rule_13_6_SafeSizeOfOperand.d.ts +27 -0
  38. package/dist/rules/Section13_SideEffects/Rule_13_6_SafeSizeOfOperand.d.ts.map +1 -0
  39. package/dist/rules/Section13_SideEffects/Rule_13_6_SafeSizeOfOperand.js +98 -0
  40. package/dist/rules/Section13_SideEffects/Rule_13_6_SafeSizeOfOperand.js.map +1 -0
  41. package/dist/rules/Section16_SwitchStatements/Rule_16_2_TopLevelSwitch.d.ts +45 -6
  42. package/dist/rules/Section16_SwitchStatements/Rule_16_2_TopLevelSwitch.d.ts.map +1 -1
  43. package/dist/rules/Section16_SwitchStatements/Rule_16_2_TopLevelSwitch.js +91 -8
  44. package/dist/rules/Section16_SwitchStatements/Rule_16_2_TopLevelSwitch.js.map +1 -1
  45. package/dist/rules/Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.d.ts +15 -5
  46. package/dist/rules/Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.d.ts.map +1 -1
  47. package/dist/rules/Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.js +20 -6
  48. package/dist/rules/Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.js.map +1 -1
  49. package/dist/rules/Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.d.ts +11 -5
  50. package/dist/rules/Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.d.ts.map +1 -1
  51. package/dist/rules/Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.js +13 -10
  52. package/dist/rules/Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.js.map +1 -1
  53. package/dist/rules/Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.d.ts +11 -6
  54. package/dist/rules/Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.d.ts.map +1 -1
  55. package/dist/rules/Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.js +19 -11
  56. package/dist/rules/Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.js.map +1 -1
  57. package/dist/rules/Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.d.ts +15 -5
  58. package/dist/rules/Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.d.ts.map +1 -1
  59. package/dist/rules/Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.js +24 -10
  60. package/dist/rules/Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.js.map +1 -1
  61. package/dist/rules/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.d.ts +22 -6
  62. package/dist/rules/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.d.ts.map +1 -1
  63. package/dist/rules/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.js +37 -10
  64. package/dist/rules/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.js.map +1 -1
  65. package/dist/rules/Section17_Functions/Rule_17_3_ImplicitFunction.d.ts +66 -0
  66. package/dist/rules/Section17_Functions/Rule_17_3_ImplicitFunction.d.ts.map +1 -0
  67. package/dist/rules/Section17_Functions/Rule_17_3_ImplicitFunction.js +209 -0
  68. package/dist/rules/Section17_Functions/Rule_17_3_ImplicitFunction.js.map +1 -0
  69. package/dist/rules/Section17_Functions/Rule_17_4_NonVoidReturn.d.ts +37 -12
  70. package/dist/rules/Section17_Functions/Rule_17_4_NonVoidReturn.d.ts.map +1 -1
  71. package/dist/rules/Section17_Functions/Rule_17_4_NonVoidReturn.js +112 -39
  72. package/dist/rules/Section17_Functions/Rule_17_4_NonVoidReturn.js.map +1 -1
  73. package/dist/rules/Section17_Functions/Rule_17_6_StaticArraySizeParam.d.ts +15 -5
  74. package/dist/rules/Section17_Functions/Rule_17_6_StaticArraySizeParam.d.ts.map +1 -1
  75. package/dist/rules/Section17_Functions/Rule_17_6_StaticArraySizeParam.js +21 -7
  76. package/dist/rules/Section17_Functions/Rule_17_6_StaticArraySizeParam.js.map +1 -1
  77. package/dist/rules/Section17_Functions/Rule_17_7_UnusedReturnValue.d.ts +11 -6
  78. package/dist/rules/Section17_Functions/Rule_17_7_UnusedReturnValue.d.ts.map +1 -1
  79. package/dist/rules/Section17_Functions/Rule_17_7_UnusedReturnValue.js +17 -8
  80. package/dist/rules/Section17_Functions/Rule_17_7_UnusedReturnValue.js.map +1 -1
  81. package/dist/rules/Section21-StandardLibraries/DisallowedStdLibFunctionRule.d.ts +105 -0
  82. package/dist/rules/Section21-StandardLibraries/DisallowedStdLibFunctionRule.d.ts.map +1 -0
  83. package/dist/rules/Section21-StandardLibraries/DisallowedStdLibFunctionRule.js +258 -0
  84. package/dist/rules/Section21-StandardLibraries/DisallowedStdLibFunctionRule.js.map +1 -0
  85. package/dist/rules/Section21-StandardLibraries/Rule_21_10_NoTimeDateFunctions.d.ts +25 -0
  86. package/dist/rules/Section21-StandardLibraries/Rule_21_10_NoTimeDateFunctions.d.ts.map +1 -0
  87. package/dist/rules/Section21-StandardLibraries/Rule_21_10_NoTimeDateFunctions.js +27 -0
  88. package/dist/rules/Section21-StandardLibraries/Rule_21_10_NoTimeDateFunctions.js.map +1 -0
  89. package/dist/rules/Section21-StandardLibraries/Rule_21_11_NoTgmathFunctions.d.ts +29 -0
  90. package/dist/rules/Section21-StandardLibraries/Rule_21_11_NoTgmathFunctions.d.ts.map +1 -0
  91. package/dist/rules/Section21-StandardLibraries/Rule_21_11_NoTgmathFunctions.js +31 -0
  92. package/dist/rules/Section21-StandardLibraries/Rule_21_11_NoTgmathFunctions.js.map +1 -0
  93. package/dist/rules/Section21-StandardLibraries/Rule_21_3_NoDynamicMemory.d.ts +25 -0
  94. package/dist/rules/Section21-StandardLibraries/Rule_21_3_NoDynamicMemory.d.ts.map +1 -0
  95. package/dist/rules/Section21-StandardLibraries/Rule_21_3_NoDynamicMemory.js +27 -0
  96. package/dist/rules/Section21-StandardLibraries/Rule_21_3_NoDynamicMemory.js.map +1 -0
  97. package/dist/rules/Section21-StandardLibraries/Rule_21_6_NoStdIOFunctions.d.ts +25 -0
  98. package/dist/rules/Section21-StandardLibraries/Rule_21_6_NoStdIOFunctions.d.ts.map +1 -0
  99. package/dist/rules/Section21-StandardLibraries/Rule_21_6_NoStdIOFunctions.js +27 -0
  100. package/dist/rules/Section21-StandardLibraries/Rule_21_6_NoStdIOFunctions.js.map +1 -0
  101. package/dist/rules/Section21-StandardLibraries/Rule_21_7_NoNumericStringConversions.d.ts +25 -0
  102. package/dist/rules/Section21-StandardLibraries/Rule_21_7_NoNumericStringConversions.d.ts.map +1 -0
  103. package/dist/rules/Section21-StandardLibraries/Rule_21_7_NoNumericStringConversions.js +27 -0
  104. package/dist/rules/Section21-StandardLibraries/Rule_21_7_NoNumericStringConversions.js.map +1 -0
  105. package/dist/rules/Section21-StandardLibraries/Rule_21_8_NoProcessControlFunctions.d.ts +30 -0
  106. package/dist/rules/Section21-StandardLibraries/Rule_21_8_NoProcessControlFunctions.d.ts.map +1 -0
  107. package/dist/rules/Section21-StandardLibraries/Rule_21_8_NoProcessControlFunctions.js +32 -0
  108. package/dist/rules/Section21-StandardLibraries/Rule_21_8_NoProcessControlFunctions.js.map +1 -0
  109. package/dist/rules/Section21-StandardLibraries/Rule_21_9_NoGenericSearchOrSort.d.ts +25 -0
  110. package/dist/rules/Section21-StandardLibraries/Rule_21_9_NoGenericSearchOrSort.d.ts.map +1 -0
  111. package/dist/rules/Section21-StandardLibraries/Rule_21_9_NoGenericSearchOrSort.js +27 -0
  112. package/dist/rules/Section21-StandardLibraries/Rule_21_9_NoGenericSearchOrSort.js.map +1 -0
  113. package/dist/rules/Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.d.ts +6 -14
  114. package/dist/rules/Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.d.ts.map +1 -1
  115. package/dist/rules/Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.js +17 -27
  116. package/dist/rules/Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.js.map +1 -1
  117. package/dist/rules/Section2_UnusedCode/Rule_2_4_UnusedTagDecl.d.ts +13 -7
  118. package/dist/rules/Section2_UnusedCode/Rule_2_4_UnusedTagDecl.d.ts.map +1 -1
  119. package/dist/rules/Section2_UnusedCode/Rule_2_4_UnusedTagDecl.js +31 -17
  120. package/dist/rules/Section2_UnusedCode/Rule_2_4_UnusedTagDecl.js.map +1 -1
  121. package/dist/rules/Section2_UnusedCode/Rule_2_6_UnusedLabels.d.ts +26 -7
  122. package/dist/rules/Section2_UnusedCode/Rule_2_6_UnusedLabels.d.ts.map +1 -1
  123. package/dist/rules/Section2_UnusedCode/Rule_2_6_UnusedLabels.js +32 -14
  124. package/dist/rules/Section2_UnusedCode/Rule_2_6_UnusedLabels.js.map +1 -1
  125. package/dist/rules/Section2_UnusedCode/Rule_2_7_UnusedParameters.d.ts +48 -6
  126. package/dist/rules/Section2_UnusedCode/Rule_2_7_UnusedParameters.d.ts.map +1 -1
  127. package/dist/rules/Section2_UnusedCode/Rule_2_7_UnusedParameters.js +84 -34
  128. package/dist/rules/Section2_UnusedCode/Rule_2_7_UnusedParameters.js.map +1 -1
  129. package/dist/rules/Section3_Comments/Rule_3_1_CommentSequences.d.ts +24 -5
  130. package/dist/rules/Section3_Comments/Rule_3_1_CommentSequences.d.ts.map +1 -1
  131. package/dist/rules/Section3_Comments/Rule_3_1_CommentSequences.js +27 -7
  132. package/dist/rules/Section3_Comments/Rule_3_1_CommentSequences.js.map +1 -1
  133. package/dist/rules/Section5_Identifiers/IdentifierRenameRule.d.ts +46 -0
  134. package/dist/rules/Section5_Identifiers/IdentifierRenameRule.d.ts.map +1 -0
  135. package/dist/rules/Section5_Identifiers/IdentifierRenameRule.js +40 -0
  136. package/dist/rules/Section5_Identifiers/IdentifierRenameRule.js.map +1 -0
  137. package/dist/rules/Section5_Identifiers/Rule_5_1_DistinctExternalIdentifiers.d.ts +25 -0
  138. package/dist/rules/Section5_Identifiers/Rule_5_1_DistinctExternalIdentifiers.d.ts.map +1 -0
  139. package/dist/rules/Section5_Identifiers/Rule_5_1_DistinctExternalIdentifiers.js +46 -0
  140. package/dist/rules/Section5_Identifiers/Rule_5_1_DistinctExternalIdentifiers.js.map +1 -0
  141. package/dist/rules/Section5_Identifiers/Rule_5_6_UniqueTypedefNames.d.ts +26 -0
  142. package/dist/rules/Section5_Identifiers/Rule_5_6_UniqueTypedefNames.d.ts.map +1 -0
  143. package/dist/rules/Section5_Identifiers/Rule_5_6_UniqueTypedefNames.js +54 -0
  144. package/dist/rules/Section5_Identifiers/Rule_5_6_UniqueTypedefNames.js.map +1 -0
  145. package/dist/rules/Section5_Identifiers/Rule_5_7_UniqueTagNames.d.ts +27 -0
  146. package/dist/rules/Section5_Identifiers/Rule_5_7_UniqueTagNames.d.ts.map +1 -0
  147. package/dist/rules/Section5_Identifiers/Rule_5_7_UniqueTagNames.js +55 -0
  148. package/dist/rules/Section5_Identifiers/Rule_5_7_UniqueTagNames.js.map +1 -0
  149. package/dist/rules/Section5_Identifiers/Rule_5_8_UniqueExternalLinkIdentifiers.d.ts +24 -0
  150. package/dist/rules/Section5_Identifiers/Rule_5_8_UniqueExternalLinkIdentifiers.d.ts.map +1 -0
  151. package/dist/rules/Section5_Identifiers/Rule_5_8_UniqueExternalLinkIdentifiers.js +42 -0
  152. package/dist/rules/Section5_Identifiers/Rule_5_8_UniqueExternalLinkIdentifiers.js.map +1 -0
  153. package/dist/rules/Section5_Identifiers/Rule_5_9_UniqueInternalLinkIdentifiers.d.ts +24 -0
  154. package/dist/rules/Section5_Identifiers/Rule_5_9_UniqueInternalLinkIdentifiers.d.ts.map +1 -0
  155. package/dist/rules/Section5_Identifiers/Rule_5_9_UniqueInternalLinkIdentifiers.js +42 -0
  156. package/dist/rules/Section5_Identifiers/Rule_5_9_UniqueInternalLinkIdentifiers.js.map +1 -0
  157. package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_6_SingleExternalDefinition.d.ts +35 -0
  158. package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_6_SingleExternalDefinition.d.ts.map +1 -0
  159. package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_6_SingleExternalDefinition.js +98 -0
  160. package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_6_SingleExternalDefinition.js.map +1 -0
  161. package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_7_RestrictExternalLinkage.d.ts +35 -0
  162. package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_7_RestrictExternalLinkage.d.ts.map +1 -0
  163. package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_7_RestrictExternalLinkage.js +76 -0
  164. package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_7_RestrictExternalLinkage.js.map +1 -0
  165. package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_9_BlockScopeDefinition.d.ts +32 -0
  166. package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_9_BlockScopeDefinition.d.ts.map +1 -0
  167. package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_9_BlockScopeDefinition.js +57 -0
  168. package/dist/rules/Section8_DeclarationsAndDefinitions/Rule_8_9_BlockScopeDefinition.js.map +1 -0
  169. package/dist/rules/UserConfigurableRule.d.ts +55 -0
  170. package/dist/rules/UserConfigurableRule.d.ts.map +1 -0
  171. package/dist/rules/UserConfigurableRule.js +16 -0
  172. package/dist/rules/UserConfigurableRule.js.map +1 -0
  173. package/dist/rules/index.d.ts +11 -18
  174. package/dist/rules/index.d.ts.map +1 -1
  175. package/dist/rules/index.js +47 -7
  176. package/dist/rules/index.js.map +1 -1
  177. package/dist/tests/Section17_Functions/misra_config.json +10 -0
  178. package/dist/tests/Section21-StandardLibraries/misra_config.json +88 -0
  179. package/dist/tests/Section21-StandardLibraries/problematic_misra_config.json +19 -0
  180. package/dist/tests/utils.d.ts +6 -3
  181. package/dist/tests/utils.d.ts.map +1 -1
  182. package/dist/tests/utils.js +33 -7
  183. package/dist/tests/utils.js.map +1 -1
  184. package/dist/utils/CallUtils.d.ts +15 -0
  185. package/dist/utils/CallUtils.d.ts.map +1 -0
  186. package/dist/utils/CallUtils.js +34 -0
  187. package/dist/utils/CallUtils.js.map +1 -0
  188. package/dist/utils/CommentUtils.d.ts +21 -0
  189. package/dist/utils/CommentUtils.d.ts.map +1 -0
  190. package/dist/utils/CommentUtils.js +27 -0
  191. package/dist/utils/CommentUtils.js.map +1 -0
  192. package/dist/utils/FileUtils.d.ts +51 -0
  193. package/dist/utils/FileUtils.d.ts.map +1 -0
  194. package/dist/utils/FileUtils.js +121 -0
  195. package/dist/utils/FileUtils.js.map +1 -0
  196. package/dist/utils/FunctionUtils.d.ts +25 -0
  197. package/dist/utils/FunctionUtils.d.ts.map +1 -0
  198. package/dist/utils/FunctionUtils.js +65 -0
  199. package/dist/utils/FunctionUtils.js.map +1 -0
  200. package/dist/utils/IdentifierUtils.d.ts +14 -0
  201. package/dist/utils/IdentifierUtils.d.ts.map +1 -0
  202. package/dist/utils/IdentifierUtils.js +87 -0
  203. package/dist/utils/IdentifierUtils.js.map +1 -0
  204. package/dist/utils/JoinpointUtils.d.ts +19 -0
  205. package/dist/utils/JoinpointUtils.d.ts.map +1 -0
  206. package/dist/utils/JoinpointUtils.js +46 -0
  207. package/dist/utils/JoinpointUtils.js.map +1 -0
  208. package/dist/utils/ProgramUtils.d.ts +14 -0
  209. package/dist/utils/ProgramUtils.d.ts.map +1 -0
  210. package/dist/utils/ProgramUtils.js +72 -0
  211. package/dist/utils/ProgramUtils.js.map +1 -0
  212. package/dist/utils/SwitchUtils.d.ts +21 -0
  213. package/dist/utils/SwitchUtils.d.ts.map +1 -0
  214. package/dist/utils/SwitchUtils.js +47 -0
  215. package/dist/utils/SwitchUtils.js.map +1 -0
  216. package/dist/utils/TypeDeclUtils.d.ts +35 -0
  217. package/dist/utils/TypeDeclUtils.d.ts.map +1 -0
  218. package/dist/utils/TypeDeclUtils.js +78 -0
  219. package/dist/utils/TypeDeclUtils.js.map +1 -0
  220. package/dist/utils/VarUtils.d.ts +19 -0
  221. package/dist/utils/VarUtils.d.ts.map +1 -0
  222. package/dist/utils/VarUtils.js +59 -0
  223. package/dist/utils/VarUtils.js.map +1 -0
  224. package/package.json +16 -6
  225. package/src/MISRA.ts +33 -17
  226. package/src/MISRAContext.ts +128 -30
  227. package/src/MISRARule.ts +61 -29
  228. package/src/MISRATool.ts +108 -42
  229. package/src/StandardGuideline.ts +23 -0
  230. package/src/ast-visitor/Context.ts +16 -0
  231. package/src/ast-visitor/Visit.ts +26 -0
  232. package/src/ast-visitor/VisitWithContext.ts +42 -0
  233. package/src/main.ts +1 -1
  234. package/src/rules/Section13_SideEffects/Rule_13_6_SafeSizeOfOperand.ts +114 -0
  235. package/src/rules/Section16_SwitchStatements/Rule_16_2_TopLevelSwitch.ts +103 -13
  236. package/src/rules/Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.ts +24 -10
  237. package/src/rules/Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.ts +17 -8
  238. package/src/rules/Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.ts +20 -12
  239. package/src/rules/Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.ts +23 -12
  240. package/src/rules/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.ts +44 -13
  241. package/src/rules/Section17_Functions/Rule_17_3_ImplicitFunction.ts +153 -104
  242. package/src/rules/Section17_Functions/Rule_17_4_NonVoidReturn.ts +114 -44
  243. package/src/rules/Section17_Functions/Rule_17_6_StaticArraySizeParam.ts +27 -10
  244. package/src/rules/Section17_Functions/Rule_17_7_UnusedReturnValue.ts +20 -12
  245. package/src/rules/Section21-StandardLibraries/DisallowedStdLibFunctionRule.ts +317 -0
  246. package/src/rules/Section21-StandardLibraries/Rule_21_10_NoTimeDateFunctions.ts +30 -0
  247. package/src/rules/Section21-StandardLibraries/Rule_21_11_NoTgmathFunctions.ts +35 -0
  248. package/src/rules/Section21-StandardLibraries/Rule_21_3_NoDynamicMemory.ts +30 -0
  249. package/src/rules/Section21-StandardLibraries/Rule_21_6_NoStdIOFunctions.ts +30 -0
  250. package/src/rules/Section21-StandardLibraries/Rule_21_7_NoNumericStringConversions.ts +29 -0
  251. package/src/rules/Section21-StandardLibraries/Rule_21_8_NoProcessControlFunctions.ts +36 -0
  252. package/src/rules/Section21-StandardLibraries/Rule_21_9_NoGenericSearchOrSort.ts +30 -0
  253. package/src/rules/Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.ts +14 -29
  254. package/src/rules/Section2_UnusedCode/Rule_2_4_UnusedTagDecl.ts +33 -19
  255. package/src/rules/Section2_UnusedCode/Rule_2_6_UnusedLabels.ts +33 -20
  256. package/src/rules/Section2_UnusedCode/Rule_2_7_UnusedParameters.ts +90 -45
  257. package/src/rules/Section3_Comments/Rule_3_1_CommentSequences.ts +27 -8
  258. package/src/rules/Section5_Identifiers/IdentifierRenameRule.ts +63 -0
  259. package/src/rules/Section5_Identifiers/Rule_5_1_DistinctExternalIdentifiers.ts +52 -0
  260. package/src/rules/Section5_Identifiers/Rule_5_6_UniqueTypedefNames.ts +62 -0
  261. package/src/rules/Section5_Identifiers/Rule_5_7_UniqueTagNames.ts +61 -0
  262. package/src/rules/Section5_Identifiers/Rule_5_8_UniqueExternalLinkIdentifiers.ts +47 -0
  263. package/src/rules/Section5_Identifiers/Rule_5_9_UniqueInternalLinkIdentifiers.ts +47 -0
  264. package/src/rules/Section8_DeclarationsAndDefinitions/Rule_8_6_SingleExternalDefinition.ts +118 -0
  265. package/src/rules/Section8_DeclarationsAndDefinitions/Rule_8_7_RestrictExternalLinkage.ts +89 -0
  266. package/src/rules/Section8_DeclarationsAndDefinitions/Rule_8_9_BlockScopeDefinition.ts +65 -0
  267. package/src/rules/UserConfigurableRule.ts +60 -0
  268. package/src/rules/index.ts +45 -7
  269. package/src/tests/Section13_SideEffects/Rule_13_6_SafeSizeOfOperand.test.ts +114 -0
  270. package/src/tests/Section16_SwitchStatements/Rule_16_2_TopLevelSwitch.test.ts +7 -5
  271. package/src/tests/Section16_SwitchStatements/Rule_16_3_UnconditionalBreak.test.ts +40 -13
  272. package/src/tests/Section16_SwitchStatements/Rule_16_4_SwitchHasDefault.test.ts +10 -12
  273. package/src/tests/Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.test.ts +5 -5
  274. package/src/tests/Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.test.ts +5 -5
  275. package/src/tests/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.test.ts +5 -5
  276. package/src/tests/Section17_Functions/Rule_17_3_ImplicitFunctions.test.ts +68 -40
  277. package/src/tests/Section17_Functions/Rule_17_3_ImplicitFunctions_MissingConfig.test.ts +98 -0
  278. package/src/tests/Section17_Functions/Rule_17_3_ImplicitFunctions_ProblematicConfig.test.ts +71 -0
  279. package/src/tests/Section17_Functions/Rule_17_4_NonVoidReturn.test.ts +103 -49
  280. package/src/tests/Section17_Functions/Rule_17_4_NonVoidReturn_MissingConfig.test.ts +7 -7
  281. package/src/tests/Section17_Functions/Rule_17_6_StaticArraySizeParam.test.ts +36 -7
  282. package/src/tests/Section17_Functions/Rule_17_7_UnusedReturnValue.test.ts +25 -21
  283. package/src/tests/Section17_Functions/misra_config.json +4 -3
  284. package/src/tests/Section21-StandardLibraries/Rule_21_10_NoTimeDateFunctions.test.ts +62 -0
  285. package/src/tests/Section21-StandardLibraries/Rule_21_11_NoTgmathFunctions.test.ts +67 -0
  286. package/src/tests/Section21-StandardLibraries/Rule_21_3_NoDynamicMemory.test.ts +84 -0
  287. package/src/tests/Section21-StandardLibraries/Rule_21_3_NoDynamicMemory_MissingConfig.test.ts +33 -0
  288. package/src/tests/Section21-StandardLibraries/Rule_21_3_NoDynamicMemory_ProblematicConfig.test.ts +71 -0
  289. package/src/tests/Section21-StandardLibraries/Rule_21_6_NoStdIOFunctions.test.ts +63 -0
  290. package/src/tests/Section21-StandardLibraries/Rule_21_7_NoNumericStringConversions.test.ts +91 -0
  291. package/src/tests/Section21-StandardLibraries/Rule_21_8_NoProcessControlFunctions.test.ts +65 -0
  292. package/src/tests/Section21-StandardLibraries/Rule_21_9_NoGenericSearchOrSort.test.ts +89 -0
  293. package/src/tests/Section21-StandardLibraries/misra_config.json +88 -0
  294. package/src/tests/Section21-StandardLibraries/problematic_misra_config.json +19 -0
  295. package/src/tests/Section2_UnusedCode/Rule_2_3_UnusedTypeDecl.test.ts +148 -113
  296. package/src/tests/Section2_UnusedCode/Rule_2_4_UnusedTagDecl.test.ts +243 -163
  297. package/src/tests/Section2_UnusedCode/Rule_2_6_UnusedLabels.test.ts +32 -20
  298. package/src/tests/Section2_UnusedCode/Rule_2_7_UnusedParameters.test.ts +36 -30
  299. package/src/tests/Section3_Comments/Rule_3_1_CommentSequences.test.ts +37 -8
  300. package/src/tests/Section5_Identifiers/Rule_5_1_DistinctExternalIdentifiers.test.ts +78 -0
  301. package/src/tests/Section5_Identifiers/Rule_5_6_UniqueTypedefNames.test.ts +120 -0
  302. package/src/tests/Section5_Identifiers/Rule_5_7_UniqueTagNames.test.ts +51 -0
  303. package/src/tests/Section5_Identifiers/Rule_5_8_UniqueExternalLinkIdentifiers.test.ts +73 -0
  304. package/src/tests/Section5_Identifiers/Rule_5_9_UniqueInternalLinkIdentifiers.test.ts +97 -0
  305. package/src/tests/Section8_DeclarationsAndDefinitions/Rule_8_6_SingleExternalDefinition.test.ts +160 -0
  306. package/src/tests/Section8_DeclarationsAndDefinitions/Rule_8_7_RestrictExternalLinkage.test.ts +46 -0
  307. package/src/tests/Section8_DeclarationsAndDefinitions/Rule_8_9_BlockScopeDefinition.test.ts +69 -0
  308. package/src/tests/utils.ts +32 -7
  309. package/src/utils/CallUtils.ts +40 -0
  310. package/src/utils/CommentUtils.ts +29 -0
  311. package/src/utils/FileUtils.ts +141 -0
  312. package/src/utils/FunctionUtils.ts +75 -0
  313. package/src/utils/IdentifierUtils.ts +94 -0
  314. package/src/utils/JoinpointUtils.ts +53 -0
  315. package/src/utils/ProgramUtils.ts +83 -0
  316. package/src/utils/SwitchUtils.ts +52 -0
  317. package/src/utils/TypeDeclUtils.ts +89 -0
  318. package/src/utils/VarUtils.ts +70 -0
  319. package/tsconfig.json +2 -1
  320. package/src/rules/Section20-PreprocessingDirectives/Rule_20_2_InvalidHeaderFileName.ts +0 -120
  321. package/src/rules/Section3_Comments/Rule_3_2_LineSplicing.ts +0 -36
  322. package/src/utils/utils.ts +0 -280
@@ -1,13 +1,18 @@
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 16.5: A default label shall appear as either the first or the last switch label of
7
- a switch statement
5
+ * MISRA-C Rule 16.5: A default label shall appear as either the first or the last switch label of a switch statement
8
6
  */
9
7
  export default class Rule_16_5_DefaultFirstOrLast extends MISRARule {
10
- constructor(context: MISRAContext);
8
+ /**
9
+ * Scope of analysis
10
+ */
11
+ readonly analysisType = AnalysisType.SINGLE_TRANSLATION_UNIT;
12
+ /**
13
+ * @returns Rule identifier according to MISRA-C:2012
14
+ */
15
+ get name(): string;
11
16
  /**
12
17
  * Retrieves all consecutive case statements to the left of a given case statement
13
18
  *
@@ -38,6 +43,6 @@ export default class Rule_16_5_DefaultFirstOrLast extends MISRARule {
38
43
  * @param $jp - Joinpoint to transform
39
44
  * @returns Report detailing the transformation result
40
45
  */
41
- transform($jp: Joinpoint): MISRATransformationReport;
46
+ apply($jp: Joinpoint): MISRATransformationReport;
42
47
  }
43
48
  //# sourceMappingURL=Rule_16_5_DefaultFirstOrLast.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Rule_16_5_DefaultFirstOrLast.d.ts","sourceRoot":"","sources":["../../../src/rules/Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,SAAS,EAAkC,MAAM,qCAAqC,CAAC;AAC9G,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,YAAY,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAA2B,MAAM,gBAAgB,CAAC;AAGpF;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,4BAA6B,SAAQ,SAAS;gBAEnD,OAAO,EAAE,YAAY;IAIjC;;;;;;OAMG;IACH,OAAO,CAAC,wBAAwB;IAUhC;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;IAY/B;;;;;OAKG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO;IAmB1D;;;;;;OAMG;IACH,SAAS,CAAC,GAAG,EAAE,SAAS,GAAG,yBAAyB;CA4BvD"}
1
+ {"version":3,"file":"Rule_16_5_DefaultFirstOrLast.d.ts","sourceRoot":"","sources":["../../../src/rules/Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,SAAS,EAAU,MAAM,qCAAqC,CAAC;AAC7E,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAA2B,MAAM,gBAAgB,CAAC;AAGlG;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,4BAA6B,SAAQ,SAAS;IAC/D;;OAEG;IACH,QAAQ,CAAC,YAAY,wCAAwC;IAE5D;;MAEE;IACH,IAAa,IAAI,IAAI,MAAM,CAE1B;IAED;;;;;;OAMG;IACH,OAAO,CAAC,wBAAwB;IAUhC;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;IAY/B;;;;;OAKG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO;IAmB1D;;;;;;OAMG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS,GAAG,yBAAyB;CA+BnD"}
@@ -1,14 +1,20 @@
1
1
  import { Case, Switch } from "@specs-feup/clava/api/Joinpoints.js";
2
2
  import MISRARule from "../../MISRARule.js";
3
- import { MISRATransformationReport, MISRATransformationType } from "../../MISRA.js";
4
- import { isCommentStmt } from "../../utils/utils.js";
3
+ import { AnalysisType, MISRATransformationReport, MISRATransformationType } from "../../MISRA.js";
4
+ import { isCommentStmt } from "../../utils/CommentUtils.js";
5
5
  /**
6
- * MISRA Rule 16.5: A default label shall appear as either the first or the last switch label of
7
- a switch statement
6
+ * MISRA-C Rule 16.5: A default label shall appear as either the first or the last switch label of a switch statement
8
7
  */
9
8
  export default class Rule_16_5_DefaultFirstOrLast extends MISRARule {
10
- constructor(context) {
11
- super("16.5", context);
9
+ /**
10
+ * Scope of analysis
11
+ */
12
+ analysisType = AnalysisType.SINGLE_TRANSLATION_UNIT;
13
+ /**
14
+ * @returns Rule identifier according to MISRA-C:2012
15
+ */
16
+ get name() {
17
+ return "16.5";
12
18
  }
13
19
  /**
14
20
  * Retrieves all consecutive case statements to the left of a given case statement
@@ -20,7 +26,7 @@ export default class Rule_16_5_DefaultFirstOrLast extends MISRARule {
20
26
  getConsecutiveRightCases($jp) {
21
27
  const cases = [];
22
28
  for (const stmt of $jp.siblingsRight) {
23
- if (!(stmt instanceof Case || isCommentStmt($jp)))
29
+ if (!(stmt instanceof Case || isCommentStmt(stmt)))
24
30
  break;
25
31
  cases.push(stmt);
26
32
  }
@@ -61,7 +67,7 @@ export default class Rule_16_5_DefaultFirstOrLast extends MISRARule {
61
67
  return false;
62
68
  }
63
69
  if (logErrors) {
64
- this.logMISRAError($jp, "The default case of a switch statement must be the first or last label.");
70
+ this.logMISRAError(currentCase, "The default case of a switch statement must be the first or last label.");
65
71
  }
66
72
  return true;
67
73
  }
@@ -75,12 +81,14 @@ export default class Rule_16_5_DefaultFirstOrLast extends MISRARule {
75
81
  * @param $jp - Joinpoint to transform
76
82
  * @returns Report detailing the transformation result
77
83
  */
78
- transform($jp) {
79
- if (!this.match($jp))
84
+ apply($jp) {
85
+ const previousResult = $jp instanceof Switch ? this.context.getRuleResult("16.4", $jp) : undefined;
86
+ if (previousResult === MISRATransformationType.DescendantChange || !this.match($jp)) {
80
87
  return new MISRATransformationReport(MISRATransformationType.NoChange);
88
+ }
81
89
  const defaultCase = $jp.getDefaultCase;
82
90
  const rightStatements = defaultCase.siblingsRight.filter(sibling => !isCommentStmt(sibling));
83
- // Reposition the default case to the last position within its case clause lis
91
+ // Reposition the default case to the last position within its case clause list
84
92
  if (rightStatements[0] instanceof Case) { // At least one of the first statements is a Case
85
93
  const rightConsecutiveCases = this.getConsecutiveRightCases(defaultCase);
86
94
  const lastRightCase = rightConsecutiveCases[rightConsecutiveCases.length - 1];
@@ -1 +1 @@
1
- {"version":3,"file":"Rule_16_5_DefaultFirstOrLast.js","sourceRoot":"","sources":["../../../src/rules/Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Rule_16_5_DefaultFirstOrLast.js","sourceRoot":"","sources":["../../../src/rules/Section16_SwitchStatements/Rule_16_5_DefaultFirstOrLast.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,22 @@
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 16.6: Every switch statement shall have at least two switch-clauses.
5
+ * MISRA-C Rule 16.6: Every switch statement shall have at least two switch-clauses.
7
6
  */
8
7
  export default class Rule_16_6_SwitchMinTwoClauses extends MISRARule {
9
- constructor(context: MISRAContext);
8
+ /**
9
+ * A positive integer starting from 1 that indicates the rule's priority, determining the order in which rules are applied.
10
+ */
11
+ readonly priority = 5;
12
+ /**
13
+ * Scope of analysis
14
+ */
15
+ readonly analysisType = AnalysisType.SINGLE_TRANSLATION_UNIT;
16
+ /**
17
+ * @returns Rule identifier according to MISRA-C:2012
18
+ */
19
+ get name(): string;
10
20
  /**
11
21
  * Checks if the given joinpoint is a switch statement with less than two clauses
12
22
  * @param $jp - Joinpoint to analyze
@@ -21,6 +31,6 @@ export default class Rule_16_6_SwitchMinTwoClauses extends MISRARule {
21
31
  * @param $jp - Joinpoint to transform
22
32
  * @returns Report detailing the transformation result
23
33
  */
24
- transform($jp: Joinpoint): MISRATransformationReport;
34
+ apply($jp: Joinpoint): MISRATransformationReport;
25
35
  }
26
36
  //# sourceMappingURL=Rule_16_6_SwitchMinTwoClauses.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Rule_16_6_SwitchMinTwoClauses.d.ts","sourceRoot":"","sources":["../../../src/rules/Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,SAAS,EAAiC,MAAM,qCAAqC,CAAC;AAC3G,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,YAAY,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAwB,yBAAyB,EAA2B,MAAM,gBAAgB,CAAC;AAG1G;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,6BAA8B,SAAQ,SAAS;gBAEpD,OAAO,EAAE,YAAY;IAIjC;;;;;OAKG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO;IAU1D;;;;;;OAMG;IACH,SAAS,CAAC,GAAG,EAAE,SAAS,GAAG,yBAAyB;CAkBvD"}
1
+ {"version":3,"file":"Rule_16_6_SwitchMinTwoClauses.d.ts","sourceRoot":"","sources":["../../../src/rules/Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAU,MAAM,qCAAqC,CAAC;AACvE,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAwB,yBAAyB,EAA2B,MAAM,gBAAgB,CAAC;AAGxH;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,6BAA8B,SAAQ,SAAS;IAChE;;OAEG;IACH,QAAQ,CAAC,QAAQ,KAAK;IAEtB;;OAEG;IACH,QAAQ,CAAC,YAAY,wCAAwC;IAE5D;;MAEE;IACH,IAAa,IAAI,IAAI,MAAM,CAE1B;IAED;;;;;OAKG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO;IAU1D;;;;;;OAMG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS,GAAG,yBAAyB;CAsBnD"}
@@ -1,13 +1,24 @@
1
1
  import { Switch } from "@specs-feup/clava/api/Joinpoints.js";
2
2
  import MISRARule from "../../MISRARule.js";
3
- import { MISRASwitchConverter, MISRATransformationReport, MISRATransformationType } from "../../MISRA.js";
4
- import { getNumOfSwitchClauses, switchHasConditionalBreak } from "../../utils/utils.js";
3
+ import { AnalysisType, MISRASwitchConverter, MISRATransformationReport, MISRATransformationType } from "../../MISRA.js";
4
+ import { countSwitchClauses, hasConditionalBreak } from "../../utils/SwitchUtils.js";
5
5
  /**
6
- * MISRA Rule 16.6: Every switch statement shall have at least two switch-clauses.
6
+ * MISRA-C Rule 16.6: Every switch statement shall have at least two switch-clauses.
7
7
  */
8
8
  export default class Rule_16_6_SwitchMinTwoClauses extends MISRARule {
9
- constructor(context) {
10
- super("16.6", context);
9
+ /**
10
+ * A positive integer starting from 1 that indicates the rule's priority, determining the order in which rules are applied.
11
+ */
12
+ priority = 5;
13
+ /**
14
+ * Scope of analysis
15
+ */
16
+ analysisType = AnalysisType.SINGLE_TRANSLATION_UNIT;
17
+ /**
18
+ * @returns Rule identifier according to MISRA-C:2012
19
+ */
20
+ get name() {
21
+ return "16.6";
11
22
  }
12
23
  /**
13
24
  * Checks if the given joinpoint is a switch statement with less than two clauses
@@ -18,7 +29,7 @@ export default class Rule_16_6_SwitchMinTwoClauses extends MISRARule {
18
29
  match($jp, logErrors = false) {
19
30
  if (!($jp instanceof Switch))
20
31
  return false;
21
- const nonCompliant = getNumOfSwitchClauses($jp) < 2;
32
+ const nonCompliant = countSwitchClauses($jp) < 2;
22
33
  if (nonCompliant && logErrors) {
23
34
  this.logMISRAError($jp, "Switch statements should have at least two clauses.");
24
35
  }
@@ -31,14 +42,17 @@ export default class Rule_16_6_SwitchMinTwoClauses extends MISRARule {
31
42
  * @param $jp - Joinpoint to transform
32
43
  * @returns Report detailing the transformation result
33
44
  */
34
- transform($jp) {
45
+ apply($jp) {
35
46
  if (!this.match($jp))
36
47
  return new MISRATransformationReport(MISRATransformationType.NoChange);
37
- if (switchHasConditionalBreak($jp)) {
38
- this.logMISRAError($jp, "switch statement must have at least two clauses and cannot be transformed due to a conditional break statement.");
48
+ const switchJp = $jp;
49
+ if (hasConditionalBreak(switchJp)) {
50
+ if (switchJp.hasDefaultCase) {
51
+ this.logMISRAError($jp, "Switch statement must have at least two clauses and cannot be transformed due to a conditional break statement.");
52
+ }
39
53
  return new MISRATransformationReport(MISRATransformationType.NoChange);
40
54
  }
41
- const transformResultNode = MISRASwitchConverter.convert($jp);
55
+ const transformResultNode = MISRASwitchConverter.convert(switchJp);
42
56
  if (transformResultNode) {
43
57
  return new MISRATransformationReport(MISRATransformationType.Replacement, transformResultNode);
44
58
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Rule_16_6_SwitchMinTwoClauses.js","sourceRoot":"","sources":["../../../src/rules/Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgD,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAC3G,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAC1G,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAExF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,6BAA8B,SAAQ,SAAS;IAEhE,YAAY,OAAqB;QAC7B,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,GAAc,EAAE,YAAqB,KAAK;QAC5C,IAAI,CAAC,CAAC,GAAG,YAAY,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;QAE3C,MAAM,YAAY,GAAG,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpD,IAAI,YAAY,IAAI,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,qDAAqD,CAAC,CAAA;QAClF,CAAC;QACD,OAAO,YAAY,CAAC;IACxB,CAAC;IAED;;;;;;OAMG;IACH,SAAS,CAAC,GAAc;QACpB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAE7F,IAAI,yBAAyB,CAAC,GAAa,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,iHAAiH,CAAC,CAAA;YAC1I,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAC3E,CAAC;QAED,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,OAAO,CAAC,GAAa,CAAC,CAAC;QACxE,IAAI,mBAAmB,EAAE,CAAC;YACtB,OAAO,IAAI,yBAAyB,CAChC,uBAAuB,CAAC,WAAW,EACnC,mBAAmB,CACtB,CAAC;QACN,CAAC;QACD,sDAAsD;QACtD,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAC1E,CAAC;CACJ"}
1
+ {"version":3,"file":"Rule_16_6_SwitchMinTwoClauses.js","sourceRoot":"","sources":["../../../src/rules/Section16_SwitchStatements/Rule_16_6_SwitchMinTwoClauses.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,MAAM,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACxH,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAErF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,6BAA8B,SAAQ,SAAS;IAChE;;OAEG;IACM,QAAQ,GAAG,CAAC,CAAC;IAEtB;;OAEG;IACM,YAAY,GAAG,YAAY,CAAC,uBAAuB,CAAC;IAE5D;;MAEE;IACH,IAAa,IAAI;QACb,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,GAAc,EAAE,YAAqB,KAAK;QAC5C,IAAI,CAAC,CAAC,GAAG,YAAY,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;QAE3C,MAAM,YAAY,GAAG,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,YAAY,IAAI,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,qDAAqD,CAAC,CAAA;QAClF,CAAC;QACD,OAAO,YAAY,CAAC;IACxB,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,GAAc;QAChB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YAChB,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAE3E,MAAM,QAAQ,GAAG,GAAa,CAAC;QAC/B,IAAI,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChC,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAC1B,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,iHAAiH,CAAC,CAAA;YAC9I,CAAC;YACD,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAC3E,CAAC;QAED,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnE,IAAI,mBAAmB,EAAE,CAAC;YACtB,OAAO,IAAI,yBAAyB,CAChC,uBAAuB,CAAC,WAAW,EACnC,mBAAmB,CACtB,CAAC;QACN,CAAC;QACD,sDAAsD;QACtD,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAC1E,CAAC;CACJ"}
@@ -1,12 +1,28 @@
1
- import { Joinpoint } from "@specs-feup/clava/api/Joinpoints.js";
1
+ import { Joinpoint, Switch } 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 16.7: A switch-expression shall not have essentially Boolean type.
5
+ * MISRA-C Rule 16.7: A switch-expression shall not have essentially Boolean type.
7
6
  */
8
7
  export default class Rule_16_7_NonBooleanSwitchCondition extends MISRARule {
9
- constructor(context: MISRAContext);
8
+ /**
9
+ * A positive integer starting from 1 that indicates the rule's priority, determining the order in which rules are applied.
10
+ */
11
+ readonly priority = 5;
12
+ /**
13
+ * Scope of analysis
14
+ */
15
+ readonly analysisType = AnalysisType.SINGLE_TRANSLATION_UNIT;
16
+ /**
17
+ * @returns Rule identifier according to MISRA-C:2012
18
+ */
19
+ get name(): string;
20
+ /**
21
+ * Checks if the provided switch statement has a Boolean condition
22
+ * @param switchStmt The switch statement to check
23
+ * @returns Returns true if the switch statement has a Boolean condition, otherwise false
24
+ */
25
+ switchHasBooleanCondition(switchStmt: Switch): boolean;
10
26
  /**
11
27
  * Checks if the given joinpoint is a switch statement with an essentially Boolean condition
12
28
  * @param $jp - Joinpoint to analyze
@@ -21,6 +37,6 @@ export default class Rule_16_7_NonBooleanSwitchCondition extends MISRARule {
21
37
  * @param $jp - Joinpoint to transform
22
38
  * @returns Report detailing the transformation result
23
39
  */
24
- transform($jp: Joinpoint): MISRATransformationReport;
40
+ apply($jp: Joinpoint): MISRATransformationReport;
25
41
  }
26
42
  //# sourceMappingURL=Rule_16_7_NonBooleanSwitchCondition.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Rule_16_7_NonBooleanSwitchCondition.d.ts","sourceRoot":"","sources":["../../../src/rules/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,SAAS,EAAU,MAAM,qCAAqC,CAAC;AACrF,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,YAAY,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAwB,yBAAyB,EAA2B,MAAM,gBAAgB,CAAC;AAG1G;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,mCAAoC,SAAQ,SAAS;gBAC1D,OAAO,EAAE,YAAY;IAIjC;;;;;OAKG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO;IAU1D;;;;;;OAMG;IACH,SAAS,CAAC,GAAG,EAAE,SAAS,GAAG,yBAAyB;CAkBvD"}
1
+ {"version":3,"file":"Rule_16_7_NonBooleanSwitchCondition.d.ts","sourceRoot":"","sources":["../../../src/rules/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,SAAS,EAAE,MAAM,EAAW,MAAM,qCAAqC,CAAC;AACxG,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAwB,yBAAyB,EAA2B,MAAM,gBAAgB,CAAC;AAIxH;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,mCAAoC,SAAQ,SAAS;IACtE;;OAEG;IACH,QAAQ,CAAC,QAAQ,KAAK;IAEtB;;OAEG;IACH,QAAQ,CAAC,YAAY,wCAAwC;IAE7D;;OAEG;IACH,IAAa,IAAI,IAAI,MAAM,CAE1B;IAED;;;;OAIG;IACH,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAatD;;;;;OAKG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO;IAU1D;;;;;;OAMG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS,GAAG,yBAAyB;CAmBnD"}
@@ -1,13 +1,40 @@
1
- import { Switch } from "@specs-feup/clava/api/Joinpoints.js";
1
+ import { BinaryOp, BuiltinType, Switch, UnaryOp } from "@specs-feup/clava/api/Joinpoints.js";
2
2
  import MISRARule from "../../MISRARule.js";
3
- import { MISRASwitchConverter, MISRATransformationReport, MISRATransformationType } from "../../MISRA.js";
4
- import { switchHasBooleanCondition, switchHasConditionalBreak } from "../../utils/utils.js";
3
+ import { AnalysisType, MISRASwitchConverter, MISRATransformationReport, MISRATransformationType } from "../../MISRA.js";
4
+ import { hasConditionalBreak } from "../../utils/SwitchUtils.js";
5
+ import { hasDefinedType } from "../../utils/JoinpointUtils.js";
5
6
  /**
6
- * MISRA Rule 16.7: A switch-expression shall not have essentially Boolean type.
7
+ * MISRA-C Rule 16.7: A switch-expression shall not have essentially Boolean type.
7
8
  */
8
9
  export default class Rule_16_7_NonBooleanSwitchCondition extends MISRARule {
9
- constructor(context) {
10
- super("16.7", context);
10
+ /**
11
+ * A positive integer starting from 1 that indicates the rule's priority, determining the order in which rules are applied.
12
+ */
13
+ priority = 5;
14
+ /**
15
+ * Scope of analysis
16
+ */
17
+ analysisType = AnalysisType.SINGLE_TRANSLATION_UNIT;
18
+ /**
19
+ * @returns Rule identifier according to MISRA-C:2012
20
+ */
21
+ get name() {
22
+ return "16.7";
23
+ }
24
+ /**
25
+ * Checks if the provided switch statement has a Boolean condition
26
+ * @param switchStmt The switch statement to check
27
+ * @returns Returns true if the switch statement has a Boolean condition, otherwise false
28
+ */
29
+ switchHasBooleanCondition(switchStmt) {
30
+ const switchCondition = switchStmt.condition;
31
+ if (switchCondition instanceof BinaryOp || switchCondition instanceof UnaryOp) {
32
+ const logicalOps = new Set(["lt", "gt", "le", "ge", "eq", "ne", "not", "l_not", "and", "or"]);
33
+ return logicalOps.has(switchCondition.kind);
34
+ }
35
+ return hasDefinedType(switchCondition) &&
36
+ switchCondition.type instanceof BuiltinType &&
37
+ switchCondition.type.builtinKind === "Bool";
11
38
  }
12
39
  /**
13
40
  * Checks if the given joinpoint is a switch statement with an essentially Boolean condition
@@ -18,9 +45,9 @@ export default class Rule_16_7_NonBooleanSwitchCondition extends MISRARule {
18
45
  match($jp, logErrors = false) {
19
46
  if (!($jp instanceof Switch))
20
47
  return false;
21
- const booleanCondition = switchHasBooleanCondition($jp);
48
+ const booleanCondition = this.switchHasBooleanCondition($jp);
22
49
  if (booleanCondition && logErrors) {
23
- this.logMISRAError($jp, `Switch statement controlling expression ${$jp.condition.code} must not have essentially boolean type.`);
50
+ this.logMISRAError($jp, `Switch statement controlling expression '${$jp.condition.code}' must not have essentially boolean type.`);
24
51
  }
25
52
  return booleanCondition;
26
53
  }
@@ -31,10 +58,10 @@ export default class Rule_16_7_NonBooleanSwitchCondition extends MISRARule {
31
58
  * @param $jp - Joinpoint to transform
32
59
  * @returns Report detailing the transformation result
33
60
  */
34
- transform($jp) {
61
+ apply($jp) {
35
62
  if (!this.match($jp))
36
63
  return new MISRATransformationReport(MISRATransformationType.NoChange);
37
- if (switchHasConditionalBreak($jp)) {
64
+ if (hasConditionalBreak($jp)) {
38
65
  this.logMISRAError($jp, `The switch statement's controlling expression ${$jp.condition.code} must not be of a boolean type and cannot be transformed due to a conditional break statement.`);
39
66
  return new MISRATransformationReport(MISRATransformationType.NoChange);
40
67
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Rule_16_7_NonBooleanSwitchCondition.js","sourceRoot":"","sources":["../../../src/rules/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,MAAM,EAAE,MAAM,qCAAqC,CAAC;AACrF,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAC1G,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAE5F;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,mCAAoC,SAAQ,SAAS;IACtE,YAAY,OAAqB;QAC7B,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,GAAc,EAAE,YAAqB,KAAK;QAC5C,IAAI,CAAC,CAAC,GAAG,YAAY,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;QAE3C,MAAM,gBAAgB,GAAG,yBAAyB,CAAC,GAAG,CAAC,CAAC;QACxD,IAAI,gBAAgB,IAAI,SAAS,EAAE,CAAC;YAChC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,2CAA2C,GAAG,CAAC,SAAS,CAAC,IAAI,0CAA0C,CAAC,CAAA;QACpI,CAAC;QACD,OAAO,gBAAgB,CAAC;IAC5B,CAAC;IAED;;;;;;OAMG;IACH,SAAS,CAAC,GAAc;QACpB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAE7F,IAAI,yBAAyB,CAAC,GAAa,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,iDAAkD,GAAc,CAAC,SAAS,CAAC,IAAI,gGAAgG,CAAC,CAAA;YACxM,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAC3E,CAAC;QAED,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,OAAO,CAAC,GAAa,CAAC,CAAC;QACxE,IAAI,mBAAmB,EAAE,CAAC;YACtB,OAAO,IAAI,yBAAyB,CAChC,uBAAuB,CAAC,WAAW,EACnC,mBAAmB,CACtB,CAAC;QACN,CAAC;QACD,sDAAsD;QACtD,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAC1E,CAAC;CACJ"}
1
+ {"version":3,"file":"Rule_16_7_NonBooleanSwitchCondition.js","sourceRoot":"","sources":["../../../src/rules/Section16_SwitchStatements/Rule_16_7_NonBooleanSwitchCondition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAa,MAAM,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AACxG,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACxH,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,mCAAoC,SAAQ,SAAS;IACtE;;OAEG;IACM,QAAQ,GAAG,CAAC,CAAC;IAEtB;;OAEG;IACM,YAAY,GAAG,YAAY,CAAC,uBAAuB,CAAC;IAE7D;;OAEG;IACH,IAAa,IAAI;QACb,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;OAIG;IACH,yBAAyB,CAAC,UAAkB;QACxC,MAAM,eAAe,GAAG,UAAU,CAAC,SAAS,CAAC;QAE7C,IAAI,eAAe,YAAY,QAAQ,IAAI,eAAe,YAAY,OAAO,EAAE,CAAC;YAC5E,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;YAC9F,OAAO,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,cAAc,CAAC,eAAe,CAAC;YAClC,eAAe,CAAC,IAAI,YAAY,WAAW;YAC3C,eAAe,CAAC,IAAI,CAAC,WAAW,KAAK,MAAM,CAAC;IACpD,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,GAAc,EAAE,YAAqB,KAAK;QAC5C,IAAI,CAAC,CAAC,GAAG,YAAY,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;QAE3C,MAAM,gBAAgB,GAAG,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC;QAC7D,IAAI,gBAAgB,IAAI,SAAS,EAAE,CAAC;YAChC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,4CAA4C,GAAG,CAAC,SAAS,CAAC,IAAI,2CAA2C,CAAC,CAAA;QACtI,CAAC;QACD,OAAO,gBAAgB,CAAC;IAC5B,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,GAAc;QAChB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YAChB,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAE3E,IAAI,mBAAmB,CAAC,GAAa,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,iDAAkD,GAAc,CAAC,SAAS,CAAC,IAAI,gGAAgG,CAAC,CAAA;YACxM,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAC3E,CAAC;QAED,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,OAAO,CAAC,GAAa,CAAC,CAAC;QACxE,IAAI,mBAAmB,EAAE,CAAC;YACtB,OAAO,IAAI,yBAAyB,CAChC,uBAAuB,CAAC,WAAW,EACnC,mBAAmB,CACtB,CAAC;QACN,CAAC;QACD,sDAAsD;QACtD,OAAO,IAAI,yBAAyB,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAC1E,CAAC;CACJ"}
@@ -0,0 +1,66 @@
1
+ import { Call, Joinpoint } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import { AnalysisType, MISRATransformationReport } from "../../MISRA.js";
3
+ import UserConfigurableRule from "../UserConfigurableRule.js";
4
+ /**
5
+ * MISRA-C Rule 17.3: A function shall not be declared implicitly
6
+ */
7
+ export default class Rule_17_3_ImplicitFunction extends UserConfigurableRule {
8
+ /**
9
+ * A positive integer starting from 1 that indicates the rule's priority, determining the order in which rules are applied.
10
+ */
11
+ readonly priority = 1;
12
+ /**
13
+ * Scope of analysis
14
+ */
15
+ readonly analysisType = AnalysisType.SINGLE_TRANSLATION_UNIT;
16
+ /**
17
+ * Standards to which this rule applies to
18
+ */
19
+ protected readonly appliesTo: Set<string>;
20
+ /**
21
+ * @returns Rule identifier according to MISRA-C:2012
22
+ */
23
+ get name(): string;
24
+ /**
25
+ * Returns the prefix to be used for error messages related to the given joinpoint
26
+ *
27
+ * @param $jp - Joinpoint where the violation was detected
28
+ * @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
29
+ */
30
+ getErrorMsgPrefix(callJp: Call): string;
31
+ /**
32
+ * Retrieves the fix for a implicit call specified on the config file (.h or .c)
33
+ * @param callJp
34
+ * @param errorMsgPrefix
35
+ * @returns
36
+ */
37
+ getFixFromConfig(callJp: Call): string | undefined;
38
+ /**
39
+ * Checks if the given joinpoint represents a call to an implicit function.
40
+ *
41
+ * @param $jp - Joinpoint to analyze
42
+ * @param logErrors - [logErrors=false] - Whether to log errors if a violation is detected
43
+ * @returns Returns true if the joinpoint violates the rule, false otherwise
44
+ */
45
+ match($jp: Joinpoint, logErrors?: boolean): boolean;
46
+ /**
47
+ * Transforms every implicit call by adding a missing include directive or extern statement specified on the config file.
48
+ *
49
+ * - 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.
50
+ * - The fix is applied only if it successfully resolves the issue (i.e., makes the call explicit and the file compiles with no error).
51
+ * - Otherwise, the fix is removed.
52
+ *
53
+ * @param $jp - Joinpoint to transform
54
+ * @returns Report detailing the transformation result
55
+ */
56
+ apply($jp: Joinpoint): MISRATransformationReport;
57
+ /**
58
+ * Attempts to resolve implicit function calls in a file by adding missing includes or extern statements based on the configuration file.
59
+ * @param fileJp The file to analyze
60
+ * @returns `true` if any changes were made to the file, otherwise `false`.
61
+ */
62
+ private solveImplicitCalls;
63
+ private solveWithInclude;
64
+ private solveWithExtern;
65
+ }
66
+ //# sourceMappingURL=Rule_17_3_ImplicitFunction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rule_17_3_ImplicitFunction.d.ts","sourceRoot":"","sources":["../../../src/rules/Section17_Functions/Rule_17_3_ImplicitFunction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAU,SAAS,EAAW,MAAM,qCAAqC,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAA2B,MAAM,gBAAgB,CAAC;AAKlG,OAAO,oBAAoB,MAAM,4BAA4B,CAAC;AAE9D;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,0BAA2B,SAAQ,oBAAoB;IACxE;;OAEG;IACH,QAAQ,CAAC,QAAQ,KAAK;IAEtB;;OAEG;IACH,QAAQ,CAAC,YAAY,wCAAwC;IAE7D;;OAEG;IACH,mBAA4B,SAAS,cAAoB;IAEzD;;OAEG;IACH,IAAa,IAAI,IAAI,MAAM,CAE1B;IAED;;;;;OAKG;IACH,iBAAiB,CAAC,MAAM,EAAE,IAAI,GAAG,MAAM;IAIvC;;;;;OAKG;IACH,gBAAgB,CAAC,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS;IA4BlD;;;;;;OAMG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO;IAa1D;;;;;;;;;OASG;IACH,KAAK,CAAC,GAAG,EAAE,SAAS,GAAG,yBAAyB;IAqBhD;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAyC1B,OAAO,CAAC,gBAAgB;IA6BxB,OAAO,CAAC,eAAe;CAwB1B"}