mirror of
https://github.com/kuhyx/testsAndMisc.git
synced 2026-11-10 21:47:02 +01:00
_analyzer.py 388 -> 226. The file walk, dotted-name map, import resolution and fingerprint go to _deps.py; the skip frozensets and the function regex to _scan_tables.py, which covered the last nine lines after the first cut landed at 259. _is_binary is the only name any test patches on _analyzer and it stays put, so no patch string needed editing. Only test_analyzer.py's import block had to be split. Pass count is 216 before and after. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011w2Pj4Ek3ZNMQVYcFHgXDY
49 lines
1.1 KiB
Python
49 lines
1.1 KiB
Python
"""Which paths the analyzer walks past, and how it spots a function.
|
|
|
|
Split out of :mod:`python_pkg.code_tutor._analyzer` to keep it under the
|
|
250-line cap. Pure data tables with no collaborators, so nothing patches them.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import re
|
|
|
|
_SKIP_DIRS: frozenset[str] = frozenset(
|
|
{
|
|
"third_party",
|
|
".venv",
|
|
"node_modules",
|
|
"__pycache__",
|
|
".git",
|
|
"dist",
|
|
"build",
|
|
}
|
|
)
|
|
_SKIP_SUFFIXES: frozenset[str] = frozenset(
|
|
{
|
|
".geojson",
|
|
".png",
|
|
".jpg",
|
|
".jpeg",
|
|
".gif",
|
|
".ico",
|
|
".svg",
|
|
".webp",
|
|
".pdf",
|
|
".zip",
|
|
".tar",
|
|
".gz",
|
|
".bin",
|
|
}
|
|
)
|
|
_OTHER_LANGS: frozenset[str] = frozenset(
|
|
{".js", ".ts", ".go", ".rs", ".c", ".cpp", ".dart"}
|
|
)
|
|
|
|
# Matches leading keyword(s) followed by an identifier and opening paren.
|
|
_FUNCTION_RE: re.Pattern[str] = re.compile(
|
|
r"^[ \t]*(?:(?:pub(?:lic)?|priv(?:ate)?|prot(?:ected)?|static|async)\s+)*"
|
|
r"(?:def|function|fn|func|void|int|float|bool|string)\s+(\w+)\s*\(",
|
|
re.MULTILINE,
|
|
)
|