Skip to main content
Glama
johannhartmann

MCP Code Analysis Server

javascript_plugin.py3.74 kB
"""JavaScript language plugin implementation.""" try: from src.parser import javascript_parser as js_parser JAVASCRIPT_PARSER_AVAILABLE = True except ImportError: js_parser = None # type: ignore[assignment] JAVASCRIPT_PARSER_AVAILABLE = False from src.logger import get_logger from src.parser.base_parser import BaseParser from src.parser.language_config import LanguageConfig, LanguageRegistry from src.parser.language_plugin import LanguagePlugin logger = get_logger(__name__) class JavaScriptLanguagePlugin(LanguagePlugin): """Language plugin for JavaScript support.""" def get_language_config(self) -> LanguageConfig: """Get JavaScript language configuration.""" config = LanguageRegistry.get_language("javascript") if config is None: # Fallback configuration if not found in registry config = LanguageConfig( name="javascript", display_name="JavaScript", extensions=[".js", ".jsx", ".mjs"], parser_available=True, features={ "classes": True, "functions": True, "imports": True, "modules": True, "docstrings": False, # JavaScript uses JSDoc comments "type_hints": False, }, ) return config def create_parser(self) -> BaseParser: """Create JavaScript parser instance.""" if not JAVASCRIPT_PARSER_AVAILABLE or js_parser is None: logger.error( "JavaScript parser not available. Install tree-sitter-javascript to enable JavaScript support." ) msg = "JavaScript parser not available" raise ImportError(msg) return js_parser.JavaScriptCodeParser() def get_complexity_nodes(self) -> set[str]: """Get JavaScript-specific complexity node types. Returns TreeSitter node types that contribute to cyclomatic complexity in JavaScript code, including conditionals, loops, exception handling, and modern JavaScript constructs. """ return { # Conditionals "if_statement", "else_clause", "ternary_expression", "conditional_expression", "switch_statement", "case_clause", # Loops "for_statement", "for_in_statement", "for_of_statement", "while_statement", "do_statement", # Exception handling "catch_clause", "finally_clause", # Boolean operators "binary_expression", # Will filter for && and || "logical_expression", # Functions and async "function_declaration", "function_expression", "arrow_function", "method_definition", "generator_function", "async_function", # Control flow "break_statement", "continue_statement", "return_statement", "throw_statement", # Modern JavaScript constructs "await_expression", "yield_expression", "optional_chaining_expression", # ?. "nullish_coalescing_expression", # ?? "template_literal", # Class and object patterns "class_declaration", "class_expression", "object_pattern", "array_pattern", "assignment_pattern", } def get_analysis_priority(self) -> int: """JavaScript gets medium priority.""" return 140

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/johannhartmann/mcpcodeanalysis'

If you have feedback or need assistance with the MCP directory API, please join our Discord server