feat: Java, Kotlin, and Swift component extraction - #29

Open
bionicles wants to merge 1 commit into
mainfrom
rust-java-kotlin-swift
Open

feat: Java, Kotlin, and Swift component extraction#29
bionicles wants to merge 1 commit into
mainfrom
rust-java-kotlin-swift

Conversation

@bionicles

Copy link
Copy Markdown
Owner

Adds the "mobile gang" languages to the Rust port (item 1 of the post-port roadmap; closes part of #7's language list).

What

  • Java (treesitter/java.rs): tree-sitter formatter. Reproduces the legacy combined-regex semantics: annotations (@Name lines, legacy charset truncation), classes ((public )?(abstract )?class ... extends ... implements ...), interface NAME, methods/constructors gated on a literal ` {\n` after the signature, and the two-word bodyless-prototype rule (public String f(); never matched — preserved).
  • Swift (treesitter/swift.rs): tree-sitter formatter. Column-0 type headers (class/struct/protocol/enum keyword-first, so public class is skipped — legacy rule), modifier-free func/init signatures with optional -> T, raw multi-line parameter formatting preserved.
  • Kotlin (extract/kotlin.rs): procedural line scanner, NOT tree-sitter. tree-sitter-kotlin-ng cannot recover from the deliberately invalid constructs in the acceptance fixture (ages: Array<Int>(42),) — one ERROR node swallows the rest of the file — while the legacy pattern is line-anchored and keeps going. The scanner reproduces type-header capture with brace/blank-line/column-0 stops, last-fun -first matching, the -> Word) tail that keeps function-type parameters intact, enum-entry fusion (PLUS { + following fun), and the strip-comments-then-rstrip ordering.

Acceptance

  • JavaTest.java, KotlinTest.kt, swift_test.swift component sets match the legacy goldens byte-for-byte (now enforced by golden_parity.rs.java/.kt/.swift added to v1 scope).
  • trees_v1 goldens regenerated with the three parsers unstubbed; all 13 tree-render parity tests pass.
  • Deep-nesting robustness test extended to all three (512 KiB thread, no recursion on AST depth).
  • 92 tests, cargo +stable clippy -D warnings clean, fmt clean.

Notes

  • Workspace gains tree-sitter-java 0.23 and tree-sitter-swift 0.7; no Kotlin grammar dependency.
  • Python CI is path-skipped for this change set except the golden generator + goldens (tests/golden/**), which the Python suite does not import.

🤖 Generated with Claude Code

Java and Swift are tree-sitter formatters (treesitter/java.rs,
treesitter/swift.rs) emitting source-text slices validated by the legacy
mini-patterns: Java's annotation/class/method/two-word-prototype rules
with the ' {\n' body gate, Swift's column-0 type headers and
modifier-free func/init signatures.
Kotlin is a procedural line scanner (extract/kotlin.rs): the community
grammar (tree-sitter-kotlin-ng) cannot recover from the deliberately
invalid constructs in the acceptance fixture — one ERROR node swallows
the rest of the file — while the legacy pattern is line-anchored and
keeps going. The scanner reproduces the legacy semantics: type headers
captured to a brace/blank-line/column-0 stop, last-'fun '-first matching
with the ' -> Word)' tail that preserves function-type parameters, enum
entry lines fused onto the following fun, and the strip-comments-then-
rstrip ordering whose interplay decides whether a closing paren survives
a trailing line comment.
All three fixture component sets match the legacy goldens byte-for-byte;
trees_v1 goldens regenerated with the three parsers unstubbed. Deep-
nesting robustness tests extended to the new languages. All visitors use
explicit heap stacks (no AST-depth recursion).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@bionicles
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat: Java, Kotlin, and Swift component extraction - #29

Open
bionicles wants to merge 1 commit into
mainfrom
rust-java-kotlin-swift
Open

feat: Java, Kotlin, and Swift component extraction#29
bionicles wants to merge 1 commit into
mainfrom
rust-java-kotlin-swift

Conversation

@bionicles

Copy link
Copy Markdown
Owner

Adds the "mobile gang" languages to the Rust port (item 1 of the post-port roadmap; closes part of #7's language list).

What

  • Java (treesitter/java.rs): tree-sitter formatter. Reproduces the legacy combined-regex semantics: annotations (@Name lines, legacy charset truncation), classes ((public )?(abstract )?class ... extends ... implements ...), interface NAME, methods/constructors gated on a literal ` {\n` after the signature, and the two-word bodyless-prototype rule (public String f(); never matched — preserved).
  • Swift (treesitter/swift.rs): tree-sitter formatter. Column-0 type headers (class/struct/protocol/enum keyword-first, so public class is skipped — legacy rule), modifier-free func/init signatures with optional -> T, raw multi-line parameter formatting preserved.
  • Kotlin (extract/kotlin.rs): procedural line scanner, NOT tree-sitter. tree-sitter-kotlin-ng cannot recover from the deliberately invalid constructs in the acceptance fixture (ages: Array<Int>(42),) — one ERROR node swallows the rest of the file — while the legacy pattern is line-anchored and keeps going. The scanner reproduces type-header capture with brace/blank-line/column-0 stops, last-fun -first matching, the -> Word) tail that keeps function-type parameters intact, enum-entry fusion (PLUS { + following fun), and the strip-comments-then-rstrip ordering.

Acceptance

  • JavaTest.java, KotlinTest.kt, swift_test.swift component sets match the legacy goldens byte-for-byte (now enforced by golden_parity.rs.java/.kt/.swift added to v1 scope).
  • trees_v1 goldens regenerated with the three parsers unstubbed; all 13 tree-render parity tests pass.
  • Deep-nesting robustness test extended to all three (512 KiB thread, no recursion on AST depth).
  • 92 tests, cargo +stable clippy -D warnings clean, fmt clean.

Notes

  • Workspace gains tree-sitter-java 0.23 and tree-sitter-swift 0.7; no Kotlin grammar dependency.
  • Python CI is path-skipped for this change set except the golden generator + goldens (tests/golden/**), which the Python suite does not import.

🤖 Generated with Claude Code

Java and Swift are tree-sitter formatters (treesitter/java.rs,
treesitter/swift.rs) emitting source-text slices validated by the legacy
mini-patterns: Java's annotation/class/method/two-word-prototype rules
with the ' {\n' body gate, Swift's column-0 type headers and
modifier-free func/init signatures.
Kotlin is a procedural line scanner (extract/kotlin.rs): the community
grammar (tree-sitter-kotlin-ng) cannot recover from the deliberately
invalid constructs in the acceptance fixture — one ERROR node swallows
the rest of the file — while the legacy pattern is line-anchored and
keeps going. The scanner reproduces the legacy semantics: type headers
captured to a brace/blank-line/column-0 stop, last-'fun '-first matching
with the ' -> Word)' tail that preserves function-type parameters, enum
entry lines fused onto the following fun, and the strip-comments-then-
rstrip ordering whose interplay decides whether a closing paren survives
a trailing line comment.
All three fixture component sets match the legacy goldens byte-for-byte;
trees_v1 goldens regenerated with the three parsers unstubbed. Deep-
nesting robustness tests extended to the new languages. All visitors use
explicit heap stacks (no AST-depth recursion).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@bionicles
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: Java, Kotlin, and Swift component extraction - #29

Open
bionicles wants to merge 1 commit into
mainfrom
rust-java-kotlin-swift
Open

feat: Java, Kotlin, and Swift component extraction#29
bionicles wants to merge 1 commit into
mainfrom
rust-java-kotlin-swift

Conversation

@bionicles

Copy link
Copy Markdown
Owner

Adds the "mobile gang" languages to the Rust port (item 1 of the post-port roadmap; closes part of #7's language list).

What

  • Java (treesitter/java.rs): tree-sitter formatter. Reproduces the legacy combined-regex semantics: annotations (@Name lines, legacy charset truncation), classes ((public )?(abstract )?class ... extends ... implements ...), interface NAME, methods/constructors gated on a literal ` {\n` after the signature, and the two-word bodyless-prototype rule (public String f(); never matched — preserved).
  • Swift (treesitter/swift.rs): tree-sitter formatter. Column-0 type headers (class/struct/protocol/enum keyword-first, so public class is skipped — legacy rule), modifier-free func/init signatures with optional -> T, raw multi-line parameter formatting preserved.
  • Kotlin (extract/kotlin.rs): procedural line scanner, NOT tree-sitter. tree-sitter-kotlin-ng cannot recover from the deliberately invalid constructs in the acceptance fixture (ages: Array<Int>(42),) — one ERROR node swallows the rest of the file — while the legacy pattern is line-anchored and keeps going. The scanner reproduces type-header capture with brace/blank-line/column-0 stops, last-fun -first matching, the -> Word) tail that keeps function-type parameters intact, enum-entry fusion (PLUS { + following fun), and the strip-comments-then-rstrip ordering.

Acceptance

  • JavaTest.java, KotlinTest.kt, swift_test.swift component sets match the legacy goldens byte-for-byte (now enforced by golden_parity.rs.java/.kt/.swift added to v1 scope).
  • trees_v1 goldens regenerated with the three parsers unstubbed; all 13 tree-render parity tests pass.
  • Deep-nesting robustness test extended to all three (512 KiB thread, no recursion on AST depth).
  • 92 tests, cargo +stable clippy -D warnings clean, fmt clean.

Notes

  • Workspace gains tree-sitter-java 0.23 and tree-sitter-swift 0.7; no Kotlin grammar dependency.
  • Python CI is path-skipped for this change set except the golden generator + goldens (tests/golden/**), which the Python suite does not import.

🤖 Generated with Claude Code

Java and Swift are tree-sitter formatters (treesitter/java.rs,
treesitter/swift.rs) emitting source-text slices validated by the legacy
mini-patterns: Java's annotation/class/method/two-word-prototype rules
with the ' {\n' body gate, Swift's column-0 type headers and
modifier-free func/init signatures.
Kotlin is a procedural line scanner (extract/kotlin.rs): the community
grammar (tree-sitter-kotlin-ng) cannot recover from the deliberately
invalid constructs in the acceptance fixture — one ERROR node swallows
the rest of the file — while the legacy pattern is line-anchored and
keeps going. The scanner reproduces the legacy semantics: type headers
captured to a brace/blank-line/column-0 stop, last-'fun '-first matching
with the ' -> Word)' tail that preserves function-type parameters, enum
entry lines fused onto the following fun, and the strip-comments-then-
rstrip ordering whose interplay decides whether a closing paren survives
a trailing line comment.
All three fixture component sets match the legacy goldens byte-for-byte;
trees_v1 goldens regenerated with the three parsers unstubbed. Deep-
nesting robustness tests extended to the new languages. All visitors use
explicit heap stacks (no AST-depth recursion).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@bionicles
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: Java, Kotlin, and Swift component extraction - #29

Open
bionicles wants to merge 1 commit into
mainfrom
rust-java-kotlin-swift
Open

feat: Java, Kotlin, and Swift component extraction#29
bionicles wants to merge 1 commit into
mainfrom
rust-java-kotlin-swift

Conversation

@bionicles

Copy link
Copy Markdown
Owner

Adds the "mobile gang" languages to the Rust port (item 1 of the post-port roadmap; closes part of #7's language list).

What

  • Java (treesitter/java.rs): tree-sitter formatter. Reproduces the legacy combined-regex semantics: annotations (@Name lines, legacy charset truncation), classes ((public )?(abstract )?class ... extends ... implements ...), interface NAME, methods/constructors gated on a literal ` {\n` after the signature, and the two-word bodyless-prototype rule (public String f(); never matched — preserved).
  • Swift (treesitter/swift.rs): tree-sitter formatter. Column-0 type headers (class/struct/protocol/enum keyword-first, so public class is skipped — legacy rule), modifier-free func/init signatures with optional -> T, raw multi-line parameter formatting preserved.
  • Kotlin (extract/kotlin.rs): procedural line scanner, NOT tree-sitter. tree-sitter-kotlin-ng cannot recover from the deliberately invalid constructs in the acceptance fixture (ages: Array<Int>(42),) — one ERROR node swallows the rest of the file — while the legacy pattern is line-anchored and keeps going. The scanner reproduces type-header capture with brace/blank-line/column-0 stops, last-fun -first matching, the -> Word) tail that keeps function-type parameters intact, enum-entry fusion (PLUS { + following fun), and the strip-comments-then-rstrip ordering.

Acceptance

  • JavaTest.java, KotlinTest.kt, swift_test.swift component sets match the legacy goldens byte-for-byte (now enforced by golden_parity.rs.java/.kt/.swift added to v1 scope).
  • trees_v1 goldens regenerated with the three parsers unstubbed; all 13 tree-render parity tests pass.
  • Deep-nesting robustness test extended to all three (512 KiB thread, no recursion on AST depth).
  • 92 tests, cargo +stable clippy -D warnings clean, fmt clean.

Notes

  • Workspace gains tree-sitter-java 0.23 and tree-sitter-swift 0.7; no Kotlin grammar dependency.
  • Python CI is path-skipped for this change set except the golden generator + goldens (tests/golden/**), which the Python suite does not import.

🤖 Generated with Claude Code

Java and Swift are tree-sitter formatters (treesitter/java.rs,
treesitter/swift.rs) emitting source-text slices validated by the legacy
mini-patterns: Java's annotation/class/method/two-word-prototype rules
with the ' {\n' body gate, Swift's column-0 type headers and
modifier-free func/init signatures.
Kotlin is a procedural line scanner (extract/kotlin.rs): the community
grammar (tree-sitter-kotlin-ng) cannot recover from the deliberately
invalid constructs in the acceptance fixture — one ERROR node swallows
the rest of the file — while the legacy pattern is line-anchored and
keeps going. The scanner reproduces the legacy semantics: type headers
captured to a brace/blank-line/column-0 stop, last-'fun '-first matching
with the ' -> Word)' tail that preserves function-type parameters, enum
entry lines fused onto the following fun, and the strip-comments-then-
rstrip ordering whose interplay decides whether a closing paren survives
a trailing line comment.
All three fixture component sets match the legacy goldens byte-for-byte;
trees_v1 goldens regenerated with the three parsers unstubbed. Deep-
nesting robustness tests extended to the new languages. All visitors use
explicit heap stacks (no AST-depth recursion).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@bionicles
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat: Java, Kotlin, and Swift component extraction - #29

Open
bionicles wants to merge 1 commit into
mainfrom
rust-java-kotlin-swift
Open

feat: Java, Kotlin, and Swift component extraction#29
bionicles wants to merge 1 commit into
mainfrom
rust-java-kotlin-swift

Conversation

@bionicles

Copy link
Copy Markdown
Owner

Adds the "mobile gang" languages to the Rust port (item 1 of the post-port roadmap; closes part of #7's language list).

What

  • Java (treesitter/java.rs): tree-sitter formatter. Reproduces the legacy combined-regex semantics: annotations (@Name lines, legacy charset truncation), classes ((public )?(abstract )?class ... extends ... implements ...), interface NAME, methods/constructors gated on a literal ` {\n` after the signature, and the two-word bodyless-prototype rule (public String f(); never matched — preserved).
  • Swift (treesitter/swift.rs): tree-sitter formatter. Column-0 type headers (class/struct/protocol/enum keyword-first, so public class is skipped — legacy rule), modifier-free func/init signatures with optional -> T, raw multi-line parameter formatting preserved.
  • Kotlin (extract/kotlin.rs): procedural line scanner, NOT tree-sitter. tree-sitter-kotlin-ng cannot recover from the deliberately invalid constructs in the acceptance fixture (ages: Array<Int>(42),) — one ERROR node swallows the rest of the file — while the legacy pattern is line-anchored and keeps going. The scanner reproduces type-header capture with brace/blank-line/column-0 stops, last-fun -first matching, the -> Word) tail that keeps function-type parameters intact, enum-entry fusion (PLUS { + following fun), and the strip-comments-then-rstrip ordering.

Acceptance

  • JavaTest.java, KotlinTest.kt, swift_test.swift component sets match the legacy goldens byte-for-byte (now enforced by golden_parity.rs.java/.kt/.swift added to v1 scope).
  • trees_v1 goldens regenerated with the three parsers unstubbed; all 13 tree-render parity tests pass.
  • Deep-nesting robustness test extended to all three (512 KiB thread, no recursion on AST depth).
  • 92 tests, cargo +stable clippy -D warnings clean, fmt clean.

Notes

  • Workspace gains tree-sitter-java 0.23 and tree-sitter-swift 0.7; no Kotlin grammar dependency.
  • Python CI is path-skipped for this change set except the golden generator + goldens (tests/golden/**), which the Python suite does not import.

🤖 Generated with Claude Code

Java and Swift are tree-sitter formatters (treesitter/java.rs,
treesitter/swift.rs) emitting source-text slices validated by the legacy
mini-patterns: Java's annotation/class/method/two-word-prototype rules
with the ' {\n' body gate, Swift's column-0 type headers and
modifier-free func/init signatures.
Kotlin is a procedural line scanner (extract/kotlin.rs): the community
grammar (tree-sitter-kotlin-ng) cannot recover from the deliberately
invalid constructs in the acceptance fixture — one ERROR node swallows
the rest of the file — while the legacy pattern is line-anchored and
keeps going. The scanner reproduces the legacy semantics: type headers
captured to a brace/blank-line/column-0 stop, last-'fun '-first matching
with the ' -> Word)' tail that preserves function-type parameters, enum
entry lines fused onto the following fun, and the strip-comments-then-
rstrip ordering whose interplay decides whether a closing paren survives
a trailing line comment.
All three fixture component sets match the legacy goldens byte-for-byte;
trees_v1 goldens regenerated with the three parsers unstubbed. Deep-
nesting robustness tests extended to the new languages. All visitors use
explicit heap stacks (no AST-depth recursion).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@bionicles
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: Java, Kotlin, and Swift component extraction - #29

Open
bionicles wants to merge 1 commit into
mainfrom
rust-java-kotlin-swift
Open

feat: Java, Kotlin, and Swift component extraction#29
bionicles wants to merge 1 commit into
mainfrom
rust-java-kotlin-swift

Conversation

@bionicles

Copy link
Copy Markdown
Owner

Adds the "mobile gang" languages to the Rust port (item 1 of the post-port roadmap; closes part of #7's language list).

What

  • Java (treesitter/java.rs): tree-sitter formatter. Reproduces the legacy combined-regex semantics: annotations (@Name lines, legacy charset truncation), classes ((public )?(abstract )?class ... extends ... implements ...), interface NAME, methods/constructors gated on a literal ` {\n` after the signature, and the two-word bodyless-prototype rule (public String f(); never matched — preserved).
  • Swift (treesitter/swift.rs): tree-sitter formatter. Column-0 type headers (class/struct/protocol/enum keyword-first, so public class is skipped — legacy rule), modifier-free func/init signatures with optional -> T, raw multi-line parameter formatting preserved.
  • Kotlin (extract/kotlin.rs): procedural line scanner, NOT tree-sitter. tree-sitter-kotlin-ng cannot recover from the deliberately invalid constructs in the acceptance fixture (ages: Array<Int>(42),) — one ERROR node swallows the rest of the file — while the legacy pattern is line-anchored and keeps going. The scanner reproduces type-header capture with brace/blank-line/column-0 stops, last-fun -first matching, the -> Word) tail that keeps function-type parameters intact, enum-entry fusion (PLUS { + following fun), and the strip-comments-then-rstrip ordering.

Acceptance

  • JavaTest.java, KotlinTest.kt, swift_test.swift component sets match the legacy goldens byte-for-byte (now enforced by golden_parity.rs.java/.kt/.swift added to v1 scope).
  • trees_v1 goldens regenerated with the three parsers unstubbed; all 13 tree-render parity tests pass.
  • Deep-nesting robustness test extended to all three (512 KiB thread, no recursion on AST depth).
  • 92 tests, cargo +stable clippy -D warnings clean, fmt clean.

Notes

  • Workspace gains tree-sitter-java 0.23 and tree-sitter-swift 0.7; no Kotlin grammar dependency.
  • Python CI is path-skipped for this change set except the golden generator + goldens (tests/golden/**), which the Python suite does not import.

🤖 Generated with Claude Code

Java and Swift are tree-sitter formatters (treesitter/java.rs,
treesitter/swift.rs) emitting source-text slices validated by the legacy
mini-patterns: Java's annotation/class/method/two-word-prototype rules
with the ' {\n' body gate, Swift's column-0 type headers and
modifier-free func/init signatures.
Kotlin is a procedural line scanner (extract/kotlin.rs): the community
grammar (tree-sitter-kotlin-ng) cannot recover from the deliberately
invalid constructs in the acceptance fixture — one ERROR node swallows
the rest of the file — while the legacy pattern is line-anchored and
keeps going. The scanner reproduces the legacy semantics: type headers
captured to a brace/blank-line/column-0 stop, last-'fun '-first matching
with the ' -> Word)' tail that preserves function-type parameters, enum
entry lines fused onto the following fun, and the strip-comments-then-
rstrip ordering whose interplay decides whether a closing paren survives
a trailing line comment.
All three fixture component sets match the legacy goldens byte-for-byte;
trees_v1 goldens regenerated with the three parsers unstubbed. Deep-
nesting robustness tests extended to the new languages. All visitors use
explicit heap stacks (no AST-depth recursion).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@bionicles
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: Java, Kotlin, and Swift component extraction - #29

Open
bionicles wants to merge 1 commit into
mainfrom
rust-java-kotlin-swift
Open

feat: Java, Kotlin, and Swift component extraction#29
bionicles wants to merge 1 commit into
mainfrom
rust-java-kotlin-swift

Conversation

@bionicles

Copy link
Copy Markdown
Owner

Adds the "mobile gang" languages to the Rust port (item 1 of the post-port roadmap; closes part of #7's language list).

What

  • Java (treesitter/java.rs): tree-sitter formatter. Reproduces the legacy combined-regex semantics: annotations (@Name lines, legacy charset truncation), classes ((public )?(abstract )?class ... extends ... implements ...), interface NAME, methods/constructors gated on a literal ` {\n` after the signature, and the two-word bodyless-prototype rule (public String f(); never matched — preserved).
  • Swift (treesitter/swift.rs): tree-sitter formatter. Column-0 type headers (class/struct/protocol/enum keyword-first, so public class is skipped — legacy rule), modifier-free func/init signatures with optional -> T, raw multi-line parameter formatting preserved.
  • Kotlin (extract/kotlin.rs): procedural line scanner, NOT tree-sitter. tree-sitter-kotlin-ng cannot recover from the deliberately invalid constructs in the acceptance fixture (ages: Array<Int>(42),) — one ERROR node swallows the rest of the file — while the legacy pattern is line-anchored and keeps going. The scanner reproduces type-header capture with brace/blank-line/column-0 stops, last-fun -first matching, the -> Word) tail that keeps function-type parameters intact, enum-entry fusion (PLUS { + following fun), and the strip-comments-then-rstrip ordering.

Acceptance

  • JavaTest.java, KotlinTest.kt, swift_test.swift component sets match the legacy goldens byte-for-byte (now enforced by golden_parity.rs.java/.kt/.swift added to v1 scope).
  • trees_v1 goldens regenerated with the three parsers unstubbed; all 13 tree-render parity tests pass.
  • Deep-nesting robustness test extended to all three (512 KiB thread, no recursion on AST depth).
  • 92 tests, cargo +stable clippy -D warnings clean, fmt clean.

Notes

  • Workspace gains tree-sitter-java 0.23 and tree-sitter-swift 0.7; no Kotlin grammar dependency.
  • Python CI is path-skipped for this change set except the golden generator + goldens (tests/golden/**), which the Python suite does not import.

🤖 Generated with Claude Code

Java and Swift are tree-sitter formatters (treesitter/java.rs,
treesitter/swift.rs) emitting source-text slices validated by the legacy
mini-patterns: Java's annotation/class/method/two-word-prototype rules
with the ' {\n' body gate, Swift's column-0 type headers and
modifier-free func/init signatures.
Kotlin is a procedural line scanner (extract/kotlin.rs): the community
grammar (tree-sitter-kotlin-ng) cannot recover from the deliberately
invalid constructs in the acceptance fixture — one ERROR node swallows
the rest of the file — while the legacy pattern is line-anchored and
keeps going. The scanner reproduces the legacy semantics: type headers
captured to a brace/blank-line/column-0 stop, last-'fun '-first matching
with the ' -> Word)' tail that preserves function-type parameters, enum
entry lines fused onto the following fun, and the strip-comments-then-
rstrip ordering whose interplay decides whether a closing paren survives
a trailing line comment.
All three fixture component sets match the legacy goldens byte-for-byte;
trees_v1 goldens regenerated with the three parsers unstubbed. Deep-
nesting robustness tests extended to the new languages. All visitors use
explicit heap stacks (no AST-depth recursion).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@bionicles
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat: Java, Kotlin, and Swift component extraction - #29

Open
bionicles wants to merge 1 commit into
mainfrom
rust-java-kotlin-swift
Open

feat: Java, Kotlin, and Swift component extraction#29
bionicles wants to merge 1 commit into
mainfrom
rust-java-kotlin-swift

Conversation

@bionicles

Copy link
Copy Markdown
Owner

Adds the "mobile gang" languages to the Rust port (item 1 of the post-port roadmap; closes part of #7's language list).

What

  • Java (treesitter/java.rs): tree-sitter formatter. Reproduces the legacy combined-regex semantics: annotations (@Name lines, legacy charset truncation), classes ((public )?(abstract )?class ... extends ... implements ...), interface NAME, methods/constructors gated on a literal ` {\n` after the signature, and the two-word bodyless-prototype rule (public String f(); never matched — preserved).
  • Swift (treesitter/swift.rs): tree-sitter formatter. Column-0 type headers (class/struct/protocol/enum keyword-first, so public class is skipped — legacy rule), modifier-free func/init signatures with optional -> T, raw multi-line parameter formatting preserved.
  • Kotlin (extract/kotlin.rs): procedural line scanner, NOT tree-sitter. tree-sitter-kotlin-ng cannot recover from the deliberately invalid constructs in the acceptance fixture (ages: Array<Int>(42),) — one ERROR node swallows the rest of the file — while the legacy pattern is line-anchored and keeps going. The scanner reproduces type-header capture with brace/blank-line/column-0 stops, last-fun -first matching, the -> Word) tail that keeps function-type parameters intact, enum-entry fusion (PLUS { + following fun), and the strip-comments-then-rstrip ordering.

Acceptance

  • JavaTest.java, KotlinTest.kt, swift_test.swift component sets match the legacy goldens byte-for-byte (now enforced by golden_parity.rs.java/.kt/.swift added to v1 scope).
  • trees_v1 goldens regenerated with the three parsers unstubbed; all 13 tree-render parity tests pass.
  • Deep-nesting robustness test extended to all three (512 KiB thread, no recursion on AST depth).
  • 92 tests, cargo +stable clippy -D warnings clean, fmt clean.

Notes

  • Workspace gains tree-sitter-java 0.23 and tree-sitter-swift 0.7; no Kotlin grammar dependency.
  • Python CI is path-skipped for this change set except the golden generator + goldens (tests/golden/**), which the Python suite does not import.

🤖 Generated with Claude Code

Java and Swift are tree-sitter formatters (treesitter/java.rs,
treesitter/swift.rs) emitting source-text slices validated by the legacy
mini-patterns: Java's annotation/class/method/two-word-prototype rules
with the ' {\n' body gate, Swift's column-0 type headers and
modifier-free func/init signatures.
Kotlin is a procedural line scanner (extract/kotlin.rs): the community
grammar (tree-sitter-kotlin-ng) cannot recover from the deliberately
invalid constructs in the acceptance fixture — one ERROR node swallows
the rest of the file — while the legacy pattern is line-anchored and
keeps going. The scanner reproduces the legacy semantics: type headers
captured to a brace/blank-line/column-0 stop, last-'fun '-first matching
with the ' -> Word)' tail that preserves function-type parameters, enum
entry lines fused onto the following fun, and the strip-comments-then-
rstrip ordering whose interplay decides whether a closing paren survives
a trailing line comment.
All three fixture component sets match the legacy goldens byte-for-byte;
trees_v1 goldens regenerated with the three parsers unstubbed. Deep-
nesting robustness tests extended to the new languages. All visitors use
explicit heap stacks (no AST-depth recursion).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@bionicles