|
1 | 1 | description: Search rules for identifying dependency versions |
| 2 | + |
2 | 3 | rules: |
3 | | - - name: explicit_version_string |
4 | | - description: Finds explicit version strings in code or configs. |
5 | | - examples: |
6 | | - - "'3.7'" |
7 | | - - '"3.7.1"' |
8 | | - - "'3.7.12'" |
9 | | - - "Python 3.7" |
10 | | - rules: |
11 | | - - | |
12 | | - \b{major}\.{minor}(\.\d+)?\b |
| 4 | + # ========================================== |
| 5 | + # 🐍 PYTHON RUNTIME SPECIFIC RULES |
| 6 | + # ========================================== |
13 | 7 |
|
14 | 8 | - name: python_requires |
15 | 9 | description: Finds various forms of python_requires declarations. |
@@ -123,16 +117,119 @@ rules: |
123 | 117 | - | |
124 | 118 | Python{major}{minor}(?!\d) |
125 | 119 |
|
| 120 | + # ========================================== |
| 121 | + # 📦 GENERIC RULES (WILL APPLY TO RUNTIMES OR PACKAGES) |
| 122 | + # ========================================== |
| 123 | + |
| 124 | + - name: explicit_version_string |
| 125 | + description: Finds explicit version strings in code or configs. |
| 126 | + examples: |
| 127 | + - "'3.7'" |
| 128 | + - '"3.7.1"' |
| 129 | + - "'3.7.12'" |
| 130 | + - "Python 3.7" |
| 131 | + rules: |
| 132 | + - | |
| 133 | + \b{major}\.{minor}(\.\d+)?\b |
| 134 | +
|
126 | 135 | - name: dependency_requirement |
127 | | - description: Finds standard dependency requirement formats (e.g., protobuf==3.7). |
| 136 | + description: Finds standard dependency requirements (e.g., protobuf==3.7, pandas>=1.0). |
128 | 137 | examples: |
129 | 138 | - "protobuf==3.7" |
130 | | - - "protobuf>=3.7" |
131 | | - - "protobuf<=3.7" |
132 | | - - "protobuf~=3.7" |
133 | | - - "protobuf!=3.7" |
| 139 | + - "protobuf >=3.7" |
| 140 | + - "protobuf<= 3.7" |
| 141 | + - "protobuf == 3.7" |
134 | 142 | rules: |
135 | 143 | - | |
136 | 144 | {name}\s*(?:==|>=|<=|~=|!=)\s*{version}(?!\d) |
137 | 145 |
|
| 146 | + - name: dependency_version_constant |
| 147 | + description: Finds checks against custom version constants (e.g., PROTOBUF_VERSION, PANDAS_VERSION). |
| 148 | + examples: |
| 149 | + - "PROTOBUF_VERSION = '3.7'" |
| 150 | + - "PROTOBUF_VERSION= '3.7'" |
| 151 | + - "PROTOBUF_VERSION ='3.7'" |
| 152 | + - "PROTOBUF_VERSION='3.7'" |
| 153 | + - 'PROTOBUF_VERSION = "3.7"' |
| 154 | + rules: |
| 155 | + - | |
| 156 | + {name}_VERSION\s*=\s*['"]?{version}['"]? |
| 157 | +
|
| 158 | + - name: dependency_version_constant_membership |
| 159 | + description: Finds checks where a version constant is checked for membership in a collection. |
| 160 | + examples: |
| 161 | + - 'PROTOBUF_VERSION[0:2] in ["3.", "4."]' |
| 162 | + - 'PROTOBUF_VERSION[0:2] in {"3.", "4."}' |
| 163 | + - 'PROTOBUF_VERSION[0:2] in ("3.", "4.")' |
| 164 | + rules: |
| 165 | + - | |
| 166 | + {name}_VERSION(?:\[.*?\])?\s+in\s+[\(\[\{{].*?['"]?{major}\b.*?[\)\]\}}] |
| 167 | +
|
| 168 | + - name: dependency_wildcard_assignment |
| 169 | + description: Finds wildcard version specifications in code assignments or requirements. |
| 170 | + examples: |
| 171 | + - 'protobuf == "3.x"' |
| 172 | + - 'protobuf >= "3.*"' |
| 173 | + rules: |
| 174 | + - | |
| 175 | + {name}\s*(?:==|>=|<=|~=|!=)\s*['"]?{major}\.[x\*]['"]? |
| 176 | +
|
| 177 | + - name: dependency_wildcard_generic |
| 178 | + description: Finds wildcard version specifications in comments or documentation. |
| 179 | + examples: |
| 180 | + - "protobuf 3.x" |
| 181 | + - "protobuf 3.*" |
| 182 | + rules: |
| 183 | + - | |
| 184 | + {name}\s+.*{major}\.[x\*](?!\w) |
| 185 | +
|
| 186 | + - name: dependency_flexible_version |
| 187 | + description: Finds versions with varying levels of specificity with accompanying qualifier. |
| 188 | + examples: |
| 189 | + - "protobuf 3." |
| 190 | + - "protobuf 3.7" |
| 191 | + - "protobuf 3.7." |
| 192 | + - "protobuf 3.7.5" |
| 193 | + rules: |
| 194 | + - | |
| 195 | + {name}\s+{major}\.(?!\d) |
| 196 | + - | |
| 197 | + \b{major}\.{minor}(?!\d) |
| 198 | + - | |
| 199 | + \b{major}\.{minor}\.(?!\d) |
| 200 | + - | |
| 201 | + \b{major}\.{minor}\.{patch}(?!\d) |
| 202 | +
|
| 203 | + - name: generic_dependency_check_call |
| 204 | + description: Finds generic function or class calls checking dependency and version. |
| 205 | + examples: |
| 206 | + - 'DependencyConstraint("google.protobuf", minimum_fully_supported_version="3.7")' |
| 207 | + - 'CheckDep("protobuf", "3.7")' |
| 208 | + rules: |
| 209 | + - | |
| 210 | + \b[A-Za-z_]\w*\s*\([^)]*['"](?:google\.)?{name}['"][^)]*{version}[^)]*\) |
| 211 | +
|
| 212 | + - name: dependency_introspection |
| 213 | + description: Finds standard package introspection methods and libraries. |
| 214 | + examples: |
| 215 | + - "protobuf.__version__" |
| 216 | + - "importlib.metadata.version('protobuf')" |
| 217 | + - "pkg_resources.get_distribution('protobuf')" |
| 218 | + - "packaging.version" |
| 219 | + - "dist.metadata['Name'] == 'protobuf'" |
| 220 | + rules: |
| 221 | + - | |
| 222 | + {name}\.__version__ |
| 223 | + - | |
| 224 | + importlib\.metadata\.version\s*\(\s*['"]{name}['"]\s*\) |
| 225 | + - | |
| 226 | + pkg_resources\.get_distribution\s*\(\s*['"]{name}['"]\s*\) |
| 227 | + - | |
| 228 | + packaging\.version |
| 229 | + - | |
| 230 | + dist\.metadata\s*\[\s*['"]Name['"]\s*\]\s*==\s*['"]{name}['"] |
138 | 231 |
|
| 232 | + # ========================================== |
| 233 | + # 🎯 PACKAGE SPECIFIC RULES (I.E. SPECIFIC TO PROTOBUF, PANDAS, ETC) |
| 234 | + # ========================================== |
| 235 | + # Currently empty. |
0 commit comments