0.x minor version. Our target is to stabilize all APIs before we reach a 1.0.0.
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
This project adheres to a stricter subset of Semantic Versioning as described in cargo's crates versioning:
This compatibility convention is different from SemVer in the way it treats versions before 1.0.0. While SemVer says there is no compatibility before 1.0.0, Cargo considers 0.x.y to be compatible with 0.x.z, where y ≥ z and x > 0.
The following components are considered to be internal and they are excluded from the semver and API/ABI stability guarantees.
marker_rustc_drivermarker_adaptermarker_error
- #345: Bumped the used nightly toolchain version to 2023-12-28
0.5.0 - 2023-12-28
- #322:
sem::TyKindnow implementsFrom<*>for all semantic types.
- #322: Renamed
sem::TyKind::FnTy->sem::TyKind::Fn - #322: Renamed
sem::TyKind::ClosureTy->sem::TyKind::Closure - #322: Renamed
sem::ClosureTy::closure_ty_id->sem::ClosureTy::def_id - #342: Increased minimal rust version to build
cargo_markerto 1.70
0.4.3 - 2023-12-02
- #326: Use rustc's default way of discovering the system root directory, unless
MARKER_SYSROOTis specified
0.4.2 - 2023-11-25
- #320: Disable LTO on release builds to fix the crash on Windows with
exit code: 0xc0000005, STATUS_ACCESS_VIOLATION
0.4.1 - 2023-11-24
- #319: Fix compiling driver from sources outside of the marker repo on Windows
0.4.0 - 2023-11-16
The v0.4.0 milestone contains a full list of all changes.
- #306: The
LintPasstrait now as a newcheck_cratemethod. - #294: Items and fields now provide information about their visibility
- #306: Rustc's driver no longer ICEs on spans from compiler generated code.
- #278: Moved the
span()method from the inherent impl toHasSpantrait forClosureParam,FnParam,StructFieldPat. - #278: The trait
TyDatano longer has ownspan()method, but instead requiresHasSpanas a supertrait. - #278: All public methods that took
&Spanas a parameter now takeimpl HasSpan. This is a minor breaking change, as&SpanimplementsHasSpan, but if you relied on type inference based on the function parameter type, then making a method generic may break your code. - #288: Lint identifiers use the lint crate name as a new infix, to prevent name collisions across lint crates.
- #306: The items of a
Crateare now wrapped in aModItem, that is the root module of the crate. - #309: Renamed
CallExpr::operandtoCallExpr::func - #309: Renamed
RefPat::pattern()->RefPat::pat() - #309: Renamed
OrPat::patterns()->RefPat::pats()
0.3.0 - 2023-10-05
This version introduces precompiled binaries and CI templates. This version also tried to combine all breaking changes, to make v0.3.0 a solid baseline for new additions.
The v0.3.0 milestone contains a full list of all changes.
- #232: Add scope config for visitors and
for_each_exprtomarker_utils - #239: GitHub releases now provide precompiled binaries of
cargo-markerandmarker_rustc_driver. - #252: Marker now provides install scripts for linux, macos and windows
- #259: Introduced a GitHub Action for installing and running Marker
- #256: Renamed
AstContext->MarkerContext - #256: Moved
marker_api::ast::common::span->marker_api::span - #241: Renamed
QuestionMarkExpr->TryExpr - #244:
StmtKindandPatKindno longer wrapKind*directly - #245:
emit_lint()takes less arguments and returns aDiagnosticBuilderinstance - #263: Updated the
ui_testused bymarker_uitestfromv0.11.7tov0.21.2 - #260: Moved
AstContext::{body, item, lint_level_at}to the newAstMapstruct accessible viaMarkerContext::ast() - #265: Removed the
CallableDatatrait - #268: Moved semantic types and generics to the new
marker_api::semmodule - #268: Moved common items, like IDs, to the new
marker_api::commonmodule - #268: Removed the
SemandSynprefix from types and generics - #268:
marker_api::preludeno longer contains the semantic and syntacticTyKindenums - #268:
marker_api::preludenow imports thesemandastnames - #268: The
marker_api::astmodule has been flattened - #268: The
marker_api::lintandmarker_api::interfaceare now private
- #231: Significantly improved error handling
- #239: The release flow was automated. It's now a process of updating the
CHANGELOG.mdand doing several clicks to trigger the CI job.
0.2.1 - 2023-08-24
See the v0.2.0 milestone for a full list of all changes
- Support
.awaitandasyncexpressions - Started The Marker Book
cargo markernow works with lower toolchain versions- Fixed errors due to drifts in the used toolchain
- Fixed the question mark operator resugar
Spans now properly represent macro expansions
FnItem<'ast>andClosureExpr<'ast>no longer implementCallableData- Some
Spanmethods have been renamed
0.1.1 - 2023-07-17
Marker's first release intended for user testing.
This version is far from done, but it already includes most critical AST nodes required for linting. This is an incomplete list of supported elements:
- Items
- Generics
- Statements
- Expressions
- Patterns
- Types
Marker should be able to handle all stable features, except
asyncandawaitexpressions. (See: #174)
You can install Marker with cargo, like this:
cargo install cargo_marker
# Automatically setup the toolchain and driver
cargo marker setup --auto-install-toolchainTo run Marker simply specify a lint crate in your Cargo.toml file, like this:
[workspace.metadata.marker.lints]
marker_lints = "0.1.0"And run:
cargo marker
This should give you the usual Checking ... output of Cargo.
You might want to check out Marker's lint crate template to test the API yourself.
This release is intended to collect feedback of any kind. If you encounter any bugs, have any thoughts or suggestions, please create an issue or reach out to me directly.
Happy linting everyone! 🦀 🖊️ 🎉