rust/README.rst
author Arseniy Alekseyev <aalekseyev@janestreet.com>
Fri, 26 Apr 2024 19:10:35 +0100
changeset 51626 865efc020c33
parent 50387 b88e9c707c95
permissions -rw-r--r--
dirstate: remove the python-side whitelist of allowed matchers This whitelist is too permissive because it allows matchers that contain disallowed ones deep inside, for example through `intersectionmatcher`. It is also too restrictive because it doesn't pass through some of the matchers we support, such as `patternmatcher`. It's also unnecessary because unsupported matchers raise `FallbackError` and we fall back anyway. Making this change makes more of the tests use rust code path, and therefore subtly change behavior. For example, rust status in largefiles repos seems to have strange behavior.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
35569
964212780daf rust: implementation of `hg`
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     1
===================
964212780daf rust: implementation of `hg`
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     2
Mercurial Rust Code
964212780daf rust: implementation of `hg`
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     3
===================
964212780daf rust: implementation of `hg`
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     4
964212780daf rust: implementation of `hg`
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     5
This directory contains various Rust code for the Mercurial project.
44115
e1b8b4e4f496 rust: add a README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44114
diff changeset
     6
Rust is not required to use (or build) Mercurial, but using it
e1b8b4e4f496 rust: add a README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44114
diff changeset
     7
improves performance in some areas.
35569
964212780daf rust: implementation of `hg`
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
     8
48535
799fdf4cca80 docs: update Rust readme with a mention of `rhg`
Raphaël Gomès <rgomes@octobus.net>
parents: 48296
diff changeset
     9
There are currently four independent Rust projects:
50384
5d20fc23e265 rust-readme: rst fixes
Georges Racinet <georges.racinet@octobus.net>
parents: 49628
diff changeset
    10
48535
799fdf4cca80 docs: update Rust readme with a mention of `rhg`
Raphaël Gomès <rgomes@octobus.net>
parents: 48296
diff changeset
    11
- chg. An implementation of chg, in Rust instead of C.
799fdf4cca80 docs: update Rust readme with a mention of `rhg`
Raphaël Gomès <rgomes@octobus.net>
parents: 48296
diff changeset
    12
- hgcli. A project that provides a (mostly) self-contained "hg" binary,
44903
69d3ce00df99 rust: update the mention of hgcli in rust/README.rst
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44885
diff changeset
    13
  for ease of deployment and a bit of speed, using PyOxidizer. See
50384
5d20fc23e265 rust-readme: rst fixes
Georges Racinet <georges.racinet@octobus.net>
parents: 49628
diff changeset
    14
  ``hgcli/README.md``.
44549
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
    15
- hg-core (and hg-cpython): implementation of some
48535
799fdf4cca80 docs: update Rust readme with a mention of `rhg`
Raphaël Gomès <rgomes@octobus.net>
parents: 48296
diff changeset
    16
  functionality of mercurial in Rust, e.g. ancestry computations in
44549
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
    17
  revision graphs, status or pull discovery. The top-level ``Cargo.toml`` file
44115
e1b8b4e4f496 rust: add a README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44114
diff changeset
    18
  defines a workspace containing these crates.
48535
799fdf4cca80 docs: update Rust readme with a mention of `rhg`
Raphaël Gomès <rgomes@octobus.net>
parents: 48296
diff changeset
    19
- rhg: a pure Rust implementation of Mercurial, with a fallback mechanism for
50384
5d20fc23e265 rust-readme: rst fixes
Georges Racinet <georges.racinet@octobus.net>
parents: 49628
diff changeset
    20
  unsupported invocations. It reuses the logic ``hg-core`` but
5d20fc23e265 rust-readme: rst fixes
Georges Racinet <georges.racinet@octobus.net>
parents: 49628
diff changeset
    21
  completely forgoes interaction with Python. See
5d20fc23e265 rust-readme: rst fixes
Georges Racinet <georges.racinet@octobus.net>
parents: 49628
diff changeset
    22
  ``rust/rhg/README.md`` for more details.
44115
e1b8b4e4f496 rust: add a README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44114
diff changeset
    23
44549
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
    24
Using Rust code
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
    25
===============
35569
964212780daf rust: implementation of `hg`
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    26
44115
e1b8b4e4f496 rust: add a README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44114
diff changeset
    27
Local use (you need to clean previous build artifacts if you have
e1b8b4e4f496 rust: add a README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44114
diff changeset
    28
built without rust previously)::
35569
964212780daf rust: implementation of `hg`
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    29
44549
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
    30
  $ make PURE=--rust local # to use ./hg
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
    31
  $ ./tests/run-tests.py --rust # to run all tests
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
    32
  $ ./hg debuginstall | grep -i rust # to validate rust is in use
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
    33
  checking Rust extensions (installed)
44115
e1b8b4e4f496 rust: add a README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44114
diff changeset
    34
  checking module policy (rust+c-allow)
44549
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
    35
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
    36
If the environment variable ``HGWITHRUSTEXT=cpython`` is set, the Rust
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
    37
extension will be used by default unless ``--no-rust``.
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
    38
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
    39
One day we may use this environment variable to switch to new experimental
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
    40
binding crates like a hypothetical ``HGWITHRUSTEXT=hpy``.
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
    41
45609
e604a3c03ab9 rust: introduce `dirstate-tree` cargo feature
Raphaël Gomès <rgomes@octobus.net>
parents: 44904
diff changeset
    42
Special features
e604a3c03ab9 rust: introduce `dirstate-tree` cargo feature
Raphaël Gomès <rgomes@octobus.net>
parents: 44904
diff changeset
    43
================
e604a3c03ab9 rust: introduce `dirstate-tree` cargo feature
Raphaël Gomès <rgomes@octobus.net>
parents: 44904
diff changeset
    44
48842
649ff7f86f96 rust: enable Python 3 support unconditionally
Simon Sapin <simon.sapin@octobus.net>
parents: 48535
diff changeset
    45
In the future, compile-time opt-ins may be added
50384
5d20fc23e265 rust-readme: rst fixes
Georges Racinet <georges.racinet@octobus.net>
parents: 49628
diff changeset
    46
to the ``features`` section in ``hg-cpython/Cargo.toml``.
45609
e604a3c03ab9 rust: introduce `dirstate-tree` cargo feature
Raphaël Gomès <rgomes@octobus.net>
parents: 44904
diff changeset
    47
50384
5d20fc23e265 rust-readme: rst fixes
Georges Racinet <georges.racinet@octobus.net>
parents: 49628
diff changeset
    48
To use features from the Makefile, use the ``HG_RUST_FEATURES`` environment
5d20fc23e265 rust-readme: rst fixes
Georges Racinet <georges.racinet@octobus.net>
parents: 49628
diff changeset
    49
variable: for instance ``HG_RUST_FEATURES="some-feature other-feature"``.
45609
e604a3c03ab9 rust: introduce `dirstate-tree` cargo feature
Raphaël Gomès <rgomes@octobus.net>
parents: 44904
diff changeset
    50
44904
7ca1d635e4a6 rust: add a pointer for profiling to the README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44903
diff changeset
    51
Profiling
7ca1d635e4a6 rust: add a pointer for profiling to the README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44903
diff changeset
    52
=========
7ca1d635e4a6 rust: add a pointer for profiling to the README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44903
diff changeset
    53
7ca1d635e4a6 rust: add a pointer for profiling to the README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44903
diff changeset
    54
Setting the environment variable ``RUST_LOG=trace`` will make hg print
7ca1d635e4a6 rust: add a pointer for profiling to the README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44903
diff changeset
    55
a few high level rust-related performance numbers. It can also
7ca1d635e4a6 rust: add a pointer for profiling to the README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44903
diff changeset
    56
indicate why the rust code cannot be used (say, using lookarounds in
7ca1d635e4a6 rust: add a pointer for profiling to the README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44903
diff changeset
    57
hgignore).
7ca1d635e4a6 rust: add a pointer for profiling to the README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44903
diff changeset
    58
46140
ec14c37958ec rust: document how to enable debug information in optimized builds
Simon Sapin <simon.sapin@octobus.net>
parents: 45614
diff changeset
    59
Creating a ``.cargo/config`` file with the following content enables
ec14c37958ec rust: document how to enable debug information in optimized builds
Simon Sapin <simon.sapin@octobus.net>
parents: 45614
diff changeset
    60
debug information in optimized builds. This make profiles more informative
ec14c37958ec rust: document how to enable debug information in optimized builds
Simon Sapin <simon.sapin@octobus.net>
parents: 45614
diff changeset
    61
with source file name and line number for Rust stack frames and
50384
5d20fc23e265 rust-readme: rst fixes
Georges Racinet <georges.racinet@octobus.net>
parents: 49628
diff changeset
    62
(in some cases) stack frames for Rust functions that have been inlined::
46140
ec14c37958ec rust: document how to enable debug information in optimized builds
Simon Sapin <simon.sapin@octobus.net>
parents: 45614
diff changeset
    63
ec14c37958ec rust: document how to enable debug information in optimized builds
Simon Sapin <simon.sapin@octobus.net>
parents: 45614
diff changeset
    64
  [profile.release]
ec14c37958ec rust: document how to enable debug information in optimized builds
Simon Sapin <simon.sapin@octobus.net>
parents: 45614
diff changeset
    65
  debug = true
ec14c37958ec rust: document how to enable debug information in optimized builds
Simon Sapin <simon.sapin@octobus.net>
parents: 45614
diff changeset
    66
44904
7ca1d635e4a6 rust: add a pointer for profiling to the README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44903
diff changeset
    67
``py-spy`` (https://github.com/benfred/py-spy) can be used to
7ca1d635e4a6 rust: add a pointer for profiling to the README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44903
diff changeset
    68
construct a single profile with rust functions and python functions
7ca1d635e4a6 rust: add a pointer for profiling to the README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44903
diff changeset
    69
(as opposed to ``hg --profile``, which attributes time spent in rust
7ca1d635e4a6 rust: add a pointer for profiling to the README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44903
diff changeset
    70
to some unlucky python code running shortly after the rust code, and
7ca1d635e4a6 rust: add a pointer for profiling to the README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44903
diff changeset
    71
as opposed to tools for native code like ``perf``, which attribute
7ca1d635e4a6 rust: add a pointer for profiling to the README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44903
diff changeset
    72
time to the python interpreter instead of python functions).
7ca1d635e4a6 rust: add a pointer for profiling to the README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44903
diff changeset
    73
50384
5d20fc23e265 rust-readme: rst fixes
Georges Racinet <georges.racinet@octobus.net>
parents: 49628
diff changeset
    74
Example usage::
46140
ec14c37958ec rust: document how to enable debug information in optimized builds
Simon Sapin <simon.sapin@octobus.net>
parents: 45614
diff changeset
    75
ec14c37958ec rust: document how to enable debug information in optimized builds
Simon Sapin <simon.sapin@octobus.net>
parents: 45614
diff changeset
    76
  $ make PURE=--rust local # Don't forget to recompile after a code change
ec14c37958ec rust: document how to enable debug information in optimized builds
Simon Sapin <simon.sapin@octobus.net>
parents: 45614
diff changeset
    77
  $ py-spy record --native --output /tmp/profile.svg -- ./hg ...
ec14c37958ec rust: document how to enable debug information in optimized builds
Simon Sapin <simon.sapin@octobus.net>
parents: 45614
diff changeset
    78
44549
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
    79
Developing Rust
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
    80
===============
35569
964212780daf rust: implementation of `hg`
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
    81
50387
b88e9c707c95 rust: configure MSRV in Clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50386
diff changeset
    82
Minimum Supported Rust Version
b88e9c707c95 rust: configure MSRV in Clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50386
diff changeset
    83
------------------------------
b88e9c707c95 rust: configure MSRV in Clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50386
diff changeset
    84
b88e9c707c95 rust: configure MSRV in Clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50386
diff changeset
    85
The minimum supported rust version (MSRV) is specified in the `Clippy`_
b88e9c707c95 rust: configure MSRV in Clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50386
diff changeset
    86
configuration file at ``rust/clippy.toml``. It is set to be ``1.61.0`` as of
b88e9c707c95 rust: configure MSRV in Clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50386
diff changeset
    87
this writing, but keep in mind that the authoritative value is the one
b88e9c707c95 rust: configure MSRV in Clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50386
diff changeset
    88
from the configuration file.
b88e9c707c95 rust: configure MSRV in Clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50386
diff changeset
    89
b88e9c707c95 rust: configure MSRV in Clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50386
diff changeset
    90
We bump it from time to time, with the general rule being that our
b88e9c707c95 rust: configure MSRV in Clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50386
diff changeset
    91
MSRV should not be greater that the version of the Rust toolchain
b88e9c707c95 rust: configure MSRV in Clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50386
diff changeset
    92
shipping with Debian testing, so that the Rust enhanced Mercurial can
b88e9c707c95 rust: configure MSRV in Clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50386
diff changeset
    93
be eventually packaged in Debian.
b88e9c707c95 rust: configure MSRV in Clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50386
diff changeset
    94
b88e9c707c95 rust: configure MSRV in Clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50386
diff changeset
    95
To ensure that you are not depending on features introduced in later
b88e9c707c95 rust: configure MSRV in Clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50386
diff changeset
    96
versions, you can issue ``rustup override set x.y.z`` at the root of
b88e9c707c95 rust: configure MSRV in Clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50386
diff changeset
    97
the repository.
b88e9c707c95 rust: configure MSRV in Clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50386
diff changeset
    98
b88e9c707c95 rust: configure MSRV in Clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50386
diff changeset
    99
Build and development
b88e9c707c95 rust: configure MSRV in Clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50386
diff changeset
   100
---------------------
44549
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
   101
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
   102
Go to the ``hg-cpython`` folder::
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
   103
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
   104
  $ cd rust/hg-cpython
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
   105
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
   106
Or, only the ``hg-core`` folder. Be careful not to break compatibility::
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
   107
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
   108
  $ cd rust/hg-core
44115
e1b8b4e4f496 rust: add a README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44114
diff changeset
   109
e1b8b4e4f496 rust: add a README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44114
diff changeset
   110
Simply run::
35569
964212780daf rust: implementation of `hg`
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   111
964212780daf rust: implementation of `hg`
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
   112
   $ cargo build --release
44115
e1b8b4e4f496 rust: add a README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44114
diff changeset
   113
e1b8b4e4f496 rust: add a README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44114
diff changeset
   114
It is possible to build without ``--release``, but it is not
e1b8b4e4f496 rust: add a README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44114
diff changeset
   115
recommended if performance is of any interest: there can be an order
e1b8b4e4f496 rust: add a README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44114
diff changeset
   116
of magnitude of degradation when removing ``--release``.
e1b8b4e4f496 rust: add a README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44114
diff changeset
   117
e1b8b4e4f496 rust: add a README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44114
diff changeset
   118
For faster builds, you may want to skip code generation::
e1b8b4e4f496 rust: add a README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44114
diff changeset
   119
e1b8b4e4f496 rust: add a README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44114
diff changeset
   120
  $ cargo check
e1b8b4e4f496 rust: add a README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44114
diff changeset
   121
44549
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
   122
For even faster typing::
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
   123
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
   124
  $ cargo c
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
   125
44115
e1b8b4e4f496 rust: add a README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44114
diff changeset
   126
You can run only the rust-specific tests (as opposed to tests of
e1b8b4e4f496 rust: add a README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44114
diff changeset
   127
mercurial as a whole) with::
e1b8b4e4f496 rust: add a README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44114
diff changeset
   128
e1b8b4e4f496 rust: add a README
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44114
diff changeset
   129
  $ cargo test --all
44549
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
   130
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
   131
Formatting the code
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
   132
-------------------
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
   133
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
   134
We use ``rustfmt`` to keep the code formatted at all times. For now, we are
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
   135
using the nightly version because it has been stable enough and provides
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
   136
comment folding.
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
   137
50386
498155b0ba41 rust-readme: mentioned that format check is enforced by CI
Georges Racinet <georges.racinet@octobus.net>
parents: 50385
diff changeset
   138
Our CI enforces that the code does not need reformatting. Before
498155b0ba41 rust-readme: mentioned that format check is enforced by CI
Georges Racinet <georges.racinet@octobus.net>
parents: 50385
diff changeset
   139
submitting your changes, please format the entire Rust workspace by running::
498155b0ba41 rust-readme: mentioned that format check is enforced by CI
Georges Racinet <georges.racinet@octobus.net>
parents: 50385
diff changeset
   140
44549
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
   141
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
   142
  $ cargo +nightly fmt
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
   143
47f8c741df0f rust: update the README with more up-to-date and thorough information
Raphaël Gomès <rgomes@octobus.net>
parents: 44115
diff changeset
   144
This requires you to have the nightly toolchain installed.
50385
53f039ed6f20 rust-readme: mentioning clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50384
diff changeset
   145
53f039ed6f20 rust-readme: mentioning clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50384
diff changeset
   146
Linting: code sanity
53f039ed6f20 rust-readme: mentioning clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50384
diff changeset
   147
--------------------
53f039ed6f20 rust-readme: mentioning clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50384
diff changeset
   148
53f039ed6f20 rust-readme: mentioning clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50384
diff changeset
   149
We're using `Clippy`_, the standard code diagnosis tool of the Rust
53f039ed6f20 rust-readme: mentioning clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50384
diff changeset
   150
community.
53f039ed6f20 rust-readme: mentioning clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50384
diff changeset
   151
53f039ed6f20 rust-readme: mentioning clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50384
diff changeset
   152
Our CI enforces that the code is free of Clippy warnings, so you might
53f039ed6f20 rust-readme: mentioning clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50384
diff changeset
   153
want to run it on your side before submitting your changes. Simply do::
53f039ed6f20 rust-readme: mentioning clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50384
diff changeset
   154
53f039ed6f20 rust-readme: mentioning clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50384
diff changeset
   155
  % cargo clippy
53f039ed6f20 rust-readme: mentioning clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50384
diff changeset
   156
53f039ed6f20 rust-readme: mentioning clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50384
diff changeset
   157
from the top of the Rust workspace. Clippy is part of the default
53f039ed6f20 rust-readme: mentioning clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50384
diff changeset
   158
``rustup`` install, so it should work right away. In case it would
53f039ed6f20 rust-readme: mentioning clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50384
diff changeset
   159
not, you can install it with ``rustup component add``.
53f039ed6f20 rust-readme: mentioning clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50384
diff changeset
   160
53f039ed6f20 rust-readme: mentioning clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50384
diff changeset
   161
53f039ed6f20 rust-readme: mentioning clippy
Georges Racinet <georges.racinet@octobus.net>
parents: 50384
diff changeset
   162
.. _Clippy: https://doc.rust-lang.org/stable/clippy/