MCP-Drift-State-Tracker/language_profiles.json

150 lines
5.3 KiB
JSON

{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "MCP Drift State Tracker — Language Profiles",
"description": "Data-driven lexical profiles for multi-language code parsing. All regex patterns, stub detectors, and file-extension routing live here. No code changes needed to add new language support — just extend this JSON.",
"globalIgnoreDirs": [
".git", ".venv", "venv", "__pycache__", "node_modules", "target",
"dist", "build", "out", ".cargo", ".rustup", "obj", "bin", ".idea"
],
"stateFileName": ".mcp_drift_state.json",
"cStyleDefault": {
"imp": "^\\s*(?:import|require|#include)\\s+.*",
"fn": "(?:public|private|protected|static|async|fun|func|function)?\\s*([a-zA-Z_0-9]+)\\s*\\([^)]*\\)\\s*(?:\\{|->|:)?",
"cls": "^\\s*(?:export\\s+)?(?:class|interface|struct|enum)\\s+([a-zA-Z_0-9]+)",
"dec": "^\\s*@([a-zA-Z_0-9]+)"
},
"braceProfiles": {
".rs": {
"imp": "^\\s*(?:pub\\s+)?use\\s+([^;]+);",
"fn": "(?:pub\\s+)?(?:async\\s+)?fn\\s+([a-zA-Z_0-9]+)",
"cls": "^\\s*(?:pub\\s+)?(?:struct|enum|trait)\\s+([a-zA-Z_0-9]+)",
"dec": "^\\s*#\\[([^\\]]+)\\]"
},
".go": {
"imp": "^\\s*import\\s+(?:\\([^\\)]+\\)|\"[^\"]+\")",
"fn": "^func\\s+(?:\\([^)]+\\)\\s+)?([a-zA-Z_0-9]+)",
"cls": "^\\s*type\\s+([a-zA-Z_0-9]+)\\s+struct",
"dec": "^\\s*//\\s*@([a-zA-Z_0-9]+)"
},
".php": {
"imp": "^\\s*(?:use|require|include)(?:\\s+once)?\\s+([^;]+);",
"fn": "(?:public|private|protected|static)?\\s*function\\s+([a-zA-Z_0-9]+)",
"cls": "^\\s*(?:abstract\\s+)?class\\s+([a-zA-Z_0-9]+)",
"dec": "^\\s*<<([^>>]+)>>"
},
".hack": {
"imp": "^\\s*(?:use|require|include)(?:\\s+once)?\\s+([^;]+);",
"fn": "(?:public|private|protected|static)?\\s*function\\s+([a-zA-Z_0-9]+)",
"cls": "^\\s*(?:abstract\\s+)?class\\s+([a-zA-Z_0-9]+)",
"dec": "^\\s*<<([^>>]+)>>"
},
".sh": {
"imp": "^\\s*(?:\\.|source)\\s+.*",
"fn": "(?:function\\s+)?([a-zA-Z_0-9\\-]+)\\s*\\(\\s*\\)\\s*\\{?|^\\s*function\\s+([a-zA-Z_0-9\\-]+)",
"cls": "^\\s*class\\s+([a-zA-Z_0-9]+)",
"dec": "^\\s*#\\s*@([a-zA-Z_0-9]+)"
},
".zsh": {
"imp": "^\\s*(?:\\.|source)\\s+.*",
"fn": "(?:function\\s+)?([a-zA-Z_0-9\\-]+)\\s*\\(\\s*\\)\\s*\\{?|^\\s*function\\s+([a-zA-Z_0-9\\-]+)",
"cls": "^\\s*class\\s+([a-zA-Z_0-9]+)",
"dec": "^\\s*#\\s*@([a-zA-Z_0-9]+)"
},
".ps1": {
"imp": "^\\s*(?:\\.|source)\\s+.*",
"fn": "(?:function\\s+)?([a-zA-Z_0-9\\-]+)\\s*\\(\\s*\\)\\s*\\{?|^\\s*function\\s+([a-zA-Z_0-9\\-]+)",
"cls": "^\\s*class\\s+([a-zA-Z_0-9]+)",
"dec": "^\\s*#\\s*@([a-zA-Z_0-9]+)"
}
},
"braceExtensions": [
".js", ".jsx", ".ts", ".tsx", ".c", ".cpp", ".h", ".hpp",
".java", ".cs", ".ec", ".eh", ".pike", ".pmod", ".kt", ".kts",
".swift", ".dart", ".r"
],
"blockEndProfiles": {
".jl": {
"start": "^\\s*(?:function|macro|mutable\\s+struct)\\s+([a-zA-Z_0-9!]+)",
"end": "^\\s*end\\b",
"inc": "\\b(if|for|while|let|do|try|quote)\\b"
},
".lua": {
"start": "^\\s*(?:local\\s+)?function\\s+([a-zA-Z_0-9\\.:]+)",
"end": "^\\s*end\\b",
"inc": "\\b(if|for|while|do)\\b"
},
".ex": {
"start": "^\\s*(?:def|defp|defmacro)\\s+([a-zA-Z_0-9!]+)",
"end": "^\\s*end\\b",
"inc": "\\b(if|case|cond|unless|try)\\b.*\\bdo\\b"
},
".exs": {
"start": "^\\s*(?:def|defp|defmacro)\\s+([a-zA-Z_0-9!]+)",
"end": "^\\s*end\\b",
"inc": "\\b(if|case|cond|unless|try)\\b.*\\bdo\\b"
},
".adb": {
"start": "^\\s*(?:procedure|function)\\s+([a-zA-Z_0-9]+)",
"end": "^\\s*end\\s+[a-zA-Z_0-9]+;",
"inc": "\\b(if|loop|case|begin)\\b"
},
".ads": {
"start": "^\\s*(?:procedure|function)\\s+([a-zA-Z_0-9]+)",
"end": "^\\s*end\\s+[a-zA-Z_0-9]+;",
"inc": "\\b(if|loop|case|begin)\\b"
},
".au3": {
"start": "^\\s*(?:Func)\\s+([a-zA-Z_0-9]+)",
"end": "^\\s*EndFunc\\b",
"inc": "^\\s*(If|While|For|Select|Switch)\\b"
},
".vbs": {
"start": "^\\s*(?:Function|Sub)\\s+([a-zA-Z_0-9]+)",
"end": "^\\s*End\\s+(?:Function|Sub)\\b",
"inc": "^\\s*(If|For|While|Do)\\b",
"flags": "i"
}
},
"sequentialProfiles": {
".bat": {
"start": "^\\s*:([a-zA-Z_0-9\\-]+)",
"end": "^\\s*(?:goto\\s+:eof|exit\\b)",
"stubs": ["rem todo", "rem fixme", "echo placeholder"],
"flags": "i"
},
".cmd": {
"start": "^\\s*:([a-zA-Z_0-9\\-]+)",
"end": "^\\s*(?:goto\\s+:eof|exit\\b)",
"stubs": ["rem todo", "rem fixme", "echo placeholder"],
"flags": "i"
},
".sql": {
"start": "(?:create\\s+(?:or\\s+replace\\s+)?(?:procedure|function|view))\\s+([a-zA-Z_0-9\\.]+)",
"end": "^\\s*end\\s*[a-zA-Z_0-9]*\\s*;",
"stubs": ["-- todo", "-- fixme", "return null", "raise notice"],
"flags": "i"
}
},
"indentationProfiles": {
".mojo": {
"sig": "^\\s*(?:fn|def)\\s+([a-zA-Z_0-9]+)\\s*\\(",
"stubs": ["pass", "raise notimplementederror", "todo"]
},
".hs": {
"sig": "^([a-zA-Z_0-9]+)\\s+::\\s+.*|^\\s*([a-zA-Z_0-9]+)\\s*=",
"stubs": ["undefined", "todo", "error "]
},
".elm": {
"sig": "^([a-zA-Z_0-9]+)\\s+::\\s+.*|^\\s*([a-zA-Z_0-9]+)\\s*=",
"stubs": ["undefined", "todo", "error "]
}
}
}