Skip to content

Commit 46b63e2

Browse files
CosmoHacclaude
andcommitted
feat: v11.1.2 — Scala Tier 1 extractor + MCP registry setup
- Scala promoted to Tier 1 with dedicated ScalaExtractor: classes, traits, objects, case classes, sealed hierarchies, val/var, type aliases, imports, inheritance (extends/with), and Scaladoc extraction - server.json for official MCP Registry submission - 36 new Scala extraction tests - Version bump to 11.1.2 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent d0075c8 commit 46b63e2

8 files changed

Lines changed: 979 additions & 4 deletions

File tree

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
77

88
## [Unreleased]
99

10+
## [11.1.2] - 2026-02-27
11+
12+
### Added
13+
- **Scala promoted to Tier 1** with dedicated `ScalaExtractor` — full support for classes, traits, objects, case classes, sealed hierarchies, val/var properties, type aliases, imports, and inheritance
14+
- `server.json` for official MCP Registry submission (`registry.modelcontextprotocol.io`)
15+
- MCP registry submission guide prepared for 9 directories
16+
1017
### Fixed
1118
- CI: lazy `import yaml` in `extractor_schema.py` (PyYAML is optional)
1219
- CI: `TYPE_CHECKING` guard for networkx import in `cmd_visualize.py`
1320
- CI: skip language corpus tests when yaml/QueryCursor unavailable
21+
- Registry docstring no longer mentions Scala as Tier 2
1422

1523
## [11.1.1] - 2026-02-27
1624

CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ Add the following to your project's `.pre-commit-config.yaml`:
8282
```yaml
8383
repos:
8484
- repo: https://github.com/Cranot/roam-code
85-
rev: v11.1.1 # pin to a release tag
85+
rev: v11.1.2 # pin to a release tag
8686
hooks:
8787
- id: roam-secrets # secret scanning -- no index required
8888
- id: roam-syntax-check # tree-sitter syntax validation -- no index required

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "roam-code"
7-
version = "11.1.1"
7+
version = "11.1.2"
88
description = "Instant codebase comprehension for AI coding agents"
99
readme = "README.md"
1010
requires-python = ">=3.9"

server.json

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
{
2+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3+
"name": "io.github.cranot/roam-code",
4+
"description": "Instant codebase comprehension for AI coding agents. Pre-indexes symbols, call graphs, dependencies, architecture layers, and git history into a local SQLite DB. 101 MCP tools, 10 resources, 5 prompts. 26 languages. 100% local, zero API keys.",
5+
"version": "11.1.2",
6+
"packages": [
7+
{
8+
"registry_name": "pypi",
9+
"name": "roam-code",
10+
"version": "11.1.2",
11+
"runtime": "python",
12+
"runtime_arguments": [],
13+
"environment_variables": [
14+
{
15+
"name": "ROAM_MCP_PRESET",
16+
"description": "Tool preset: core (23 tools, default), full (101 tools), review, refactor, debug, architecture",
17+
"required": false,
18+
"default": "core"
19+
}
20+
]
21+
}
22+
],
23+
"tools": {
24+
"count": 101
25+
},
26+
"resources": {
27+
"count": 10
28+
},
29+
"prompts": {
30+
"count": 5
31+
},
32+
"remotes": [],
33+
"repository": {
34+
"url": "https://github.com/Cranot/roam-code",
35+
"source": "github"
36+
},
37+
"websiteUrl": "https://cranot.github.io/roam-code/",
38+
"license": "MIT"
39+
}

src/roam/languages/generic_lang.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ class GenericExtractor(LanguageExtractor):
153153
154154
Looks for common node types and extracts symbols by finding the
155155
first identifier child as the name. Does not do import resolution.
156-
Used for Ruby, PHP, C#, Kotlin, Swift, Scala, etc.
156+
Used for tier-2 languages without dedicated extractors.
157157
"""
158158

159159
def __init__(self, language: str = "unknown"):

src/roam/languages/registry.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
"ruby",
3434
"kotlin",
3535
"swift",
36+
"scala",
3637
}
3738
)
3839

@@ -203,6 +204,10 @@ def _create_extractor(language: str) -> "LanguageExtractor":
203204
from .swift_lang import SwiftExtractor
204205

205206
return SwiftExtractor()
207+
elif language == "scala":
208+
from .scala_lang import ScalaExtractor
209+
210+
return ScalaExtractor()
206211
# Salesforce extractors
207212
elif language == "apex":
208213
from .apex_lang import ApexExtractor
@@ -250,7 +255,7 @@ def get_extractor(language: str) -> "LanguageExtractor":
250255
"""Get an extractor instance for a language.
251256
252257
Returns a dedicated extractor for tier-1 languages, or a GenericExtractor
253-
for tier-2 languages (e.g. Scala).
258+
for tier-2 languages.
254259
255260
Args:
256261
language: Language name string.

0 commit comments

Comments
 (0)