Skip to content

feat: implement per-language escaping calculation in Token #13

Description

@pleberre

Problem

String escaping logic needs to be properly customized per language, as different languages have different escaping rules.

File Location

src/main/java/io/err0/client/core/Token.java:52

// FIXME: per-language do the escaping calculation

Context

Different programming languages have different string escaping rules:

  • Java/C/C++: \n, \t, \", \\
  • Python: \n, \t, \", \', raw strings r"..."
  • JavaScript: \n, \t, \", \', template literals
  • Go: \n, \t, raw strings with backticks
  • Rust: \n, \t, raw strings r#"..."#

Current Behavior

Likely using a generic escaping approach that may not handle language-specific nuances.

Expected Behavior

  • Correctly handle escaping for each of 14+ supported languages
  • Account for language-specific string literal types (raw strings, template literals, etc.)
  • Preserve semantic meaning of escaped sequences

Implementation Guidance

Step 1: Create Language-Specific Escaping Interface

public interface StringEscapeHandler {
    String escape(String input);
    String unescape(String input);
}

Step 2: Implement for Each Language

public class JavaEscapeHandler implements StringEscapeHandler { ... }
public class PythonEscapeHandler implements StringEscapeHandler { ... }
// etc.

Step 3: Update Token Class

public class Token {
    public String getEscapedContent(Language language) {
        StringEscapeHandler handler = EscapeHandlerFactory.getHandler(language);
        return handler.escape(this.content);
    }
}

Test Cases Needed

For each language, test:

  • Simple escape sequences (\n, \t)
  • Quote escaping (\", \')
  • Backslash escaping (\\)
  • Language-specific features (raw strings, template literals)
  • Edge cases (empty strings, only escapes, etc.)

Reference

  • Apache Commons Text StringEscapeUtils for reference implementations
  • Language specifications for each supported language

Acceptance Criteria

  • Per-language escape handlers implemented for all 14+ languages
  • Token.java FIXME removed
  • Comprehensive tests for each language
  • Documentation of escaping rules per language
  • No regressions in string handling

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions