SYMBOL INDEX (559 symbols across 74 files) FILE: src/mcp_server_tree_sitter/__main__.py function main (line 16) | def main() -> int: FILE: src/mcp_server_tree_sitter/api.py function get_project_registry (line 16) | def get_project_registry() -> Any: function get_language_registry (line 21) | def get_language_registry() -> Any: function get_tree_cache (line 26) | def get_tree_cache() -> Any: function get_config (line 31) | def get_config() -> Any: function get_config_manager (line 36) | def get_config_manager() -> Any: function register_project (line 41) | def register_project(path: str, name: Optional[str] = None, description:... function list_projects (line 67) | def list_projects() -> List[Dict[str, Any]]: function remove_project (line 85) | def remove_project(name: str) -> Dict[str, str]: function clear_cache (line 91) | def clear_cache(project: Optional[str] = None, file_path: Optional[str] ... FILE: src/mcp_server_tree_sitter/bootstrap/logging_bootstrap.py function get_log_level_from_env (line 25) | def get_log_level_from_env() -> int: function configure_root_logger (line 36) | def configure_root_logger() -> None: function update_log_levels (line 66) | def update_log_levels(level_name: Union[str, int]) -> None: function get_logger (line 113) | def get_logger(name: str) -> logging.Logger: FILE: src/mcp_server_tree_sitter/cache/parser_cache.py class TreeCache (line 22) | class TreeCache: method __init__ (line 25) | def __init__(self, max_size_mb: Optional[int] = None, ttl_seconds: Opt... method _get_cache_key (line 35) | def _get_cache_key(self, file_path: Path, language: str) -> str: method set_enabled (line 39) | def set_enabled(self, enabled: bool) -> None: method set_max_size_mb (line 43) | def set_max_size_mb(self, max_size_mb: int) -> None: method set_ttl_seconds (line 47) | def set_ttl_seconds(self, ttl_seconds: int) -> None: method _get_max_size_mb (line 51) | def _get_max_size_mb(self) -> float: method _get_ttl_seconds (line 63) | def _get_ttl_seconds(self) -> int: method _is_cache_enabled (line 75) | def _is_cache_enabled(self) -> bool: method get (line 93) | def get(self, file_path: Path, language: str) -> Optional[Tuple[Tree, ... method put (line 136) | def put(self, file_path: Path, language: str, tree: Tree, source: byte... method mark_modified (line 193) | def mark_modified(self, file_path: Path, language: str) -> None: method is_modified (line 209) | def is_modified(self, file_path: Path, language: str) -> bool: method update_tree (line 227) | def update_tree(self, file_path: Path, language: str, tree: Tree, sour... method _evict_entries (line 256) | def _evict_entries(self, required_bytes: int) -> None: method invalidate (line 325) | def invalidate(self, file_path: Optional[Path] = None) -> None: function get_tree_cache (line 355) | def get_tree_cache() -> TreeCache: function get_cached_parser (line 364) | def get_cached_parser(language: Any) -> Parser: FILE: src/mcp_server_tree_sitter/capabilities/server_capabilities.py function register_capabilities (line 9) | def register_capabilities(mcp_server: Any) -> None: FILE: src/mcp_server_tree_sitter/config.py class CacheConfig (line 28) | class CacheConfig(BaseModel): class SecurityConfig (line 36) | class SecurityConfig(BaseModel): class LanguageConfig (line 46) | class LanguageConfig(BaseModel): class ServerConfig (line 54) | class ServerConfig(BaseModel): method from_file (line 64) | def from_file(cls, path: str) -> "ServerConfig": method from_env (line 99) | def from_env(cls) -> "ServerConfig": function update_config_from_env (line 106) | def update_config_from_env(config: ServerConfig) -> None: function _convert_value (line 171) | def _convert_value(value_str: str, current_value: Any) -> Any: class ConfigurationManager (line 203) | class ConfigurationManager: method __init__ (line 206) | def __init__(self, initial_config: Optional[ServerConfig] = None): method get_config (line 234) | def get_config(self) -> ServerConfig: method load_from_file (line 238) | def load_from_file(self, path: Union[str, Path]) -> ServerConfig: method update_value (line 352) | def update_value(self, path: str, value: Any) -> None: method to_dict (line 393) | def to_dict(self) -> Dict[str, Any]: function get_default_config_path (line 420) | def get_default_config_path() -> Optional[Path]: function update_config_from_new (line 437) | def update_config_from_new(original: ServerConfig, new: ServerConfig) ->... function load_config (line 492) | def load_config(config_path: Optional[str] = None) -> ServerConfig: FILE: src/mcp_server_tree_sitter/context.py class ServerContext (line 22) | class ServerContext: method __init__ (line 25) | def __init__( method get_config (line 43) | def get_config(self) -> ServerConfig: method register_project (line 48) | def register_project( method list_projects (line 63) | def list_projects(self) -> List[Dict[str, Any]]: method remove_project (line 67) | def remove_project(self, name: str) -> Dict[str, str]: method clear_cache (line 73) | def clear_cache(self, project: Optional[str] = None, file_path: Option... method configure (line 89) | def configure( function get_global_context (line 128) | def get_global_context() -> ServerContext: FILE: src/mcp_server_tree_sitter/di.py class DependencyContainer (line 19) | class DependencyContainer: method __init__ (line 22) | def __init__(self) -> None: method get_config (line 42) | def get_config(self) -> ServerConfig: method register_dependency (line 48) | def register_dependency(self, name: str, instance: Any) -> None: method get_dependency (line 52) | def get_dependency(self, name: str) -> Any: function get_container (line 61) | def get_container() -> DependencyContainer: FILE: src/mcp_server_tree_sitter/exceptions.py class MCPTreeSitterError (line 4) | class MCPTreeSitterError(Exception): class LanguageError (line 10) | class LanguageError(MCPTreeSitterError): class LanguageNotFoundError (line 16) | class LanguageNotFoundError(LanguageError): class LanguageInstallError (line 22) | class LanguageInstallError(LanguageError): class ParsingError (line 28) | class ParsingError(MCPTreeSitterError): class ProjectError (line 34) | class ProjectError(MCPTreeSitterError): class FileAccessError (line 40) | class FileAccessError(MCPTreeSitterError): class QueryError (line 46) | class QueryError(MCPTreeSitterError): class SecurityError (line 52) | class SecurityError(MCPTreeSitterError): class CacheError (line 58) | class CacheError(MCPTreeSitterError): FILE: src/mcp_server_tree_sitter/language/query_templates.py function get_query_template (line 8) | def get_query_template(language: str, template_name: str) -> Optional[str]: function list_query_templates (line 25) | def list_query_templates(language: Optional[Union[str, List[str]]] = Non... FILE: src/mcp_server_tree_sitter/language/registry.py class LanguageRegistry (line 23) | class LanguageRegistry: method __init__ (line 26) | def __init__(self) -> None: method preload_languages (line 71) | def preload_languages(self, config: ServerConfig) -> None: method language_for_file (line 87) | def language_for_file(self, file_path: str) -> Optional[str]: method list_available_languages (line 100) | def list_available_languages(self) -> List[str]: method list_installable_languages (line 144) | def list_installable_languages(self) -> List[Tuple[str, str]]: method is_language_available (line 154) | def is_language_available(self, language_name: str) -> bool: method get_language (line 170) | def get_language(self, language_name: str) -> Any: method get_parser (line 202) | def get_parser(self, language_name: str) -> Parser: FILE: src/mcp_server_tree_sitter/models/ast.py function node_to_dict (line 18) | def node_to_dict( function summarize_node (line 46) | def summarize_node(node: Any, source_bytes: Optional[bytes] = None) -> D... function find_node_at_position (line 87) | def find_node_at_position(root_node: Any, row: int, column: int) -> Opti... function extract_node_path (line 112) | def extract_node_path( FILE: src/mcp_server_tree_sitter/models/ast_cursor.py function node_to_dict_cursor (line 12) | def node_to_dict_cursor( FILE: src/mcp_server_tree_sitter/models/project.py class Project (line 13) | class Project: method __init__ (line 16) | def __init__(self, name: str, path: Path, description: Optional[str] =... method to_dict (line 24) | def to_dict(self) -> Dict[str, Any]: method scan_files (line 34) | def scan_files(self, language_registry: Any, force: bool = False) -> D... method get_file_path (line 92) | def get_file_path(self, relative_path: str) -> Path: class ProjectRegistry (line 115) | class ProjectRegistry: method __new__ (line 122) | def __new__(cls) -> "ProjectRegistry": method __init__ (line 132) | def __init__(self) -> None: method register_project (line 138) | def register_project(self, name: str, path: str, description: Optional... method get_project (line 172) | def get_project(self, name: str) -> Project: method list_projects (line 191) | def list_projects(self) -> List[Dict[str, Any]]: method remove_project (line 201) | def remove_project(self, name: str) -> None: FILE: src/mcp_server_tree_sitter/prompts/code_patterns.py function get_language_pattern (line 257) | def get_language_pattern(language: str, pattern_name: str) -> str: function get_review_pattern (line 263) | def get_review_pattern(pattern_name: str) -> str: function get_available_patterns (line 268) | def get_available_patterns(language: Optional[str] = None) -> Dict[str, ... FILE: src/mcp_server_tree_sitter/server.py function configure_with_context (line 19) | def configure_with_context( function main (line 103) | def main() -> None: FILE: src/mcp_server_tree_sitter/testing/pytest_diagnostic.py class DiagnosticJSONEncoder (line 18) | class DiagnosticJSONEncoder(JSONEncoder): method default (line 21) | def default(self, obj: Any) -> Any: class DiagnosticData (line 55) | class DiagnosticData: method __init__ (line 58) | def __init__(self, test_id: str): method add_error (line 68) | def add_error(self, error_type: str, message: str, tb: Optional[str] =... method add_detail (line 79) | def add_detail(self, key: str, value: Any) -> None: method add_artifact (line 83) | def add_artifact(self, name: str, content: Any) -> None: method finalize (line 87) | def finalize(self, status: str = "completed") -> None: method to_dict (line 93) | def to_dict(self) -> Dict[str, Any]: function diagnostic (line 108) | def diagnostic(request: Any) -> Generator[DiagnosticData, None, None]: function pytest_configure (line 123) | def pytest_configure(config: Any) -> None: function pytest_runtest_protocol (line 129) | def pytest_runtest_protocol(item: Any, nextitem: Any) -> Optional[bool]: function pytest_runtest_setup (line 135) | def pytest_runtest_setup(item: Any) -> None: function pytest_runtest_teardown (line 141) | def pytest_runtest_teardown(item: Any) -> None: function pytest_terminal_summary (line 147) | def pytest_terminal_summary(terminalreporter: Any, exitstatus: Any, conf... function pytest_sessionfinish (line 164) | def pytest_sessionfinish(session: Any, exitstatus: Any) -> None: function pytest_exception_interact (line 196) | def pytest_exception_interact(node: Any, call: Any, report: Any) -> None: FILE: src/mcp_server_tree_sitter/tools/analysis.py function extract_symbols (line 22) | def extract_symbols( function process_symbol_matches (line 267) | def process_symbol_matches( function analyze_project_structure (line 419) | def analyze_project_structure( function find_dependencies (line 598) | def find_dependencies( function analyze_code_complexity (line 803) | def analyze_code_complexity( FILE: src/mcp_server_tree_sitter/tools/ast_operations.py function get_file_ast (line 17) | def get_file_ast( function parse_file (line 69) | def parse_file(file_path: Any, language: str, language_registry: Any, tr... function find_node_at_position (line 118) | def find_node_at_position(root_node: Any, row: int, column: int) -> Opti... FILE: src/mcp_server_tree_sitter/tools/debug.py function diagnose_yaml_config (line 12) | def diagnose_yaml_config(config_path: str) -> Dict[str, Any]: FILE: src/mcp_server_tree_sitter/tools/file_operations.py function list_project_files (line 13) | def list_project_files( function get_file_content (line 77) | def get_file_content( function get_file_info (line 176) | def get_file_info(project: Any, path: str) -> Dict[str, Any]: function count_lines (line 220) | def count_lines(file_path: Path) -> int: FILE: src/mcp_server_tree_sitter/tools/project.py function register_project (line 9) | def register_project(path: str, name: Optional[str] = None, description:... function get_project (line 46) | def get_project(name: str) -> Dict[str, Any]: function list_projects (line 75) | def list_projects() -> List[Dict[str, Any]]: function remove_project (line 101) | def remove_project(name: str) -> Dict[str, str]: FILE: src/mcp_server_tree_sitter/tools/query_builder.py function get_template (line 8) | def get_template(language: str, pattern: str) -> str: function build_compound_query (line 28) | def build_compound_query(language: str, patterns: List[str], combine: st... function adapt_query (line 59) | def adapt_query(query: str, from_language: str, to_language: str) -> Dic... function adapt_query_for_language (line 80) | def adapt_query_for_language(query: str, from_language: str, to_language... function describe_node_types (line 129) | def describe_node_types(language: str) -> Dict[str, str]: FILE: src/mcp_server_tree_sitter/tools/registration.py function register_tools (line 17) | def register_tools(mcp_server: Any, container: DependencyContainer) -> N... function _register_prompts (line 662) | def _register_prompts(mcp_server: Any, container: DependencyContainer) -... FILE: src/mcp_server_tree_sitter/tools/search.py function search_text (line 12) | def search_text( function query_code (line 139) | def query_code( function _extract_ast_fingerprint (line 352) | def _extract_ast_fingerprint(node: Any, source_bytes: bytes) -> set: function _iter_top_level_blocks (line 377) | def _iter_top_level_blocks(tree: Any) -> list: function find_similar_code (line 401) | def find_similar_code( FILE: src/mcp_server_tree_sitter/utils/context/mcp_context.py class ProgressScope (line 12) | class ProgressScope: method __init__ (line 15) | def __init__(self, context: "MCPContext", total: int, description: str): method update (line 29) | def update(self, step: int = 1) -> None: method set_progress (line 41) | def set_progress(self, current: int) -> None: class MCPContext (line 52) | class MCPContext: method __init__ (line 55) | def __init__(self, ctx: Optional[Any] = None): method report_progress (line 66) | def report_progress(self, current: int, total: int) -> None: method info (line 89) | def info(self, message: str) -> None: method warning (line 103) | def warning(self, message: str) -> None: method error (line 117) | def error(self, message: str) -> None: method progress_scope (line 132) | def progress_scope(self, total: int, description: str) -> Generator[Pr... method with_mcp_context (line 153) | def with_mcp_context(self, ctx: Any) -> "MCPContext": method from_mcp_context (line 166) | def from_mcp_context(ctx: Optional[Any]) -> "MCPContext": method try_get_mcp_context (line 178) | def try_get_mcp_context(self) -> Optional[Any]: FILE: src/mcp_server_tree_sitter/utils/file_io.py function read_text_file (line 11) | def read_text_file(path: Union[str, Path]) -> List[str]: function read_binary_file (line 25) | def read_binary_file(path: Union[str, Path]) -> bytes: function get_file_content_and_lines (line 39) | def get_file_content_and_lines(path: Union[str, Path]) -> Tuple[bytes, L... function is_line_comment (line 54) | def is_line_comment(line: str, comment_prefix: str) -> bool: function count_comment_lines (line 68) | def count_comment_lines(lines: List[str], comment_prefix: str) -> int: function get_comment_prefix (line 82) | def get_comment_prefix(language: str) -> Optional[str]: function parse_file_with_encoding (line 120) | def parse_file_with_encoding(path: Union[str, Path], encoding: str = "ut... function read_file_lines (line 140) | def read_file_lines(path: Union[str, Path], start_line: int = 0, max_lin... FILE: src/mcp_server_tree_sitter/utils/path.py function normalize_path (line 8) | def normalize_path(path: Union[str, Path], ensure_absolute: bool = False... function safe_relative_path (line 27) | def safe_relative_path(path: Union[str, Path], base: Union[str, Path]) -... function get_project_root (line 55) | def get_project_root(path: Union[str, Path]) -> Path: FILE: src/mcp_server_tree_sitter/utils/security.py function validate_file_access (line 11) | def validate_file_access(file_path: Union[str, Path], project_root: Unio... FILE: src/mcp_server_tree_sitter/utils/tree_sitter_helpers.py function create_query (line 28) | def create_query(language: Any, query_string: str) -> Any: function query_captures (line 42) | def query_captures(query: Any, node: Any) -> Any: function create_parser (line 57) | def create_parser(language_obj: Any) -> Parser: function parse_source (line 84) | def parse_source(source: bytes, parser: Union[Parser, Any]) -> Tree: function parse_source_incremental (line 100) | def parse_source_incremental(source: bytes, old_tree: Optional[Tree], pa... function edit_tree (line 117) | def edit_tree( function get_changed_ranges (line 174) | def get_changed_ranges(old_tree: Tree, new_tree: Tree) -> List[Tuple[int... function parse_file (line 204) | def parse_file( function get_node_text (line 239) | def get_node_text(node: Node, source_bytes: bytes, decode: bool = True) ... function walk_tree (line 264) | def walk_tree(node: Node) -> TreeCursor: function cursor_walk_tree (line 279) | def cursor_walk_tree(node: Node, visit_fn: Callable[[Optional[Node], Opt... function collect_with_cursor (line 332) | def collect_with_cursor( function find_nodes_by_type (line 361) | def find_nodes_by_type(root_node: Node, node_type: str) -> List[Node]: function get_node_descendants (line 383) | def get_node_descendants(node: Optional[Node], max_depth: Optional[int] ... function parse_with_cached_tree (line 414) | def parse_with_cached_tree( function update_cached_tree (line 453) | def update_cached_tree( function create_edit (line 524) | def create_edit( function parse_file_with_detection (line 556) | def parse_file_with_detection(file_path: Path, language: Optional[str], ... function parse_file_incremental (line 613) | def parse_file_incremental(file_path: Path, old_tree: Tree, language: st... function get_node_with_text (line 639) | def get_node_with_text(node: Node, source_bytes: bytes, text: bytes) -> ... function is_node_inside (line 663) | def is_node_inside(pos_or_node: Union[Node, Tuple[int, int]], container_... function find_all_descendants (line 698) | def find_all_descendants(node: Node, max_depth: Optional[int] = None) ->... FILE: src/mcp_server_tree_sitter/utils/tree_sitter_types.py class LanguageProtocol (line 12) | class LanguageProtocol(Protocol): method query (line 15) | def query(self, query_string: str) -> Any: ... class ParserProtocol (line 18) | class ParserProtocol(Protocol): method set_language (line 21) | def set_language(self, language: Any) -> None: ... method language (line 22) | def language(self, language: Any) -> None: ... # Alternative name for... method parse (line 23) | def parse(self, bytes_input: bytes) -> Any: ... class TreeProtocol (line 26) | class TreeProtocol(Protocol): method root_node (line 30) | def root_node(self) -> Any: ... class NodeProtocol (line 33) | class NodeProtocol(Protocol): method children (line 37) | def children(self) -> list[Any]: ... method named_children (line 39) | def named_children(self) -> list[Any]: ... method child_count (line 41) | def child_count(self) -> int: ... method named_child_count (line 43) | def named_child_count(self) -> int: ... method start_point (line 45) | def start_point(self) -> tuple[int, int]: ... method end_point (line 47) | def end_point(self) -> tuple[int, int]: ... method start_byte (line 49) | def start_byte(self) -> int: ... method end_byte (line 51) | def end_byte(self) -> int: ... method type (line 53) | def type(self) -> str: ... method is_named (line 55) | def is_named(self) -> bool: ... method parent (line 57) | def parent(self) -> Any: ... method children_by_field_name (line 59) | def children_by_field_name(self) -> dict[str, list[Any]]: ... method walk (line 61) | def walk(self) -> Any: ... class CursorProtocol (line 64) | class CursorProtocol(Protocol): method node (line 68) | def node(self) -> Any: ... method goto_first_child (line 70) | def goto_first_child(self) -> bool: ... method goto_next_sibling (line 71) | def goto_next_sibling(self) -> bool: ... method goto_parent (line 72) | def goto_parent(self) -> bool: ... class DummyLanguage (line 97) | class DummyLanguage: method __init__ (line 100) | def __init__(self, *args: Any, **kwargs: Any) -> None: method query (line 103) | def query(self, query_string: str) -> Any: class DummyParser (line 107) | class DummyParser: method set_language (line 110) | def set_language(self, language: Any) -> None: method language (line 114) | def language(self, language: Any) -> None: method parse (line 118) | def parse(self, bytes_input: bytes) -> Any: class DummyNode (line 122) | class DummyNode: method children (line 126) | def children(self) -> list[Any]: method named_children (line 130) | def named_children(self) -> list[Any]: method child_count (line 134) | def child_count(self) -> int: method named_child_count (line 138) | def named_child_count(self) -> int: method start_point (line 142) | def start_point(self) -> tuple[int, int]: method end_point (line 146) | def end_point(self) -> tuple[int, int]: method start_byte (line 150) | def start_byte(self) -> int: method end_byte (line 154) | def end_byte(self) -> int: method type (line 158) | def type(self) -> str: method is_named (line 162) | def is_named(self) -> bool: method parent (line 166) | def parent(self) -> Any: method children_by_field_name (line 170) | def children_by_field_name(self) -> dict[str, list[Any]]: method walk (line 173) | def walk(self) -> Any: class DummyTreeCursor (line 176) | class DummyTreeCursor: method node (line 180) | def node(self) -> Any: method goto_first_child (line 183) | def goto_first_child(self) -> bool: method goto_next_sibling (line 186) | def goto_next_sibling(self) -> bool: method goto_parent (line 189) | def goto_parent(self) -> bool: class DummyTree (line 192) | class DummyTree: method root_node (line 196) | def root_node(self) -> Any: function ensure_language (line 209) | def ensure_language(obj: Any) -> "Language": function ensure_parser (line 214) | def ensure_parser(obj: Any) -> "Parser": function ensure_tree (line 219) | def ensure_tree(obj: Any) -> "Tree": function ensure_node (line 224) | def ensure_node(obj: Any) -> "Node": function ensure_cursor (line 229) | def ensure_cursor(obj: Any) -> "TreeCursor": FILE: tests/conftest.py function reset_project_registry (line 10) | def reset_project_registry(): FILE: tests/test_ast_cursor.py function test_cursor_based_ast (line 12) | def test_cursor_based_ast() -> None: FILE: tests/test_basic.py function test_config_default (line 10) | def test_config_default() -> None: function test_project_registry (line 22) | def test_project_registry() -> None: function test_language_registry (line 55) | def test_language_registry() -> None: FILE: tests/test_cache_config.py function test_project (line 14) | def test_project(): function test_cache_max_size_setting (line 45) | def test_cache_max_size_setting(test_project): function test_cache_ttl_setting (line 85) | def test_cache_ttl_setting(test_project): function test_cache_eviction_policy (line 118) | def test_cache_eviction_policy(test_project): FILE: tests/test_cli_arguments.py function test_help_flag_does_not_start_server (line 12) | def test_help_flag_does_not_start_server(): function test_version_flag_exits_without_starting_server (line 34) | def test_version_flag_exits_without_starting_server(): function test_direct_script_help_flag (line 53) | def test_direct_script_help_flag(): function test_entry_point_implementation (line 75) | def test_entry_point_implementation(): FILE: tests/test_config_behavior.py function test_project (line 14) | def test_project(): function test_cache_enabled_setting (line 38) | def test_cache_enabled_setting(test_project): function test_security_file_size_limit (line 133) | def test_security_file_size_limit(test_project): function test_excluded_dirs_setting (line 163) | def test_excluded_dirs_setting(test_project): function test_default_max_depth_setting (line 191) | def test_default_max_depth_setting(test_project): FILE: tests/test_config_manager.py function temp_yaml_file (line 13) | def temp_yaml_file(): function test_config_manager_initialization (line 31) | def test_config_manager_initialization(): function test_config_manager_load_from_file (line 45) | def test_config_manager_load_from_file(temp_yaml_file): function test_config_manager_update_values (line 60) | def test_config_manager_update_values(): function test_config_manager_to_dict (line 77) | def test_config_manager_to_dict(): function test_env_overrides_defaults (line 92) | def test_env_overrides_defaults(monkeypatch): function test_env_overrides_yaml (line 107) | def test_env_overrides_yaml(temp_yaml_file, monkeypatch): FILE: tests/test_context.py function mock_dependencies (line 17) | def mock_dependencies(): function server_context (line 46) | def server_context(mock_dependencies): function test_server_context_initialization (line 56) | def test_server_context_initialization(mock_dependencies): function test_server_context_initialization_with_container (line 72) | def test_server_context_initialization_with_container(mock_get_container... function test_get_config (line 99) | def test_get_config(server_context, mock_dependencies): function test_register_project (line 107) | def test_register_project(server_context, mock_dependencies): function test_register_project_with_error (line 127) | def test_register_project_with_error(server_context, mock_dependencies): function test_list_projects (line 140) | def test_list_projects(server_context, mock_dependencies): function test_remove_project (line 154) | def test_remove_project(server_context, mock_dependencies): function test_clear_cache_all (line 167) | def test_clear_cache_all(server_context, mock_dependencies): function test_clear_cache_for_file (line 180) | def test_clear_cache_for_file(server_context, mock_dependencies): function test_configure_with_yaml (line 200) | def test_configure_with_yaml(mock_get_logger, server_context, mock_depen... function test_configure_cache_enabled (line 215) | def test_configure_cache_enabled(server_context, mock_dependencies): function test_configure_max_file_size (line 230) | def test_configure_max_file_size(server_context, mock_dependencies): function test_configure_log_level (line 244) | def test_configure_log_level(mock_get_logger, server_context, mock_depen... function test_global_context_is_instance (line 264) | def test_global_context_is_instance(): FILE: tests/test_debug_flag.py function test_debug_flag_with_preexisting_env (line 13) | def test_debug_flag_with_preexisting_env(): function test_update_log_levels_reconfigures_root_logger (line 72) | def test_update_log_levels_reconfigures_root_logger(): function test_environment_variable_updates_log_level (line 128) | def test_environment_variable_updates_log_level(): function test_configure_root_logger_syncs_handlers (line 180) | def test_configure_root_logger_syncs_handlers(): function test_log_message_levels (line 249) | def test_log_message_levels(): FILE: tests/test_di.py function test_container_singleton (line 6) | def test_container_singleton(): function test_register_custom_dependency (line 13) | def test_register_custom_dependency(): function test_core_dependencies_initialized (line 26) | def test_core_dependencies_initialized(): FILE: tests/test_diagnostics/test_ast.py function test_project (line 17) | def test_project(): function test_ast_failure (line 44) | def test_ast_failure(test_project, diagnostic) -> None: function test_language_detection (line 87) | def test_language_detection(diagnostic) -> None: FILE: tests/test_diagnostics/test_ast_parsing.py function test_project (line 15) | def test_project() -> Generator[Dict[str, Any], None, None]: function parse_file (line 48) | def parse_file(file_path: Path, language: str) -> Tuple[Any, bytes]: function test_get_ast_functionality (line 64) | def test_get_ast_functionality(test_project, diagnostic) -> None: function test_direct_parsing (line 110) | def test_direct_parsing(test_project, diagnostic) -> None: FILE: tests/test_diagnostics/test_cursor_ast.py function parse_file (line 15) | def parse_file(file_path: Path, language: str) -> Tuple[Any, bytes]: function test_project (line 31) | def test_project() -> Generator[Dict[str, Any], None, None]: function test_cursor_ast_implementation (line 58) | def test_cursor_ast_implementation(test_project, diagnostic) -> None: function test_large_ast_handling (line 131) | def test_large_ast_handling(test_project, diagnostic) -> None: FILE: tests/test_diagnostics/test_language_pack.py function test_tree_sitter_import (line 9) | def test_tree_sitter_import(diagnostic) -> None: function test_language_pack_import (line 49) | def test_language_pack_import(diagnostic) -> None: function test_language_binding_available (line 83) | def test_language_binding_available(diagnostic) -> None: function _get_language_binding (line 135) | def _get_language_binding(language_name) -> dict: function test_python_environment (line 162) | def test_python_environment(diagnostic) -> None: FILE: tests/test_diagnostics/test_language_registry.py function test_language_detection (line 9) | def test_language_detection(diagnostic) -> None: function test_language_list_empty (line 48) | def test_language_list_empty(diagnostic) -> None: function test_language_detection_vs_listing (line 86) | def test_language_detection_vs_listing(diagnostic) -> None: FILE: tests/test_diagnostics/test_unpacking_errors.py function test_project (line 14) | def test_project() -> Generator[Dict[str, Any], None, None]: function test_get_symbols_error (line 62) | def test_get_symbols_error(test_project, diagnostic) -> None: function test_get_dependencies_error (line 97) | def test_get_dependencies_error(test_project, diagnostic) -> None: function test_analyze_complexity_error (line 130) | def test_analyze_complexity_error(test_project, diagnostic) -> None: function test_run_query_error (line 164) | def test_run_query_error(test_project, diagnostic) -> None: FILE: tests/test_env_config.py function temp_yaml_file (line 13) | def temp_yaml_file(): function test_env_overrides_defaults (line 31) | def test_env_overrides_defaults(monkeypatch): function test_env_overrides_yaml (line 45) | def test_env_overrides_yaml(temp_yaml_file, monkeypatch): function test_log_level_env_var (line 71) | def test_log_level_env_var(monkeypatch): function test_invalid_env_var_handling (line 81) | def test_invalid_env_var_handling(monkeypatch): FILE: tests/test_failure_modes.py function mock_project (line 31) | def mock_project(request) -> Generator[Dict[str, Any], None, None]: class TestQueryExecution (line 59) | class TestQueryExecution: method test_run_query_with_valid_query (line 62) | def test_run_query_with_valid_query(self, mock_project) -> None: method test_adapt_query_language_specific_syntax (line 88) | def test_adapt_query_language_specific_syntax(self, mock_project) -> N... class TestSymbolExtraction (line 110) | class TestSymbolExtraction: method test_get_symbols_function_detection (line 113) | def test_get_symbols_function_detection(self, mock_project) -> None: class TestDependencyAnalysis (line 146) | class TestDependencyAnalysis: method test_get_dependencies_import_detection (line 149) | def test_get_dependencies_import_detection(self, mock_project) -> None: class TestCodeSearch (line 167) | class TestCodeSearch: method test_find_similar_code_with_exact_match (line 170) | def test_find_similar_code_with_exact_match(self, mock_project) -> None: method test_find_usage_for_function (line 184) | def test_find_usage_for_function(self, mock_project) -> None: function test_error_handling_with_invalid_project (line 229) | def test_error_handling_with_invalid_project(command_name, function, arg... class TestASTHandling (line 242) | class TestASTHandling: method test_ast_node_traversal (line 245) | def test_ast_node_traversal(self, mock_project) -> None: FILE: tests/test_file_operations.py function test_project (line 20) | def test_project() -> Generator[Dict[str, Any], None, None]: function test_list_project_files_basic (line 86) | def test_list_project_files_basic(test_project): function test_list_project_files_with_pattern (line 104) | def test_list_project_files_with_pattern(test_project): function test_list_project_files_with_max_depth (line 122) | def test_list_project_files_with_max_depth(test_project): function test_list_project_files_with_extensions (line 140) | def test_list_project_files_with_extensions(test_project): function test_get_file_content_basic (line 165) | def test_get_file_content_basic(test_project): function test_get_file_content_empty (line 181) | def test_get_file_content_empty(test_project): function test_get_file_content_with_line_limits (line 196) | def test_get_file_content_with_line_limits(test_project): function test_get_file_content_nonexistent_file (line 220) | def test_get_file_content_nonexistent_file(test_project): function test_get_file_content_outside_project (line 233) | def test_get_file_content_outside_project(test_project): function test_get_file_content_as_bytes (line 246) | def test_get_file_content_as_bytes(test_project): function test_get_file_info_basic (line 263) | def test_get_file_info_basic(test_project): function test_get_file_info_directory (line 282) | def test_get_file_info_directory(test_project): function test_get_file_info_nonexistent_file (line 299) | def test_get_file_info_nonexistent_file(test_project): function test_get_file_info_outside_project (line 312) | def test_get_file_info_outside_project(test_project): function test_count_lines (line 326) | def test_count_lines(test_project): function test_count_lines_empty_file (line 338) | def test_count_lines_empty_file(test_project): function test_count_lines_large_file (line 350) | def test_count_lines_large_file(test_project): FILE: tests/test_find_similar_code.py function project (line 18) | def project(): function test_extract_ast_fingerprint (line 67) | def test_extract_ast_fingerprint(): function test_extract_ast_fingerprint_empty (line 86) | def test_extract_ast_fingerprint_empty(): function test_iter_top_level_blocks (line 96) | def test_iter_top_level_blocks(): function test_find_similar_function (line 119) | def test_find_similar_function(project): function test_find_similar_class (line 143) | def test_find_similar_class(project): function test_find_similar_no_match (line 165) | def test_find_similar_no_match(project): function test_find_similar_respects_max_results (line 187) | def test_find_similar_respects_max_results(project): function test_find_similar_requires_language (line 204) | def test_find_similar_requires_language(project): function test_find_similar_result_structure (line 212) | def test_find_similar_result_structure(project): FILE: tests/test_helpers.py function temp_config (line 52) | def temp_config(**kwargs): function register_project_tool (line 129) | def register_project_tool(path: str, name: Optional[str] = None, descrip... function list_projects_tool (line 134) | def list_projects_tool() -> List[Dict[str, Any]]: function remove_project_tool (line 139) | def remove_project_tool(name: str) -> Dict[str, str]: function list_languages (line 145) | def list_languages() -> Dict[str, Any]: function check_language_available (line 155) | def check_language_available(language: str) -> Dict[str, str]: function list_files (line 171) | def list_files( function get_file (line 182) | def get_file(project: str, path: str, max_lines: Optional[int] = None, s... function get_file_metadata (line 188) | def get_file_metadata(project: str, path: str) -> Dict[str, Any]: function get_ast (line 195) | def get_ast(project: str, path: str, max_depth: Optional[int] = None, in... function get_node_at_position (line 214) | def get_node_at_position(project: str, path: str, row: int, column: int)... function find_text (line 239) | def find_text( function run_query (line 263) | def run_query( function get_query_template_tool (line 286) | def get_query_template_tool(language: str, template_name: str) -> Dict[s... function list_query_templates_tool (line 299) | def list_query_templates_tool(language: Optional[str] = None) -> Dict[st... function build_query (line 304) | def build_query(language: str, patterns: List[str], combine: str = "or")... function adapt_query (line 313) | def adapt_query(query: str, from_language: str, to_language: str) -> Dic... function get_node_types (line 324) | def get_node_types(language: str) -> Dict[str, str]: function get_symbols (line 330) | def get_symbols( function analyze_project (line 340) | def analyze_project(project: str, scan_depth: int = 3, ctx: Optional[Any... function get_dependencies (line 348) | def get_dependencies(project: str, file_path: str) -> Dict[str, List[str]]: function analyze_complexity (line 360) | def analyze_complexity(project: str, file_path: str) -> Dict[str, Any]: function find_similar_code (line 372) | def find_similar_code( function find_usage (line 410) | def find_usage( function clear_cache (line 440) | def clear_cache(project: Optional[str] = None, file_path: Optional[str] ... function configure (line 446) | def configure( function configure_with_context (line 487) | def configure_with_context( FILE: tests/test_language_listing.py function test_list_available_languages (line 7) | def test_list_available_languages() -> None: function test_language_api_consistency (line 33) | def test_language_api_consistency() -> None: function test_server_language_tools (line 59) | def test_server_language_tools() -> None: FILE: tests/test_logging_bootstrap.py function test_bootstrap_imported_first (line 9) | def test_bootstrap_imported_first(): function test_logging_config_forwards_to_bootstrap (line 35) | def test_logging_config_forwards_to_bootstrap(): function test_key_modules_use_bootstrap (line 49) | def test_key_modules_use_bootstrap(): function test_log_level_update_consistency (line 86) | def test_log_level_update_consistency(): function test_no_duplicate_log_level_implementations (line 127) | def test_no_duplicate_log_level_implementations(): FILE: tests/test_logging_config.py function capture_logs (line 19) | def capture_logs(logger_name="mcp_server_tree_sitter"): function test_project (line 60) | def test_project(): function test_log_level_setting (line 84) | def test_log_level_setting(test_project): function test_log_level_in_yaml_config (line 143) | def test_log_level_in_yaml_config(): FILE: tests/test_logging_config_di.py function capture_logs (line 16) | def capture_logs(logger_name="mcp_server_tree_sitter"): function test_project (line 51) | def test_project(): function test_log_level_setting_di (line 75) | def test_log_level_setting_di(test_project): function test_log_level_in_yaml_config_di (line 144) | def test_log_level_in_yaml_config_di(): FILE: tests/test_logging_early_init.py function test_early_init_in_package (line 9) | def test_early_init_in_package(): function test_configure_is_not_called_at_import (line 37) | def test_configure_is_not_called_at_import(): function test_environment_vars_processed_early (line 52) | def test_environment_vars_processed_early(): function test_handlers_not_synchronized_at_init (line 87) | def test_handlers_not_synchronized_at_init(): FILE: tests/test_logging_env_vars.py function capture_logs (line 14) | def capture_logs(logger_name="mcp_server_tree_sitter"): function test_get_log_level_from_env (line 53) | def test_get_log_level_from_env(): function test_update_log_levels (line 81) | def test_update_log_levels(): function test_env_var_affects_logging (line 144) | def test_env_var_affects_logging(monkeypatch): FILE: tests/test_logging_handlers.py function temp_logger (line 12) | def temp_logger(name="mcp_server_tree_sitter.test_handlers"): function test_handler_level_synchronization (line 44) | def test_handler_level_synchronization(): function test_get_logger_handler_sync (line 119) | def test_get_logger_handler_sync(): function test_multiple_handlers_with_log_streams (line 200) | def test_multiple_handlers_with_log_streams(): FILE: tests/test_makefile_targets.py function test_makefile_target_syntax (line 9) | def test_makefile_target_syntax(): function test_makefile_target_execution (line 35) | def test_makefile_target_execution(): FILE: tests/test_mcp_context.py function mock_mcp_context (line 11) | def mock_mcp_context(): function test_progress_scope_init (line 21) | def test_progress_scope_init(): function test_progress_scope_update (line 32) | def test_progress_scope_update(): function test_progress_scope_set_progress (line 56) | def test_progress_scope_set_progress(): function test_mcp_context_init (line 80) | def test_mcp_context_init(): function test_mcp_context_report_progress_with_ctx (line 94) | def test_mcp_context_report_progress_with_ctx(mock_mcp_context): function test_mcp_context_report_progress_without_ctx (line 110) | def test_mcp_context_report_progress_without_ctx(mock_logger): function test_mcp_context_report_progress_with_exception (line 126) | def test_mcp_context_report_progress_with_exception(mock_logger, mock_mc... function test_mcp_context_info (line 148) | def test_mcp_context_info(mock_logger, mock_mcp_context): function test_mcp_context_warning (line 163) | def test_mcp_context_warning(mock_logger, mock_mcp_context): function test_mcp_context_error (line 178) | def test_mcp_context_error(mock_logger, mock_mcp_context): function test_mcp_context_info_without_ctx (line 193) | def test_mcp_context_info_without_ctx(mock_logger): function test_mcp_context_progress_scope (line 204) | def test_mcp_context_progress_scope(): function test_mcp_context_progress_scope_with_exception (line 231) | def test_mcp_context_progress_scope_with_exception(): function test_mcp_context_with_mcp_context (line 260) | def test_mcp_context_with_mcp_context(): function test_mcp_context_from_mcp_context (line 278) | def test_mcp_context_from_mcp_context(): function test_mcp_context_try_get_mcp_context (line 294) | def test_mcp_context_try_get_mcp_context(): FILE: tests/test_models_ast.py function test_files (line 19) | def test_files() -> Generator[Dict[str, Path], None, None]: function parsed_trees (line 75) | def parsed_trees(test_files) -> Dict[str, Any]: function test_node_to_dict_basic (line 108) | def test_node_to_dict_basic(parsed_trees): function test_node_to_dict_with_text (line 136) | def test_node_to_dict_with_text(parsed_trees): function test_node_to_dict_without_text (line 155) | def test_node_to_dict_without_text(parsed_trees): function test_node_to_dict_without_children (line 172) | def test_node_to_dict_without_children(parsed_trees): function test_node_to_dict_different_languages (line 185) | def test_node_to_dict_different_languages(parsed_trees): function test_node_to_dict_with_large_depth (line 200) | def test_node_to_dict_with_large_depth(parsed_trees): function test_summarize_node (line 227) | def test_summarize_node(parsed_trees): function test_summarize_node_without_source (line 247) | def test_summarize_node_without_source(parsed_trees): function test_find_node_at_position (line 263) | def test_find_node_at_position(parsed_trees): function test_find_node_at_position_out_of_bounds (line 283) | def test_find_node_at_position_out_of_bounds(parsed_trees): function test_extract_node_path (line 299) | def test_extract_node_path(parsed_trees): function test_extract_node_path_same_node (line 317) | def test_extract_node_path_same_node(parsed_trees): function test_extract_node_path_intermediate_node (line 327) | def test_extract_node_path_intermediate_node(parsed_trees): FILE: tests/test_persistent_server.py function test_persistent_mcp_instance (line 14) | def test_persistent_mcp_instance() -> None: function test_persistent_project_registration (line 21) | def test_persistent_project_registration() -> None: function test_project_registry_singleton (line 48) | def test_project_registry_singleton() -> None: FILE: tests/test_project_persistence.py function test_project_registry_singleton (line 11) | def test_project_registry_singleton() -> None: function test_mcp_tool_persistence (line 42) | def test_mcp_tool_persistence() -> None: function test_project_registry_threads (line 65) | def test_project_registry_threads() -> None: function test_server_lifecycle (line 97) | def test_server_lifecycle() -> None: function test_project_persistence_in_mcp_server (line 136) | def test_project_persistence_in_mcp_server() -> None: FILE: tests/test_query_result_handling.py function test_project (line 17) | def test_project(request) -> Generator[Dict[str, Any], None, None]: function test_query_capture_processing (line 72) | def test_query_capture_processing(test_project) -> None: function test_query_result_capture_types (line 121) | def test_query_result_capture_types(test_project, query_string, expected... function test_direct_query_with_language_pack (line 153) | def test_direct_query_with_language_pack() -> None: function test_query_result_structure_transformation (line 239) | def test_query_result_structure_transformation() -> None: FILE: tests/test_registration.py class MockMCPServer (line 15) | class MockMCPServer: method __init__ (line 18) | def __init__(self): method tool (line 22) | def tool(self): method prompt (line 31) | def prompt(self): function mock_mcp_server (line 42) | def mock_mcp_server(): function mock_container (line 48) | def mock_container(): function test_register_tools_registers_all_tools (line 70) | def test_register_tools_registers_all_tools(mock_mcp_server, mock_contai... function test_register_prompts_registers_all_prompts (line 108) | def test_register_prompts_registers_all_prompts(mock_mcp_server, mock_co... function test_get_symbols_tool_calls_extract_symbols (line 127) | def test_get_symbols_tool_calls_extract_symbols(mock_extract_symbols, mo... function test_run_query_tool_calls_query_code (line 145) | def test_run_query_tool_calls_query_code(mock_query_code, mock_mcp_serve... function test_configure_tool_updates_config (line 167) | def test_configure_tool_updates_config(mock_mcp_server, mock_container): function test_list_files_tool_calls_list_project_files (line 183) | def test_list_files_tool_calls_list_project_files(mock_list_files, mock_... function test_get_ast_tool_calls_get_file_ast (line 200) | def test_get_ast_tool_calls_get_file_ast(mock_get_ast, mock_mcp_server, ... FILE: tests/test_rust_compatibility.py function rust_project (line 20) | def rust_project(request) -> Generator[Dict[str, Any], None, None]: function test_rust_ast_parsing (line 148) | def test_rust_ast_parsing(rust_project) -> None: function test_rust_symbol_extraction (line 217) | def test_rust_symbol_extraction(rust_project) -> None: function test_rust_dependency_analysis (line 253) | def test_rust_dependency_analysis(rust_project) -> None: function test_rust_specific_queries (line 267) | def test_rust_specific_queries(rust_project) -> None: function test_rust_trait_and_macro_handling (line 329) | def test_rust_trait_and_macro_handling(rust_project) -> None: FILE: tests/test_server.py function mock_container (line 16) | def mock_container(): function test_mcp_server_initialized (line 72) | def test_mcp_server_initialized(): function test_configure_with_context_basic (line 78) | def test_configure_with_context_basic(mock_container): function test_configure_with_context_cache_enabled (line 96) | def test_configure_with_context_cache_enabled(mock_container): function test_configure_with_context_max_file_size (line 108) | def test_configure_with_context_max_file_size(mock_container): function test_configure_with_context_log_level (line 117) | def test_configure_with_context_log_level(mock_container): function test_configure_with_context_config_path (line 150) | def test_configure_with_context_config_path(mock_container): function test_configure_with_context_nonexistent_config_path (line 177) | def test_configure_with_context_nonexistent_config_path(mock_container): function test_main (line 189) | def test_main(): FILE: tests/test_server_capabilities.py class MockMCPServer (line 11) | class MockMCPServer: method __init__ (line 14) | def __init__(self): method capability (line 18) | def capability(self, name): function mock_server (line 29) | def mock_server(): function mock_config (line 35) | def mock_config(): function test_register_capabilities (line 45) | def test_register_capabilities(mock_get_container, mock_server, mock_con... function test_handle_logging (line 62) | def test_handle_logging(mock_get_container, mock_logger, mock_server, mo... function test_handle_completion_project_suggestions (line 98) | def test_handle_completion_project_suggestions(mock_get_container, mock_... function test_handle_completion_language_suggestions (line 137) | def test_handle_completion_language_suggestions(mock_get_container, mock... function test_handle_completion_config_suggestions (line 172) | def test_handle_completion_config_suggestions(mock_get_container, mock_s... FILE: tests/test_smoke.py function test_server_help (line 26) | def test_server_help(): function test_server_version (line 39) | def test_server_version(): function test_all_tools_registered (line 52) | def test_all_tools_registered(): function test_mcp_protocol_smoke (line 107) | async def test_mcp_protocol_smoke(): FILE: tests/test_symbol_extraction.py function test_project (line 25) | def test_project(request) -> Generator[Dict[str, Any], None, None]: function test_symbol_extraction_diagnostics (line 154) | def test_symbol_extraction_diagnostics(test_project) -> None: function test_dependency_analysis_diagnostics (line 238) | def test_dependency_analysis_diagnostics(test_project) -> None: function test_symbol_extraction_with_ast_access (line 274) | def test_symbol_extraction_with_ast_access(test_project) -> None: function test_query_based_symbol_extraction (line 381) | def test_query_based_symbol_extraction(test_project) -> None: function test_debug_file_saving (line 582) | def test_debug_file_saving(test_project) -> None: FILE: tests/test_tree_sitter_helpers.py function test_files (line 27) | def test_files() -> Dict[str, Path]: function parsed_files (line 80) | def parsed_files(test_files) -> Dict[str, Dict[str, Any]]: function test_parse_file_with_detection (line 115) | def test_parse_file_with_detection(test_files, tmp_path): function test_parse_file_with_unknown_language (line 138) | def test_parse_file_with_unknown_language(tmp_path): function test_parse_source (line 158) | def test_parse_source(parsed_files): function test_parse_source_incremental (line 181) | def test_parse_source_incremental(parsed_files): function test_edit_tree (line 202) | def test_edit_tree(parsed_files): function test_get_changed_ranges (line 236) | def test_get_changed_ranges(parsed_files): function test_get_node_text (line 258) | def test_get_node_text(parsed_files): function test_get_node_with_text (line 283) | def test_get_node_with_text(parsed_files): function test_walk_tree (line 296) | def test_walk_tree(parsed_files): function test_is_node_inside (line 324) | def test_is_node_inside(parsed_files): function test_find_all_descendants (line 348) | def test_find_all_descendants(parsed_files): function test_get_node_text_with_invalid_byte_range (line 365) | def test_get_node_text_with_invalid_byte_range(parsed_files): function test_parse_file_incremental (line 389) | def test_parse_file_incremental(test_files, tmp_path): function test_parse_file_nonexistent (line 416) | def test_parse_file_nonexistent(): function test_parse_file_without_language (line 427) | def test_parse_file_without_language(test_files): FILE: tests/test_yaml_config.py function temp_yaml_file (line 18) | def temp_yaml_file(): function test_server_config_from_file (line 36) | def test_server_config_from_file(temp_yaml_file): function test_load_config_function_di (line 59) | def test_load_config_function_di(temp_yaml_file): function test_configure_helper (line 90) | def test_configure_helper(temp_yaml_file): function test_real_yaml_example (line 139) | def test_real_yaml_example(): FILE: tests/test_yaml_config_di.py function temp_yaml_file (line 15) | def temp_yaml_file(): function test_server_config_from_file (line 33) | def test_server_config_from_file(temp_yaml_file): function test_load_config_function_di (line 56) | def test_load_config_function_di(temp_yaml_file): function test_configure_helper (line 87) | def test_configure_helper(temp_yaml_file): function test_real_yaml_example_di (line 136) | def test_real_yaml_example_di():