|
1 | 1 | # typed: strong |
2 | 2 | # frozen_string_literal: true |
3 | 3 |
|
| 4 | +require "sorbet-runtime" |
| 5 | +require "dependabot/python/requirement_parser" |
| 6 | + |
4 | 7 | module Dependabot |
5 | 8 | module Uv |
6 | | - class RequirementParser |
7 | | - NAME = /[a-zA-Z0-9](?:[a-zA-Z0-9\-_\.]*[a-zA-Z0-9])?/ |
8 | | - EXTRA = /[a-zA-Z0-9\-_\.]+/ |
9 | | - COMPARISON = /===|==|>=|<=|<|>|~=|!=/ |
10 | | - VERSION = /([1-9][0-9]*!)?[0-9]+[a-zA-Z0-9\-_.*]*(\+[0-9a-zA-Z]+(\.[0-9a-zA-Z]+)*)?/ |
11 | | - |
12 | | - REQUIREMENT = /(?<comparison>#{COMPARISON})\s*\\?\s*v?(?<version>#{VERSION})/ |
13 | | - HASH = /--hash=(?<algorithm>.*?):(?<hash>.*?)(?=\s|\\|$)/ |
14 | | - REQUIREMENTS = /#{REQUIREMENT}(\s*,\s*\\?\s*#{REQUIREMENT})*/ |
15 | | - HASHES = /#{HASH}(\s*\\?\s*#{HASH})*/ |
16 | | - MARKER_OP = /\s*(#{COMPARISON}|(\s*in)|(\s*not\s*in))/ |
17 | | - PYTHON_STR_C = %r{[a-zA-Z0-9\s\(\)\.\{\}\-_\*#:;/\?\[\]!~`@\$%\^&=\+\|<>]} |
18 | | - PYTHON_STR = /('(#{PYTHON_STR_C}|")*'|"(#{PYTHON_STR_C}|')*")/ |
19 | | - ENV_VAR = |
20 | | - /python_version|python_full_version|os_name|sys_platform| |
21 | | - platform_release|platform_system|platform_version|platform_machine| |
22 | | - platform_python_implementation|implementation_name| |
23 | | - implementation_version/ |
24 | | - MARKER_VAR = /\s*(#{ENV_VAR}|#{PYTHON_STR})/ |
25 | | - MARKER_EXPR_ONE = /#{MARKER_VAR}#{MARKER_OP}#{MARKER_VAR}/ |
26 | | - MARKER_EXPR = /(#{MARKER_EXPR_ONE}|\(\s*|\s*\)|\s+and\s+|\s+or\s+)+/ |
27 | | - |
28 | | - INSTALL_REQ_WITH_REQUIREMENT = |
29 | | - /\s*\\?\s*(?<name>#{NAME}) |
30 | | - \s*\\?\s*(\[\s*(?<extras>#{EXTRA}(\s*,\s*#{EXTRA})*)\s*\])? |
31 | | - \s*\\?\s*\(?(?<requirements>#{REQUIREMENTS})\)? |
32 | | - \s*\\?\s*(;\s*(?<markers>#{MARKER_EXPR}))? |
33 | | - \s*\\?\s*(?<hashes>#{HASHES})? |
34 | | - \s*#*\s*(?<comment>.+)? |
35 | | - /x |
36 | | - |
37 | | - INSTALL_REQ_WITHOUT_REQUIREMENT = |
38 | | - /^\s*\\?\s*(?<name>#{NAME}) |
39 | | - \s*\\?\s*(\[\s*(?<extras>#{EXTRA}(\s*,\s*#{EXTRA})*)\s*\])? |
40 | | - \s*\\?\s*(;\s*(?<markers>#{MARKER_EXPR}))? |
41 | | - \s*\\?\s*(?<hashes>#{HASHES})? |
42 | | - \s*#*\s*(?<comment>.+)?$ |
43 | | - /x |
44 | | - |
45 | | - VALID_REQ_TXT_REQUIREMENT = |
46 | | - /^\s*\\?\s*(?<name>#{NAME}) |
47 | | - \s*\\?\s*(\[\s*(?<extras>#{EXTRA}(\s*,\s*#{EXTRA})*)\s*\])? |
48 | | - \s*\\?\s*\(?(?<requirements>#{REQUIREMENTS})?\)? |
49 | | - \s*\\?\s*(;\s*(?<markers>#{MARKER_EXPR}))? |
50 | | - \s*\\?\s*(?<hashes>#{HASHES})? |
51 | | - \s*(\#+\s*(?<comment>.*))?$ |
52 | | - /x |
53 | | - |
54 | | - NAME_WITH_EXTRAS = |
55 | | - /\s*\\?\s*(?<name>#{NAME}) |
56 | | - (\s*\\?\s*\[\s*(?<extras>#{EXTRA}(\s*,\s*#{EXTRA})*)\s*\])? |
57 | | - /x |
58 | | - end |
| 9 | + # UV uses the same Python requirement parsing regex patterns (PEP 508) |
| 10 | + RequirementParser = Dependabot::Python::RequirementParser |
59 | 11 | end |
60 | 12 | end |
0 commit comments