Skip to main content

Modelica Code Formatter

Project description

mofmt - Modelica code formatter

Mofmt is a code formatter for Modelica language. It aims to enhance readability and provide style constistency across different Modelica projects.

This is initial version of this formatter. Although functionality is more or less finished, it is highly probable that it can exhibit buggy behavior. Better double-check changed files.

Code style applied by the mofmt is described in code-style.md.

Installation and usage

Installation

Mofmt can be installed from PYPI:

pip install mofmt

On top of that, repo contains a necessary pre-commit-hooks.yaml file, so if you are using git, you can delegate running mofmt to pre-commit framework.

Usage

mofmt takes one kind of argument - path that points to Modelica source file or directory that is supposed to contain such files. mofmt can accept multiple such arguments.

mofmt PATH ...

Features and limitations

Vertical spacing and grouping

Mofmt aims to ensure that Modelica code is vertically grouped and indented in a intuitive way that additionally allows you to fold/unfold specific sections in your text editor. Yet it will try to preserve single blank lines that you have placed manually, unless they were placed in places that mofmt considers prohibited.

Comments

Modelica language specification allows you to place comments between any lexical units, but at least some software, like Dymola, doesn't respect that and displace your comments if it feels like it. Mofmt tries to avoid that (but bugs may happen!). Both comments and whitespaces between them are preserved. Additionally, mofmt preceeds your inline comments with a single space to enhance readability.

Line wrapping

Mofmt doesn't have a notion of maximum line length and doesn't wrap lines automatically. This is a deliberate choice, for many expressions in Modelica are written in a way that resembles textbook formulas. Such formulas contain terms that have a specific meaning and probably are kept on the same line by Modelica developers. Any (reasonably simple) algorithm would probably be too stupid for that, so there is no wrapping algorithm in mofmt. Instead, it will respect your wrapping inside expressions (provided you wrapped at some operator):

Q_flow = alpha * surfaceArea *
(T_a - T_b);

and only adjust it slightly:

Q_flow = alpha * surfaceArea
  * (T_a - T_b);

If wrap is placed inside function call, array etc.:

cp = specificHeat_pT(p = p, T = temperature_ph(p = p,
h = h));

mofmt will ensure that the whole argument list is formatted consistently, including nested calls:

cp = specificHeat_pT(
  p = p,
  T = temperature_ph(
    p = p,
    h = h));

TODO

  • improve parsing performance
  • (maybe) include HTML pretty-printer

License

MIT

Authors

Eryk Mroczek: mroczek.eryk@gmail.com

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mofmt-0.2.2rc1.tar.gz (72.5 kB view details)

Uploaded Source

Built Distribution

mofmt-0.2.2rc1-py3-none-any.whl (77.4 kB view details)

Uploaded Python 3

File details

Details for the file mofmt-0.2.2rc1.tar.gz.

File metadata

  • Download URL: mofmt-0.2.2rc1.tar.gz
  • Upload date:
  • Size: 72.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.1 CPython/3.11.2 Windows/10

File hashes

Hashes for mofmt-0.2.2rc1.tar.gz
Algorithm Hash digest
SHA256 40b8de35bb01ec6b40f7ad0e5c001a2a532db4918dba654f4f89b7e683fe12b0
MD5 c1e2c2343f041de4c61d016ad406dcb8
BLAKE2b-256 c813df76dc487af4c6e35b61cde17d639ed78fe78edbe55d6cc4d549236e2013

See more details on using hashes here.

File details

Details for the file mofmt-0.2.2rc1-py3-none-any.whl.

File metadata

  • Download URL: mofmt-0.2.2rc1-py3-none-any.whl
  • Upload date:
  • Size: 77.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.1 CPython/3.11.2 Windows/10

File hashes

Hashes for mofmt-0.2.2rc1-py3-none-any.whl
Algorithm Hash digest
SHA256 5c126dc720cb8670191969b34ebdbad3ce0af899928b26e8555608f5dd0885e8
MD5 da3b1fc93537a898a5dd242ee156492a
BLAKE2b-256 6dc9c764055384f556015a3bef8514a6210406e5d71d1e449c913b1b2694b5d4

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page