mirror of
https://github.com/tiennm99/serena.git
synced 2026-10-17 10:14:45 +00:00
Add FindFileTool
This commit is contained in:
1 parent
d9388ac4bd
commit
3ef45d20da
1 file changed
+40
@@ -15,6 +15,7 @@ from collections import defaultdict
|
|||||||
from collections.abc import Callable, Generator, Iterable, Sequence
|
from collections.abc import Callable, Generator, Iterable, Sequence
|
||||||
from copy import copy, deepcopy
|
from copy import copy, deepcopy
|
||||||
from dataclasses import dataclass, field
|
from dataclasses import dataclass, field
|
||||||
|
from fnmatch import fnmatch
|
||||||
from functools import cached_property
|
from functools import cached_property
|
||||||
from logging import Logger
|
from logging import Logger
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
@@ -1046,6 +1047,45 @@ class ListDirTool(Tool):
|
|||||||
return self._limit_length(result, max_answer_chars)
|
return self._limit_length(result, max_answer_chars)
|
||||||
|
|
||||||
|
|
||||||
|
class FindFileTool(Tool):
|
||||||
|
"""
|
||||||
|
Finds files in the given relative paths
|
||||||
|
"""
|
||||||
|
|
||||||
|
def apply(self, file_mask: str, relative_path: str | None = None) -> str:
|
||||||
|
"""
|
||||||
|
Finds files matching the given file mask within the given relative path
|
||||||
|
|
||||||
|
:param file_mask: the filename or file mask (using the wildcards * or ?) to search for
|
||||||
|
:param relative_path: the relative path to the directory to search in; pass "." to scan the project root
|
||||||
|
:return: a JSON object with the list of matching files
|
||||||
|
"""
|
||||||
|
|
||||||
|
def is_ignored_path(abs_path: str) -> bool:
|
||||||
|
rel_path = os.path.relpath(abs_path, self.get_project_root())
|
||||||
|
return self.language_server.is_ignored_path(rel_path, ignore_unsupported_files=False)
|
||||||
|
|
||||||
|
def is_ignored_file(abs_path: str) -> bool:
|
||||||
|
if is_ignored_path(abs_path):
|
||||||
|
return True
|
||||||
|
filename = os.path.basename(abs_path)
|
||||||
|
is_ignored = not fnmatch(filename, file_mask)
|
||||||
|
if not is_ignored:
|
||||||
|
is_ignored = not fnmatch(filename, file_mask)
|
||||||
|
return is_ignored
|
||||||
|
|
||||||
|
dirs, files = scan_directory(
|
||||||
|
os.path.join(self.get_project_root(), relative_path),
|
||||||
|
relative_to=self.get_project_root(),
|
||||||
|
recursive=True,
|
||||||
|
is_ignored_dir=is_ignored_path,
|
||||||
|
is_ignored_file=is_ignored_file,
|
||||||
|
)
|
||||||
|
|
||||||
|
result = json.dumps({"files": files})
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
class GetSymbolsOverviewTool(Tool):
|
class GetSymbolsOverviewTool(Tool):
|
||||||
"""
|
"""
|
||||||
Gets an overview of the top-level symbols defined in a given file or directory.
|
Gets an overview of the top-level symbols defined in a given file or directory.
|
||||||
|
|||||||
Reference in new issue
Block a user