11import sys
22import shutil
3- import toml
43import subprocess
4+ import tomllib
55from pathlib import Path
66import logging
77from typing import Optional , List
8- from packaging .version import Version , InvalidVersion
98
109LOG = logging .getLogger (__name__ )
1110
@@ -15,16 +14,16 @@ def get_version_from_dependency(tool: str) -> Optional[str]:
1514 pyproject_path = Path (__file__ ).parent .parent / "pyproject.toml"
1615 if not pyproject_path .exists ():
1716 return None
18- data = toml .load (pyproject_path )
17+ data = tomllib .load (pyproject_path )
1918 dependencies = data .get ("project" , {}).get ("dependencies" , [])
2019 for dep in dependencies :
2120 if dep .startswith (f"{ tool } ==" ):
2221 return dep .split ("==" )[1 ]
2322 return None
2423
2524
26- DEFAULT_CLANG_FORMAT_VERSION = get_version_from_dependency ("clang-format" ) or "20.1.7"
27- DEFAULT_CLANG_TIDY_VERSION = get_version_from_dependency ("clang-tidy" ) or "20.1.0"
25+ DEFAULT_CLANG_FORMAT_VERSION = get_version_from_dependency ("clang-format" )
26+ DEFAULT_CLANG_TIDY_VERSION = get_version_from_dependency ("clang-tidy" )
2827
2928
3029CLANG_FORMAT_VERSIONS = [
@@ -112,25 +111,15 @@ def _resolve_version(versions: List[str], user_input: Optional[str]) -> Optional
112111 """Resolve the version based on user input and available versions."""
113112 if user_input is None :
114113 return None
114+ if user_input in versions :
115+ return user_input
115116 try :
116- user_ver = Version (user_input )
117- except InvalidVersion :
117+ # Check if the user input is a valid version
118+ return next (v for v in versions if v .startswith (user_input ) or v == user_input )
119+ except StopIteration :
120+ LOG .warning ("Version %s not found in available versions" , user_input )
118121 return None
119122
120- candidates = [Version (v ) for v in versions ]
121- if user_input .count ("." ) == 0 :
122- matches = [v for v in candidates if v .major == user_ver .major ]
123- elif user_input .count ("." ) == 1 :
124- matches = [
125- v
126- for v in candidates
127- if f"{ v .major } .{ v .minor } " == f"{ user_ver .major } .{ user_ver .minor } "
128- ]
129- else :
130- return str (user_ver ) if user_ver in candidates else None
131-
132- return str (max (matches )) if matches else None
133-
134123
135124def _get_runtime_version (tool : str ) -> Optional [str ]:
136125 """Get the runtime version of a tool."""
0 commit comments