Skip to content

Commit 42a299f

Browse files
committed
📝 README.md cleanup
1 parent 9e8dc06 commit 42a299f

File tree

1 file changed

+52
-57
lines changed

1 file changed

+52
-57
lines changed

README.md

Lines changed: 52 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -208,24 +208,24 @@ The `*-merge` gem family is built on a two-layer architecture:
208208

209209
[tree\_haver][tree_haver] provides cross-Ruby parsing capabilities:
210210

211-
- **Universal Backend Support**: Automatically selects the best parsing backend for your Ruby implementation (MRI, JRuby, TruffleRuby)
212-
- **10 Backend Options**: MRI C extensions, Rust bindings, FFI, Java (JRuby), language-specific parsers (Prism, Psych, Commonmarker, Markly), and pure Ruby fallback (Citrus)
213-
- **Unified API**: Write parsing code once, run on any Ruby implementation
214-
- **Grammar Discovery**: Built-in `GrammarFinder` for platform-aware grammar library discovery
215-
- **Thread-Safe**: Language registry with thread-safe caching
211+
- **Universal Backend Support**: Automatically selects the best parsing backend for your Ruby implementation (MRI, JRuby, TruffleRuby)
212+
- **10 Backend Options**: MRI C extensions, Rust bindings, FFI, Java (JRuby), language-specific parsers (Prism, Psych, Commonmarker, Markly), and pure Ruby fallback (Citrus)
213+
- **Unified API**: Write parsing code once, run on any Ruby implementation
214+
- **Grammar Discovery**: Built-in `GrammarFinder` for platform-aware grammar library discovery
215+
- **Thread-Safe**: Language registry with thread-safe caching
216216

217217
#### Layer 2: ast-merge (Merge Infrastructure)
218218

219219
Ast::Merge builds on tree\_haver to provide:
220220

221-
- **Base Classes**: `FreezeNode`, `MergeResult` base classes with unified constructors
222-
- **Shared Modules**: `FileAnalysisBase`, `FileAnalyzable`, `MergerConfig`, `DebugLogger`
223-
- **Freeze Block Support**: Configurable marker patterns for multiple comment syntaxes (preserve sections during merge)
224-
- **Node Typing System**: `NodeTyping` for canonical node type identification across different parsers
225-
- **Conflict Resolution**: `ConflictResolverBase` with pluggable strategies
226-
- **Error Classes**: `ParseError`, `TemplateParseError`, `DestinationParseError`
227-
- **Region Detection**: `RegionDetectorBase`, `FencedCodeBlockDetector` for text-based analysis
228-
- **RSpec Shared Examples**: Test helpers for implementing new merge gems
221+
- **Base Classes**: `FreezeNode`, `MergeResult` base classes with unified constructors
222+
- **Shared Modules**: `FileAnalysisBase`, `FileAnalyzable`, `MergerConfig`, `DebugLogger`
223+
- **Freeze Block Support**: Configurable marker patterns for multiple comment syntaxes (preserve sections during merge)
224+
- **Node Typing System**: `NodeTyping` for canonical node type identification across different parsers
225+
- **Conflict Resolution**: `ConflictResolverBase` with pluggable strategies
226+
- **Error Classes**: `ParseError`, `TemplateParseError`, `DestinationParseError`
227+
- **Region Detection**: `RegionDetectorBase`, `FencedCodeBlockDetector` for text-based analysis
228+
- **RSpec Shared Examples**: Test helpers for implementing new merge gems
229229

230230
### Creating a New Merge Gem
231231

@@ -372,10 +372,10 @@ merger = MyFormat::SmartMerger.new(
372372

373373
This is particularly useful for:
374374

375-
- Paragraphs with minor edits (typos, rewording)
376-
- Headings with slight changes
377-
- Comments with updated text
378-
- Any text-based node that may have been slightly modified
375+
- Paragraphs with minor edits (typos, rewording)
376+
- Headings with slight changes
377+
- Comments with updated text
378+
- Any text-based node that may have been slightly modified
379379

380380
### Namespace Reference
381381

@@ -391,11 +391,11 @@ The `Ast::Merge` module is organized into several namespaces, each with detailed
391391

392392
**Key Classes by Namespace:**
393393

394-
- **Detector**: `Region`, `Base`, `Mergeable`, `FencedCodeBlock`, `YamlFrontmatter`, `TomlFrontmatter`
395-
- **Recipe**: `Config`, `Runner`, `ScriptLoader`
396-
- **Comment**: `Line`, `Block`, `Empty`, `Parser`, `Style`
397-
- **Text**: `SmartMerger`, `FileAnalysis`, `LineNode`, `WordNode`, `Section`
398-
- **RSpec**: Shared examples and dependency tags for testing `*-merge` implementations
394+
- **Detector**: `Region`, `Base`, `Mergeable`, `FencedCodeBlock`, `YamlFrontmatter`, `TomlFrontmatter`
395+
- **Recipe**: `Config`, `Runner`, `ScriptLoader`
396+
- **Comment**: `Line`, `Block`, `Empty`, `Parser`, `Style`
397+
- **Text**: `SmartMerger`, `FileAnalysis`, `LineNode`, `WordNode`, `Section`
398+
- **RSpec**: Shared examples and dependency tags for testing `*-merge` implementations
399399

400400
## 💡 Info you can shake a stick at
401401

@@ -447,18 +447,13 @@ The maintainers of this and thousands of other packages are working with Tidelif
447447

448448
[![Get help from me on Tidelift][🏙️entsup-tidelift-img]][🏙️entsup-tidelift]
449449

450-
- 💡Subscribe for support guarantees covering *all* your FLOSS dependencies
451-
452-
- 💡Tidelift is part of [Sonar][🏙️entsup-tidelift-sonar]
453-
454-
- 💡Tidelift pays maintainers to maintain the software you depend on\!<br/>📊`@`Pointy Haired Boss: An [enterprise support][🏙️entsup-tidelift] subscription is "[never gonna let you down][🧮kloc]", and *supports* open source maintainers
455-
Alternatively:
456-
457-
- [![Live Chat on Discord][✉️discord-invite-img-ftb]][🖼️galtzo-discord]
458-
459-
- [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork]
460-
461-
- [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor]
450+
- 💡Subscribe for support guarantees covering *all* your FLOSS dependencies
451+
- 💡Tidelift is part of [Sonar][🏙️entsup-tidelift-sonar]
452+
- 💡Tidelift pays maintainers to maintain the software you depend on\!<br/>📊`@`Pointy Haired Boss: An [enterprise support][🏙️entsup-tidelift] subscription is "[never gonna let you down][🧮kloc]", and *supports* open source maintainers
453+
Alternatively:
454+
- [![Live Chat on Discord][✉️discord-invite-img-ftb]][🖼️galtzo-discord]
455+
- [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork]
456+
- [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor]
462457

463458
</details>
464459

@@ -537,17 +532,17 @@ merger = SomeFormat::Merge::SmartMerger.new(
537532

538533
Control which source wins when both files have the same structural element:
539534

540-
- **`:template`** - Template values replace destination values
541-
- **`:destination`** (default) - Destination values are preserved
542-
- **Hash** - Per-node-type preference (see Advanced Configuration)
535+
- **`:template`** - Template values replace destination values
536+
- **`:destination`** (default) - Destination values are preserved
537+
- **Hash** - Per-node-type preference (see Advanced Configuration)
543538

544539
### Template-Only Nodes
545540

546541
Control whether to add nodes that only exist in the template:
547542

548-
- **`true`** - Add all template-only nodes
549-
- **`false`** (default) - Skip template-only nodes
550-
- **Callable** - Filter which template-only nodes to add
543+
- **`true`** - Add all template-only nodes
544+
- **`false`** (default) - Skip template-only nodes
545+
- **Callable** - Filter which template-only nodes to add
551546

552547
#### Callable Filter
553548

@@ -577,10 +572,10 @@ merger = Markly::Merge::SmartMerger.new(
577572

578573
The `entry` hash contains:
579574

580-
- `:template_node` - The node being considered for addition
581-
- `:signature` - The node's signature (Array or other value)
582-
- `:template_index` - Index in the template statements
583-
- `:dest_index` - Always `nil` for template-only nodes
575+
- `:template_node` - The node being considered for addition
576+
- `:signature` - The node's signature (Array or other value)
577+
- `:template_index` - Index in the template statements
578+
- `:dest_index` - Always `nil` for template-only nodes
584579

585580
## 🔧 Basic Usage
586581

@@ -606,11 +601,11 @@ end
606601

607602
### Available Shared Examples
608603

609-
- `"Ast::Merge::FreezeNode"` - Tests for FreezeNode implementations
610-
- `"Ast::Merge::MergeResult"` - Tests for MergeResult implementations
611-
- `"Ast::Merge::DebugLogger"` - Tests for DebugLogger implementations
612-
- `"Ast::Merge::FileAnalysisBase"` - Tests for FileAnalysis implementations
613-
- `"Ast::Merge::MergerConfig"` - Tests for SmartMerger implementations
604+
- `"Ast::Merge::FreezeNode"` - Tests for FreezeNode implementations
605+
- `"Ast::Merge::MergeResult"` - Tests for MergeResult implementations
606+
- `"Ast::Merge::DebugLogger"` - Tests for DebugLogger implementations
607+
- `"Ast::Merge::FileAnalysisBase"` - Tests for FileAnalysis implementations
608+
- `"Ast::Merge::MergerConfig"` - Tests for SmartMerger implementations
614609

615610
## 🎛️ Advanced Configuration
616611

@@ -622,9 +617,9 @@ This is useful for hand-edited customizations you never want overwritten.
622617

623618
A freeze block consists of:
624619

625-
- A **start marker** comment (e.g., `# mytoken:freeze`)
626-
- The protected content
627-
- An **end marker** comment (e.g., `# mytoken:unfreeze`)
620+
- A **start marker** comment (e.g., `# mytoken:freeze`)
621+
- The protected content
622+
- An **end marker** comment (e.g., `# mytoken:unfreeze`)
628623

629624
```ruby
630625
# In a Ruby file with prism-merge:
@@ -669,13 +664,13 @@ preferences for different types of nodes (e.g., prefer template for linter confi
669664

670665
1. **Define a `node_typing`**: A Hash mapping node type symbols to callables that receive a node and return either:
671666

672-
- The original node (no special handling)
673-
- A wrapped node with a `merge_type` attribute (via `Ast::Merge::NodeTyping::Wrapper`)
667+
- The original node (no special handling)
668+
- A wrapped node with a `merge_type` attribute (via `Ast::Merge::NodeTyping::Wrapper`)
674669

675670
2. **Use a Hash-based preference**: Instead of a simple `:destination` or `:template` Symbol, pass a Hash with:
676671

677-
- `:default` key for the fallback preference
678-
- Custom keys matching the `merge_type` values from your `node_typing`
672+
- `:default` key for the fallback preference
673+
- Custom keys matching the `merge_type` values from your `node_typing`
679674

680675
```ruby
681676
# Example: Prefer template for lint gem configs, destination for everything else
@@ -903,7 +898,7 @@ is a *breaking change* to an API, and for that reason the bike shedding is endle
903898
To get a better understanding of how SemVer is intended to work over a project's lifetime,
904899
read this article from the creator of SemVer:
905900

906-
- ["Major Version Numbers are Not Sacred"][📌major-versions-not-sacred]
901+
- ["Major Version Numbers are Not Sacred"][📌major-versions-not-sacred]
907902

908903
</details>
909904

0 commit comments

Comments
 (0)