Package: miss-hit
MATLAB Independent, Small & Safe, High Integrity Toolshttp://misshit.orgMATLAB is a popular programming language in many engineering
disciplines, intended for the fast development of prototypes. But as
we all know, prototypes make it into production all the time, so now
you're stuck. Unfortunately, there are no style checkers or "good"
static analysis tools for MATLAB. This project attempts to fill this
gap.If you have MATLAB (or MATLAB embedded in Simulink models) in your
production code and want to improve code quality then this tool-suite
is for you.Tools & DocumentationMISS_HIT comes with the following tools, all of which come with user
manuals and setup instructions:https://florianschanda.github.io/miss_hit/Style Checkermh_styleA simple coding style checker and code formatter for MATLAB or
Octave code, including MATLAB embedded inside Simulink models.Code Metricsmh_metricA simple code metric tool for MATLAB or Octave code, including
MATLAB embedded inside Simulink models.Bug findingmh_lintA simple linter for MATLAB or Octave code, including
MATLAB embedded inside Simulink models.Code/Test traceabilitymh_traceA simple tool to extrace tags from test and code to demonstrate
requirements traceability.Diff helpermh_diffA tool for diffing MATLAB code inside Simulink models. Note that
other changes (e.g. different connections) are not detected; this is
only working for embedded MATLAB.Copyright notice helpermh_copyrightA tool that can update or adjust copyright notices in bulk. Helpful
if your company changes name, or you have year ranges that need
updating.Please refer to therelease notesfor a summary of recent changes and known issues.We intend to provide more tools later, please refer to theroadmapfor more information.Installing and using MISS_HITInstallation via pip$ pip3 install --user miss_hitThis installation also adds five executable scriptsmh_style,mh_metric,mh_lint,mh_copyright, andmh_diffinto.local/bin, so please make sure that this is on yourPATH.You can also use thepython -msyntax to directly invoke the
program. This might be useful if you're on a heavily locked-down
corporate Windows environment:$ python3 -m miss_hit.mh_styleTo use MISS_HIT you just give it a set of files or directories to
process, for example:$ mh_style my_file.m
$ mh_style --process-slx my_model.slx
$ mh_style src/Configuration and setup is described in theuser manualsInstallation via pipxVery similar to the above:$ pipx install miss_hit --include-depsInstallation by checkoutIt is recommended to use pip or pipx, as that gets you the latest
stable release. However, it is possible to directly use MISS_HIT from
a checkout. MISS_HIT currently does not requireanynon-standard
python packages or libraries as dependencies. Just check out the
repository and put it on your path. That's it.The version of Python I am using is3.7but any later version should
also work. I am not using any overly fancy language features.Additional requirements for developing MISS_HITIf you want to help develop you will need Linux as the test-suite
doesn't really work on Windows. You will also need Pylint,
PyCodeStyle, Coverage, and Graphviz. Install as follows:$ apt-get install graphviz
$ pip3 install --user --upgrade pylint pycodestyle coverageFor publishing releases (to GitHub and PyPI) you will also need:$ pip3 install --user --upgrade setuptools wheel requestsChallengesThere are serious issues present in the MATLAB and Octave languages on
all levels (lexical structure, parsing, and semantics) that make it
very difficult to create any tool processing them. In fact, GitHub is
littered with incomplete attempts and buggy parsers. The usual
question is "but what about Octave?"; it is a similar language, but it
is not compatible with MATLAB. If your problem is parsing MATLAB then
the Octave parser will not help you. Even very simple statements such
asx = [1++2]mean different things (3in MATLAB, syntax error in
Octave).I havedocumented the key
issueswe've faced and how we've resolved them.Copyright & LicenseThe basic framework, style checker and code metrics tool of MISS_HIT
(everything undermiss_hit_core) are licensed under the GNU GPL
version 3 (or later) as described inLICENSE.The advanced analysis tools of MISS_HIT (everything undermiss_hit)
are licensed under the GNU Affero GPL version 3 (or later) as
described inLICENSE.AGPL.The vast majority of this work is (C) Florian Schanda. Contributions
from the following people and entities are under their copyright, with
the same license:Alina Boboc (Documentation style)Benedikt Schmid (MATLAB integration)Remi Gau (CI/CD templates)Veoneer System Software GmbH (JSON Metrics)Zenuity AB (Key parts of the lexer)Copyright of octave testsThis project includes verbatim and modified/adapted parts of the GNU
Octave testsuite undertests/parser/octave_*andtests/style/octave_annotations. These are (c) their original
authors. Each file there describes from which file they derive.Note on parser testsSome of the parser tests include code samples and documentation
snippets from the publicly available MathWorks website. An
attribution (in comment form) is always included in these cases.Note on the documentation assetsThe documentation usesfeather
iconswhich are licensed under the MIT License.