The Principal Dev – Masterclass for Tech Leads

The Principal Dev – Masterclass for Tech LeadsJuly 17-18

Join

Melody Logo

Rust CI Crates.io Crates.io melody playground melody playground

Melody is a language that compiles to ECMAScript regular expressions, while aiming to be more readable and maintainable.

code example

Examples

Note: these are for the currently supported syntax and may change

Batman Theme  try in playground

16 of "na";

2 of match {
  <space>;
  "batman";
}

// πŸ¦‡πŸ¦Έβ€β™‚οΈ

Turns into

(?:na){16}(?: batman){2}

Twitter Hashtag  try in playground

"#";
some of <word>;

// #melody

Turns into

#\w+

Introductory Courses  try in playground

some of <alphabetic>;
<space>;
"1";
2 of <digit>;

// classname 1xx

Turns into

[a-zA-Z]+ 1\d{2}

Indented Code (2 spaces)  try in playground

some of match {
  2 of <space>;
}

some of <char>;
";";

// let value = 5;

Turns into

(?: {2})+.+;

Semantic Versions  try in playground

<start>;

option of "v";

capture major {
  some of <digit>;
}

".";

capture minor {
  some of <digit>;
}

".";

capture patch {
  some of <digit>;
}

<end>;

// v1.0.0

Turns into

^v?(?<major>\d+)\.(?<minor>\d+)\.(?<patch>\d+)$

Playground

You can try Melody in your browser using the playground

Book

Read the book here

Install

Cargo

cargo install melody_cli

From Source

git clone https://github.com/yoav-lavi/melody.git
cd melody
cargo install --path crates/melody_cli

Binary

Community

CLI Usage

USAGE:
    melody [OPTIONS] [INPUT_FILE_PATH]

ARGS:
    <INPUT_FILE_PATH>    Read from a file
                         Use '-' and or pipe input to read from stdin

OPTIONS:
    -f, --test-file <TEST_FILE>
            Test the compiled regex against the contents of a file

        --generate-completions <COMPLETIONS>
            Outputs completions for the selected shell
            To use, write the output to the appropriate location for your shell

    -h, --help
            Print help information

    -n, --no-color
            Print output with no color

    -o, --output <OUTPUT_FILE_PATH>
            Write to a file

    -r, --repl
            Start the Melody REPL

    -t, --test <TEST>
            Test the compiled regex against a string

    -V, --version
            Print version information

Changelog

See the changelog here or in the release page

Syntax

Quantifiers

All quantifiers can be preceded by lazy to match the least amount of characters rather than the most characters (greedy). Equivalent to regex +?, *?, etc.

Symbols

All symbols can be preceeded with not to match any character other than the symbol

Special Symbols

Unicode Categories

Note: these are not supported when testing in the CLI (-t or -f) as the regex engine used does not support unicode categories. These require using the u flag.

These descriptions are from regular-expressions.info

Character Ranges

Literals

Raw

Groups

Assertions

Assertions can be preceeded by not to create a negative assertion (equivalent to regex (?!...), (?<!...))

Variables

Extras

File Extension

The Melody file extensions are .mdy and .melody

Crates

Extensions

Packages

Integrations

Performance

Last measured on v0.20.0

Measured on an 8 core 2021 MacBook Pro 14-inch, Apple M1 Pro using criterion:

To reproduce, run cargo bench or cargo xtask benchmark

Future Feature Status

🐣 - Partially implemented

❌ - Not implemented

❔ - Unclear what the syntax will be

❓ - Unclear whether this will be implemented

Melody Regex Status
not "A"; [^A] 🐣
variables / macros 🐣
<...::...> \p{...} 🐣
not <...::...> \P{...} 🐣
file watcher ❌
multiline groups in REPL ❌
flags: global, multiline, ... /.../gm... ❔
(?) \# ❔
(?) \k<name> ❔
(?) \uYYYY ❔
(?) \xYY ❔
(?) \ddd ❔
(?) \cY ❔
(?) $1 ❔
(?) $` ❔
(?) $& ❔
(?) x20 ❔
(?) x{06fa} ❔
any of "a", "b", "c" * [abc] ❓
multiple ranges * [a-zA-Z0-9] ❓
regex optimization ❓
standard library / patterns ❓
reverse compiler ❓

* these are expressable in the current syntax using other methods

Join libs.tech

...and unlock some superpowers

GitHub

We won't share your data with anyone else.