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_driver
marker_adapter
marker_error
- #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
LintPass
trait now as a newcheck_crate
method. - #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 toHasSpan
trait forClosureParam
,FnParam
,StructFieldPat
. - #278: The trait
TyData
no longer has ownspan()
method, but instead requiresHasSpan
as a supertrait. - #278: All public methods that took
&Span
as a parameter now takeimpl HasSpan
. This is a minor breaking change, as&Span
implementsHasSpan
, 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
Crate
are now wrapped in aModItem
, that is the root module of the crate. - #309: Renamed
CallExpr::operand
toCallExpr::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_expr
tomarker_utils
- #239: GitHub releases now provide precompiled binaries of
cargo-marker
andmarker_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:
StmtKind
andPatKind
no longer wrapKind*
directly - #245:
emit_lint()
takes less arguments and returns aDiagnosticBuilder
instance - #263: Updated the
ui_test
used bymarker_uitest
fromv0.11.7
tov0.21.2
- #260: Moved
AstContext::{body, item, lint_level_at}
to the newAstMap
struct accessible viaMarkerContext::ast()
- #265: Removed the
CallableData
trait - #268: Moved semantic types and generics to the new
marker_api::sem
module - #268: Moved common items, like IDs, to the new
marker_api::common
module - #268: Removed the
Sem
andSyn
prefix from types and generics - #268:
marker_api::prelude
no longer contains the semantic and syntacticTyKind
enums - #268:
marker_api::prelude
now imports thesem
andast
names - #268: The
marker_api::ast
module has been flattened - #268: The
marker_api::lint
andmarker_api::interface
are now private
- #231: Significantly improved error handling
- #239: The release flow was automated. It's now a process of updating the
CHANGELOG.md
and 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
.await
andasync
expressions - Started The Marker Book
cargo marker
now works with lower toolchain versions- Fixed errors due to drifts in the used toolchain
- Fixed the question mark operator resugar
Span
s now properly represent macro expansions
FnItem<'ast>
andClosureExpr<'ast>
no longer implementCallableData
- Some
Span
methods 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
async
andawait
expressions. (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-toolchain
To 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! 🦀 🖊️ 🎉