Trlc

Latest version: v2.0.0

Safety actively analyzes 688823 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 1 of 4

2.0.1dev

2.0.0

This new major release includes a number of incompatible
changes. These have been tagged in the changelog.

* [Incompatible, TRLC, LRM, API] New major version as all deprecated
features have been removed:

* The deprecated builtin function syntax `trlc:foo` has been
removed. You should now use `foo` instead.

* Support for check files has been removed. You can simply move any
checks into the rsl file.

* API support surrounding check files in the Source_Manager has been
removed.

* [Incompatible, TRLC, LRM, API] The LRM had rules that names need to
be sufficiently distinct, for example having `Foo`, `foo` or `Fo_o`
in the same namespace would not be allowed. This was previously not
implemented at all.

The rules have been strengthened to apply to all names (packages,
types, literals, objects) and are now enforced. This is also a
backwards incompatible change as it may invalidate some previously
valid `.trlc` or `.rsl` files.

* [TRLC] The `--verify` command is now supported on Windows without
the use of an external `cvc5` install, now that the Python package
for CVC5 is also available on Windows.

* [TRLC, LRM] New builtin function `oneof`. This can be used to test
if precisely one of a number of parameters is true. For example:

* [TRLC] The warning about late package declarations is no longer
issued.

* [TRLC] New command-line flag `-I` which can be used to register
include directories. You can use this to automatically parse a
minimal set of file. Normally when invoking eg `trlc foo.trlc` this
will fail, because you did not provide e.g. `foo.rsl`.

With the `-I` flag you can now automatically let the tool discover
any dependencies. When using e.g. `trlc -I . foo.trlc` the tool will
discover it also needs `foo.rsl` and maybe `potato.rsl` which you
imported in `foo.trlc`.

Especially in large projects this will be much faster than
explicitly parsing everything.

* [API] The source manager has a new function
[register_include](https://bmw-software-engineering.github.io/trlc/manual/infrastructure.html#trlc.trlc.Source_Manager.register_include)
which should be used before any `register_file` or `register_dir`
calls.

* [API] *When using includes*, the symbol table will contains packages
for every discovered package. These are indistinguisable from normal
(but empty) packages, so if you're relying on iterating over all
known packages you will find a lot of unused and empty ones now. If
the include mechanism is not used, then there is no change in
behaviour.

* [TRLC] Various performance improvements when parsing large files.

* [TRLC] Add `--version` flag that can be used to figure out the
installed TRLC version.

* [TRLC] Fix bug when creating a lexer with an empty file with
delivered file content. The lexer attempted to open the file instead
of using the empty string passed to the constructor.

* [TRLC] Fix a bug in the verifier mistranslating existential
quantifiers. This could both lead to false alarms and missed bugs.

* [TRLC] Fix a bug parsing record references of incorrect types,
instead of an ICE we now create an error message.

1.2.2

* [API] Add callbacks to the
[Source_Manager](https://bmw-software-engineering.github.io/trlc/manual/infrastructure.html#trlc.trlc.Source_Manager)
to notify clients of the parse progress.

1.2.1

* [TRLC] New minor version release due to minor API changes and major
command-line changes.

* [TRLC] When using `--verify` you can now also specify a
[CVC5](https://github.com/cvc5/cvc5) executable using
`--use-cvc5-binary`. This allows you to use the `--verify` option on
platforms where there is no CVC5 PyPI package (i.e. Windows or more
recent versions of OSX).

* [TRLC] The [PyVCG](https://pypi.org/project/PyVCG) package is now required
on all platforms. The optional dependency is now
[CVC5](https://pypi.org/project/cvc5) instead.

* [TRLC] Remove the `--lint` option. Lint messages are now enabled by
default, and `.trlc` files are processed as well. Instead there is a
`--no-lint` option which turns off the extra warnings.

* [TRLC] Add the `--skip-trlc-files` option which disables processing
of `.trlc` files. Enabling this option is equivalent to the old
`--lint` mode.

* [TRLC] Add the `--error-on-warnings` option which generates a status
code of 1 if any warning is raised.

* [TRLC] We now always print a short summary, indicating how many
files were processed and how many messages were generated. The
`--show-file-list` option still exists and still prints the complete
list of files. This summary may be suppressed with the `--brief`
option.

* [API] The
[Source_Manager](https://bmw-software-engineering.github.io/trlc/manual/infrastructure.html#trlc.trlc.Source_Manager)
has new and different constructor flags, although it can still be
constructed with no parameters.

* [API] The
[Message_Handler](https://bmw-software-engineering.github.io/trlc/manual/errors.html#trlc.errors.Message_Handler)
now uses an enumeration instead of a string to signal message
severity/kind. For normal use this is transparent, but if you
subclass the message handler then you need to deal with this. The
category (for lint messages) is now also a separate parameter
instead of being baked into the message.

* [TRLC] Please note that if you parse messages in CI, the [regex has
changed
slightly](https://github.com/bmw-software-engineering/trlc/blob/main/documentation/TUTORIAL-CI.md#parsing-the-output).

* [TRLC] Fix an issue where `--skip-trlc-files` would incorrectly
register and parse the preamble of `.trlc` files.

* [TRLC] Fix a spurious space in the summary output.

* [TRLC] Fix support for Python 3.11. The package can now be installed
without issues.

* [TRLC] Fix issue in VCG where the matches function could be
generated more than once. This was only an issue in the debug output
and was not visible to users.

1.1.10

* [TRLC] Fix missing typechecks for numeric subtypes on value
assignments. It was possible to assign an integer to a decimal
component, or the other way around. This now correctly generates an
error.

* [TRLC, LRM] You can now also write `"""foo"""` string literals. Just
like the `'''` strings, these can contain newlines.

* [TRLC, LRM] User defined checks are now not allowed to contain a
newline. However you can now provide additional information that
_can_ contain a newline. For example:

trlc
checks Requirement {
top_level == true or derived_from != null,
error "linkage incorrect",
"""You must either link this requirement to other requirements
using the derived_from attribute, or you need to set
top_level to true."""
}


Would now produce something like this:


Requirement Potato {
^^^^^^ checks-5/foo.trlc:3: check error: linkage incorrect
| You must either link this requirement to other requirements
| using the derived_from attribute, or you need to set
| top_level to true.


For more details please
[refer to the LRM](https://bmw-software-engineering.github.io/trlc/lrm-2.9.html#bnf-check_declaration).

1.1.9

* [TRLC] Add support for Python 3.11. We now support Python 3.8 up to
and including 3.11.

* [TRLC] Add new option `--no-detailed-info` which supresses the
additional information the linter may add to a message, such as
counter-examples or reasoning.

* [TRLC] The tool is now much less likely to abort on parse errors,
instead we continue where it's possible to generate more errors in
other unrelated packages and declarations. This may occasionally
generate follow-on errors that look weird, however once you fix the
earlier errors things should work out.

* [TRLC] Add new option `--no-error-recovery` which restores the old
behaviour w.r.t. error handling. With this option, every error you
see is absolutely a real error which you need to fix; but of course
there could be more errors once you fix them.

* [LRM] Mark `.check` files as a deprecated feature. You should move
your checks into the corresponding `.rsl` file. The linter also
complains about these now.

Page 1 of 4

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.