syntect 5.2.0

library for high quality syntax highlighting and code intelligence using Sublime Text's grammars
Documentation
# Changelog

## [Version 5.2.0]https://github.com/trishume/syntect/compare/v5.1.0...v5.2.0 (2024-02-07)

### Improvements

- Eliminate syntect library's dependency on serde's "derive" feature. Increases build parallelism.
- Add parsing of gutterSettings.

### Dependencies

- Update `regex-syntax` to 0.8.

## [Version 5.1.0]https://github.com/trishume/syntect/compare/v5.0.0...v5.1.0 (2023-08-01)

### Improvements

- Fix how `syntect::util::split_at()` handles multi-byte characters
- Allow case insensitive search for .tmtheme paths
- impl `PartialEq` for `Theme`

### Dependencies

- Upgrade `fancy-regex` to 0.11
- Upgrade `regex-syntax` to 0.7
- Replace `lazy_static` with `once_cell`

### Other

- Change MSRV policy to "last three stable versions"
- Make `Debug` impl of `syntect::highlighting::Color` less verbose

## [Version 5.0.0]https://github.com/trishume/syntect/compare/v4.6.0...v5.0.0 (2022-05-03)

Breaking changes

- Lazy-load syntaxes to significantly improve startup time. This changes the binary format of syntax dump files.
- Remove `ContextId::new()` from public API to support lazy-loading of syntaxes
- Rename `HighlightLines::highlight()` to `HighlightLines::highlight_line()` to make it clear that the function takes one line at a time
- Make `plist` dependency (used for loading themes) optional via new `plist-load` feature
- Remove obsolete `dump-load-rs` and `dump-create-rs` features that has been identical to `dump-load` and `dump-create` for two years
- Remove deprecated items `ThemeSettings::highlight_foreground`, `ThemeSettings::selection_background`, `ClassedHTMLGenerator::new`, `ClassedHTMLGenerator::parse_html_for_line`, `html::css_for_theme`, `html::tokens_to_classed_html` and `html::tokens_to_classed_spans`
- Mark all error enums as `#[non_exhaustive]`
- These functions have been changed to return a `Result` to allow propagation of errors:
  - `html::ClassedHTMLGenerator::parse_html_for_line_which_includes_newline`
  - `html::append_highlighted_html_for_styled_line`
  - `html::css_for_theme_with_class_style`
  - `html::highlighted_html_for_string`
  - `html::line_tokens_to_classed_spans`
  - `html::styled_line_to_highlighted_html`
  - `parsing::ParseState::parse_line`
  - `parsing::ScopeStack::apply`
  - `parsing::ScopeStack::apply_with_hook`
  - `parsing::syntax_definition::Context::match_at`
  - `parsing::syntax_definition::ContextReference::id`
  - `parsing::syntax_definition::ContextReference::resolve`

Other changes

- Fall back to `Plain Text` if a referenced syntax is missing
- Add support for `hidden_file_extensions` key in syntaxes.
- Implement `Error` and `Display` for all error enums by using `thiserror`
- Replace `lazycell` with `once_cell` to fix crash on lazy initialization
- Add `ScopeRangeIterator`
- Add CI check for Minimum Supported Rust Version. This is currently Rust 1.53.
- Make looking up a syntax by extension use case-insensitive comparison
- Make `from_dump_file()` ~15% faster
- Blend alpha value on converting colors to ANSI color sequences
- Fix sample code in documentation to avoid double newlines
- Fix lots of build warnings and lints
- Add Criterion benchmarks for a whole syntect pipeline and for `from_dump_file()`

## [Version 4.7.1]https://github.com/trishume/syntect/compare/v4.7.0...v4.7.1 (2022-01-03)

This version was yanked from crates.io due to a semver violation issue.

## [Version 4.7.0]https://github.com/trishume/syntect/compare/v4.6.0...v4.7.0 (2021-12-25)

This version was yanked from crates.io due to a semver violation issue.

## [Version 4.6.0]https://github.com/trishume/syntect/compare/v4.5.0...v4.6.0 (2021-08-01)

- Add `html::line_tokens_to_classed_spans` to also take a mutable ScopeStack, deprecate `tokens_to_classed_spans`, to avoid panics and incorrect highlighting.
- Derive Hash for Color and Style
- Add `find_unlinked_contexts` to `SyntaxSet`
- Add `syntaxes` method to `SyntaxSetBuilder`
- Bump `fancy-regex` to v0.7 and `yaml-rust` to v0.4.5

## [Version 4.5.0]https://github.com/trishume/syntect/compare/v4.4.0...v4.5.0 (2020-12-09)

- Added a new function for producing classed HTML which handles newlines correctly and deprecated old one. [#307]https://github.com/trishume/syntect/pull/307

## [Version 4.4.0]https://github.com/trishume/syntect/compare/v4.3.0...v4.4.0 (2020-08-19)

- Errors are now `Send + Sync + 'static` [#304]https://github.com/trishume/syntect/pull/304

## [Version 4.3.0]https://github.com/trishume/syntect/compare/v4.2.0...v4.3.0 (2020-08-01)

- Fixes unnecesary dependency of the `html` feature on the `assets` feature. [#300]https://github.com/trishume/syntect/pull/300
- Adds ability to add prefixes to `html` module CSS class names. [#296]https://github.com/trishume/syntect/pull/296

## [Version 4.2.0]https://github.com/trishume/syntect/compare/v4.1.1...v4.2.0 (2020-04-20)

- Updates to new versions of `onig` and `plist`. The new `onig` version doesn't require `bindgen` thus making compilation easier. [#293]https://github.com/trishume/syntect/pull/293

## [Version 4.1.1]https://github.com/trishume/syntect/compare/v4.1.0...v4.1.1 (2020-04-20)

- Properly handle backreferences in included contexts [#288]https://github.com/trishume/syntect/pull/288

## [Version 4.1.0]https://github.com/trishume/syntect/compare/v4.0.0...v4.1.0 (2020-03-30)

- Make sure errors implement `Send` [#285]https://github.com/trishume/syntect/pull/285
- Fix errors to not use the deprecated `description()` [#286]https://github.com/trishume/syntect/pull/286

Thanks @sharkdp for the bug fixes! Bumping second part of semver since `Send` is adding functionality (back).

## [Version 4.0.0]https://github.com/trishume/syntect/compare/v3.3.0...v4.0.0 (2020-03-29)

### Headline feature: pure-Rust `fancy-regex` engine option

Users can now opt in to a pure-Rust regex engine using Cargo features, making
compilation easier in general. People experiencing difficulty compiling for
Windows and Wasm should try switching to `fancy-regex`. Note this currently
approximately halves highlighting speed.

See the Readme and [#270](https://github.com/trishume/syntect/pull/270) for details.
Thanks to @robinst for implementing this!

### Other changes

- Ability to generate CSS for a theme for use with classed HTML generation (won't always be correct) [#274]https://github.com/trishume/syntect/pull/274/files
- Don't generate empty spans in classed HTML [#276]https://github.com/trishume/syntect/pull/276
- Miscellaneous dependency bumps and cleanup

### Breaking changes and upgrading

Upgrading should cause no errors for nearly all users. Users using more unusual APIs may have a small amount of tweaking to do.

- If you use `default-features = false` you may need to update your features to choose a regex engine
- A bunch of technically public APIs that I don't know if anyone uses changed due to the regex engine refactor, common uses shouldn't break

## [Version 3.3.0]https://github.com/trishume/syntect/compare/v3.2.1...v3.3.0 (2019-09-22)

> Bug fixes and new utilities

- Fixes multiple bugs
- Add RangedHighlightIterator
- Add `as_latex_escaped` util

## [Version 3.2.1]https://github.com/trishume/syntect/compare/v3.2.0...v3.2.1 (2019-08-10)

- Bump onig dependency
- inconsequential patches

## [Version 3.2.0]https://github.com/trishume/syntect/compare/v3.1.0...v3.2.0 (2019-03-09)

- Actually make `tokens_to_classed_spans` public like intended

## [Version 3.1.0]https://github.com/trishume/syntect/compare/v3.0.2...v3.1.0 (2019-02-24)

> Metadata and new classed HTML generation

- Add support for loading metadata ([#223]https://github.com/trishume/syntect/pull/223 [#225]https://github.com/trishume/syntect/pull/225 [#230]https://github.com/trishume/syntect/pull/230)
- Improve support for generating classed HTML and fix a bug, old function is deprecated because it's impossible to use correctly ([#235]https://github.com/trishume/syntect/pull/235)
- Update `plist` to `v0.4` and `pretty_assertions` to `v0.6` ([#232]https://github.com/trishume/syntect/pull/232 [#236]https://github.com/trishume/syntect/pull/236)

## [Version 3.0.2]https://github.com/trishume/syntect/compare/v3.0.1...v3.0.2 (2018-11-11)

> Bug fixes

- Fix application of multiple `with_prototype`s ([#220]https://github.com/trishume/syntect/pull/220, fixes [#160]https://github.com/trishume/syntect/issues/160, [#178]https://github.com/trishume/syntect/issues/178, ASP highlighting)
- Fix prototype marking logic ([#221]https://github.com/trishume/syntect/pull/221, fixes [#219]https://github.com/trishume/syntect/issues/219)

## [Version 3.0.1]https://github.com/trishume/syntect/compare/v3.0.0...v3.0.1 (2018-10-16)

> Minor bug fixes

- Fix a bug with syntaxes that used captures in lookarounds ([#176]https://github.com/trishume/syntect/issues/176 [#215]https://github.com/trishume/syntect/pull/215)
- Fix the precedence order of syntaxes to match Sublime ([#217]https://github.com/trishume/syntect/pull/217 [#216]https://github.com/trishume/syntect/pull/216)

## [Version 3.0.0]https://github.com/trishume/syntect/compare/v2.1.0...v3.0.0 (2018-10-09)

> Breaking changes and major new features

This is a major release with multiple breaking API changes, although upgrading shouldn't be too difficult. It fixes bugs and comes with some nice new features.

### Breaking changes and upgrading

- The `SyntaxSet` API has been revamped to use a builder and an arena of contexts. See [example usage]https://github.com/trishume/syntect/blob/51208d35a6d98c07468fbe044d5c6f37eb129205/examples/gendata.rs#L25-L28.
- Many functions now need to be passed the `SyntaxSet` that goes with the rest of their arguments because of this new arena.
- Filename added to `LoadingError::ParseSyntax`
- Many functions in the `html` module now take the `newlines` version of syntaxes.
  - These methods have also been renamed, partially so that code that needs updating doesn't break without a compile error.
  - The HTML they output also treats newlines slightly differently and I think more correctly but uglier when you look at the HTML.

#### Breaking rename upgrade guide

- `SyntaxSet::add_syntax -> SyntaxSetBuilder::add`
- `SyntaxSet::load_syntaxes -> SyntaxSetBuilder::add_from_folder`
- `SyntaxSet::load_plain_text_syntax -> SyntaxSetBuilder::add_plain_text_syntax`
- `html::highlighted_snippet_for_string -> html::highlighted_html_for_string`: also change to `newlines` `SyntaxSet`
- `html::highlighted_snippet_for_file -> html::highlighted_html_for_file`: also change to `newlines` `SyntaxSet`
- `html::styles_to_coloured_html -> html::styled_line_to_highlighted_html`: also change to `newlines` `SyntaxSet`
- `html::start_coloured_html_snippet -> html::start_highlighted_html_snippet`: return type also changed

### Major changes and new features

- Use arena for contexts ([#182]https://github.com/trishume/syntect/pull/182 [#186]https://github.com/trishume/syntect/pull/186 [#187]https://github.com/trishume/syntect/pull/187 [#190]https://github.com/trishume/syntect/pull/190 [#195]https://github.com/trishume/syntect/pull/195): This makes the code cleaner, enables use of syntaxes from multiple threads, and prevents accidental misuse.
  - This involves a new `SyntaxSetBuilder` API for constructing new `SyntaxSet`s
  - See the revamped [parsyncat example]https://github.com/trishume/syntect/blob/51208d35a6d98c07468fbe044d5c6f37eb129205/examples/parsyncat.rs.
- Encourage use of newlines ([#197]https://github.com/trishume/syntect/pull/197 [#207]https://github.com/trishume/syntect/pull/207 [#196]https://github.com/trishume/syntect/issues/196): The `nonewlines` mode is often buggy so we made it easier to use the `newlines` mode.
  - Added a `LinesWithEndings` utility for iterating over the lines of a string with `\n` characters.
  - Reengineer the `html` module to use `newlines` syntaxes.
- Add helpers for modifying highlighted lines ([#198]https://github.com/trishume/syntect/pull/198): For use cases like highlighting a piece of text in a blog code snippet or debugger. This allows you to reach into the highlighted spans and add styles.
  - Check out `split_at` and `modify_range` in the `util` module.
- New `ThemeSet::add_from_folder` function ([#200]https://github.com/trishume/syntect/pull/200): For modifying existing theme sets.

### Bug Fixes

- Improve nonewlines regex rewriting: [#212]https://github.com/trishume/syntect/pull/212 [#211]https://github.com/trishume/syntect/issues/211
- Reengineer theme application to match Sublime: [#209]https://github.com/trishume/syntect/pull/209
- Also mark contexts referenced by name as "no prototype" (same as ST): [#180]https://github.com/trishume/syntect/pull/180
- keep with_prototype when switching contexts with `set`: [#177]https://github.com/trishume/syntect/pull/177 [#166]https://github.com/trishume/syntect/pull/166
- Fix unused import warning: [#174]https://github.com/trishume/syntect/pull/174
- Ignore trailing dots in selectors: [#173]https://github.com/trishume/syntect/pull/173
- Fix `embed` to not include prototypes: [#172]https://github.com/trishume/syntect/pull/172 [#160]https://github.com/trishume/syntect/issues/160

### Upgraded dependencies

- plist: `0.2 -> 0.3`
- regex: `0.2 -> 1.0`
- onig: `3.2.1 -> 4.1`

## [Version 2.1.0]https://github.com/trishume/syntect/compare/v2.0.1...v2.1.0 (2018-05-31)

> Regex checking and plain file names

* Check regexes compile upon loading from YAML (There's technically a small breaking change here if you match on the previously unused regex error, but I don't think anyone does)
* Can detect the correct syntax on full file names like `CMakeLists.txt`
* Make `nonewlines` mode marginally less buggy (still prefer using `newlines` mode)
* Better error types
* Better examples and tests

## [Version 2.0.1]https://github.com/trishume/syntect/compare/v2.0.0...v2.0.1 (2018-04-28)

> More robust parsing

* Parsing now abandons a regex after reaching a recursion depth limit instead of taking forever
* Loop detection better matches Sublime Text
* Parsing is faster!
* Dependency upgrades
* Other minor tweaks

Thanks to [@robinst](https://github.com/ronbinst) for the headline features of this release!

## [Version 2.0.0]https://github.com/trishume/syntect/compare/v1.8.2...v2.0.0 (2018-01-02)

> Breaking Changes and New Stuff

### Breaking changes

* The `static-onig` feature was removed, static linking is now the default
* Font styles and color constants now use associated consts because of bitflags upgrade
* `SyntaxDefinition::load_from_str` now has an extra parameter

### Other notable changes

* Support for new `embed` syntax, see [#124]https://github.com/trishume/syntect/issues/124
* Updates to many dependencies
* Updated dumps
* More compact HTML output

## [Version 1.8.2]https://github.com/trishume/syntect/compare/v1.8.0...v1.8.2 (2017-11-11)

> New Inspired GitHub and libonig

## [Version 1.8.0]https://github.com/trishume/syntect/compare/v1.7.3...v1.8.0 (2017-10-14)

> Update bitflags & packages

This release changes how the constants for `FontStyle` and `Color`, relying on the new associated consts feature in `Rust 1.20`. The old constants are still available but are deprecated and will be removed in `v2.0`.

Packages were also updated to newer versions.

## [Version 1.7.3]https://github.com/trishume/syntect/compare/v1.7.2...v1.7.3 (2017-09-15)

> Enable comparison of parse states

Fixes comparisons of parse states so they are fast and don't recurse infinitely. Thanks [@raphlinus](https://github.com/raphlinus)

## [Version 1.7.2]https://github.com/trishume/syntect/compare/v1.7.0...v1.7.2 (2017-09-05)

> Bug fixes and package updates

* Fixes [#101]https://github.com/trishume/syntect/issues/101, which caused some syntaxes like PHP to behave incorrectly.
* Updates Packages with new syntax versions
* Adds new handy flags to the `syncat` example

## [Version 1.7.0]https://github.com/trishume/syntect/compare/v1.6.0...v1.7.0 (2017-06-30)

> Pure Rust dump loading / creation features

## [Version 1.6.0]https://github.com/trishume/syntect/compare/v1.5.0...v1.6.0 (2017-06-21)

> Helper methods and more theme attributes

## [Version 1.5.0]https://github.com/trishume/syntect/compare/v1.4.0...v1.5.0 (2017-05-31)

> Highlighting stacks

Small release, adds a convenience method for highlighting an entire stack, and derives some more things on `Scope`.

## [Version 1.4.0]https://github.com/trishume/syntect/compare/v1.3.0...v1.4.0 (2017-05-25)

> Serde and optional parsing

This release switches the dump format from `rustc-serialize` to `Serde`, anyone using custom dumps will have to update them.

It also makes the parsing part of the library optional behind a feature flag, anyone not using the default feature flags probably will want to add the `parsing` flag.

## [Version 1.3.0]https://github.com/trishume/syntect/tree/v1.3.0 (2017-04-05)

> Bug fixes, tests, updates and feature flags

* Syntax tests: there is a new `syntest` example for running Sublime Text syntax tests
* Bug fixes: there's a ton of bugs fixed in this release, mostly found via the syntax tests. These mostly affected certain syntaxes which pushed/set multiple contexts at once.
* Updated packages: The Sublime packages have been updated to the latest version
* Feature flags: there's now Cargo feature flags for disabling some parts of syntect if you don't want unnecessary binary and dependency bloat.