Skip to content

feat: implement MD011 no-reversed-links rule with perfect parity#69

Merged
ekropotin merged 1 commit into
developmentfrom
dev
Aug 13, 2025
Merged

feat: implement MD011 no-reversed-links rule with perfect parity#69
ekropotin merged 1 commit into
developmentfrom
dev

Conversation

@ekropotin
Copy link
Copy Markdown
Owner

Implements MD011 rule that detects reversed link syntax where parentheses and square brackets are swapped, e.g., (text)[url] instead of text.

Features:

  • Regex-based detection with proper escaping handling
  • Excludes code blocks (fenced and indented) and inline code spans
  • Handles edge cases: footnotes, nested parentheses, escaped patterns
  • Perfect parity with original markdownlint (24/24 test violations)
  • Comprehensive test coverage with 17 unit tests
  • Optimized performance with static regex compilation

Implementation details:

  • Line-based rule with single-pass analysis
  • Uses tree-sitter AST for code block exclusion
  • Manual negative lookahead for patterns followed by parentheses
  • Proper byte offset calculation for accurate error reporting

Test coverage:

  • Valid patterns: footnotes [^1], escaped (text)[url], inline code
  • Invalid patterns: basic reversed links, complex URLs, edge cases
  • Code exclusion: fenced blocks, indented blocks, inline spans
  • Performance: handles large documents efficiently

Updates progress: 24/52 rules completed (46.2%)

🤖 Generated with Claude Code

Implements MD011 rule that detects reversed link syntax where parentheses
and square brackets are swapped, e.g., (text)[url] instead of [text](url).

Features:
- Regex-based detection with proper escaping handling
- Excludes code blocks (fenced and indented) and inline code spans
- Handles edge cases: footnotes, nested parentheses, escaped patterns
- Perfect parity with original markdownlint (24/24 test violations)
- Comprehensive test coverage with 17 unit tests
- Optimized performance with static regex compilation

Implementation details:
- Line-based rule with single-pass analysis
- Uses tree-sitter AST for code block exclusion
- Manual negative lookahead for patterns followed by parentheses
- Proper byte offset calculation for accurate error reporting

Test coverage:
- Valid patterns: footnotes [^1], escaped \(text)[url], inline code
- Invalid patterns: basic reversed links, complex URLs, edge cases
- Code exclusion: fenced blocks, indented blocks, inline spans
- Performance: handles large documents efficiently

Updates progress: 24/52 rules completed (46.2%)

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
@ekropotin ekropotin merged commit 1d8a433 into development Aug 13, 2025
3 checks passed
@ekropotin ekropotin deleted the dev branch August 13, 2025 21:01
Sign up for free to 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