1+ from codemodder .codemods .api import SimpleCodemod
12from codemodder .codemods .base_codemod import Metadata , Reference , ToolMetadata , ToolRule
23from codemodder .codemods .base_transformer import BaseTransformerPipeline
4+ from codemodder .codemods .libcst_transformer import LibcstTransformerPipeline
35from codemodder .codemods .semgrep import SemgrepSarifFileDetector
46from core_codemods .api .core_codemod import CoreCodemod , SASTCodemod
57
68
9+ def semgrep_url_from_id (rule_id : str ) -> str :
10+ return f"https://semgrep.dev/r?q={ rule_id } "
11+
12+
713class SemgrepCodemod (SASTCodemod ):
814 @property
915 def origin (self ):
@@ -18,14 +24,18 @@ def from_core_codemod(
1824 rule_name : str ,
1925 transformer : BaseTransformerPipeline | None = None ,
2026 ):
21- rule_url = f"https://semgrep.dev/r?q={ rule_id } "
2227 return SemgrepCodemod (
2328 metadata = Metadata (
2429 name = name ,
2530 summary = other .summary ,
2631 review_guidance = other ._metadata .review_guidance ,
2732 references = (
28- other .references + [Reference (url = rule_url , description = rule_name )]
33+ other .references
34+ + [
35+ Reference (
36+ url = semgrep_url_from_id (rule_id ), description = rule_name
37+ )
38+ ]
2939 ),
3040 description = other .description ,
3141 tool = ToolMetadata (
@@ -34,7 +44,7 @@ def from_core_codemod(
3444 ToolRule (
3545 id = rule_id ,
3646 name = rule_name ,
37- url = rule_url ,
47+ url = semgrep_url_from_id ( rule_id ) ,
3848 )
3949 ],
4050 ),
@@ -43,3 +53,42 @@ def from_core_codemod(
4353 detector = SemgrepSarifFileDetector (),
4454 requested_rules = [rule_id ],
4555 )
56+
57+ @classmethod
58+ def from_import_modifier_codemod (
59+ cls ,
60+ name : str ,
61+ other : type [SimpleCodemod ],
62+ rule_id : str ,
63+ rule_name : str ,
64+ ):
65+ metadata = other .metadata
66+ return SemgrepCodemod (
67+ metadata = Metadata (
68+ name = name ,
69+ summary = metadata .summary ,
70+ review_guidance = metadata .review_guidance ,
71+ references = (
72+ metadata .references
73+ + [
74+ Reference (
75+ url = semgrep_url_from_id (rule_id ), description = rule_name
76+ )
77+ ]
78+ ),
79+ description = other .change_description ,
80+ tool = ToolMetadata (
81+ name = "Semgrep" ,
82+ rules = [
83+ ToolRule (
84+ id = rule_id ,
85+ name = rule_name ,
86+ url = semgrep_url_from_id (rule_id ),
87+ )
88+ ],
89+ ),
90+ ),
91+ transformer = LibcstTransformerPipeline (other ),
92+ detector = SemgrepSarifFileDetector (),
93+ requested_rules = [rule_id ],
94+ )
0 commit comments