{"id":13681558,"url":"https://github.com/kowainik/stan","last_synced_at":"2025-05-14T15:06:09.423Z","repository":{"id":37743730,"uuid":"142279909","full_name":"kowainik/stan","owner":"kowainik","description":"🕵️ Haskell STatic ANalyser","archived":false,"fork":false,"pushed_at":"2025-01-20T11:55:55.000Z","size":572,"stargazers_count":583,"open_issues_count":84,"forks_count":53,"subscribers_count":14,"default_branch":"main","last_synced_at":"2025-05-10T07:42:40.923Z","etag":null,"topics":["analysis","ghc","hacktoberfest","haskell","hie","static-analyzer"],"latest_commit_sha":null,"homepage":"https://kowainik.github.io/projects/stan","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kowainik.png","metadata":{"funding":{"ko_fi":"kowainik","github":["vrom911"]},"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-07-25T09:43:10.000Z","updated_at":"2025-05-06T07:34:36.000Z","dependencies_parsed_at":"2023-10-15T18:13:46.336Z","dependency_job_id":"14d1cca5-df32-42cc-8013-642a92bd8c94","html_url":"https://github.com/kowainik/stan","commit_stats":{"total_commits":236,"total_committers":14,"mean_commits":"16.857142857142858","dds":0.5805084745762712,"last_synced_commit":"72dda7c484ceb5313d561560ada5b05f7db4de63"},"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kowainik%2Fstan","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kowainik%2Fstan/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kowainik%2Fstan/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kowainik%2Fstan/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kowainik","download_url":"https://codeload.github.com/kowainik/stan/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254169016,"owners_count":22026207,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["analysis","ghc","hacktoberfest","haskell","hie","static-analyzer"],"created_at":"2024-08-02T13:01:32.271Z","updated_at":"2025-05-14T15:06:09.397Z","avatar_url":"https://github.com/kowainik.png","language":"Haskell","funding_links":["https://ko-fi.com/kowainik","https://github.com/sponsors/vrom911"],"categories":["Haskell"],"sub_categories":[],"readme":"# Stan\n\n\u003cp align=\"center\"\u003e\u003cimg alt=\"Stan Logo\" src=\"https://user-images.githubusercontent.com/8126674/83521583-59383080-a4d7-11ea-8d9e-33be4677ecb3.png\" width=300px height=300px/\u003e\u003c/p\u003e\n\n[![GitHub CI](https://github.com/kowainik/stan/workflows/CI/badge.svg)](https://github.com/kowainik/stan/actions)\n[![Hackage](https://img.shields.io/hackage/v/stan.svg)](https://hackage.haskell.org/package/stan)\n[![MPL-2.0 license](https://img.shields.io/badge/license-MPL--2.0-blue.svg)](https://github.com/kowainik/stan/blob/main/LICENSE)\n\nStan is a Haskell **ST**atic **AN**alysis tool.\n\n\u003e ⚠️ Note: Stan is in the beta phase. The API is the subject to be\n\u003e changed if required by our needs ⚠️\n\n## Table of Contents\n\n * [What this tool is about](#what-this-tool-is-about)\n * [Goals](#goals)\n * [Features](#features)\n * [How it works](#how-it-works)\n * [Installation instructions](#installation-instructions)\n    * [Using Cabal](#using-cabal)\n    * [Using Stack](#using-stack)\n    * [Hackage](#hackage)\n    * [Homebrew](#homebrew)\n    * [Ubuntu PPA](#ubuntu-ppa)\n    * [Download binary](#download-binary)\n * [Usage instructions](#usage-instructions)\n    * [General configuration info](#general-configuration-info)\n    * [TOML configurations](#toml-configurations)\n    * [Command-line Interface](#command-line-interface)\n       * [Main command](#main-command)\n       * [Inspections](#inspections)\n       * [Converting between TOML and CLI configurations](#converting-between-toml-and-cli-configurations)\n * [Other tools](#other-tools)\n * [Roadmap](#roadmap)\n * [Users](#users)\n * [Links to Wiki](#links-to-wiki)\n\n## What this tool is about\n\n[[Back to the Table of Contents] ↑](#table-of-contents)\n\nStan is a command-line tool for analysing Haskell projects.\nIt discovers which parts of the code can potentially be improved,\nand offers suggestions on how to do so.\nStan is searching for not only\nperformance or error-prone code pieces, but it also can help with\nestablishing and applying best-practices from the whole Haskell\necosystem.\n\nAlthough Haskell is a statically typed language, not all properties\ncan be encoded in types. Even though GHC is quite a powerful compiler,\nit tries to be library-agnostic and provide only language-specific\nsuggestions, while Stan uses the knowledge about the current state of\nthe ecosystem and commonly used libraries.\n\nYou will find Stan helpful if you enjoy writing in Haskell, but want\nmore guarantees from your code, not provided by the Haskell type\nsystem or GHC.\n\nFor a crash course to Stan, watch the talk about Stan, presented by\nVeronika Romashkina and Dmitrii Kovanikov at the Haskell Love\nconference.\n\n[![Stan – Haskell Static Analyser](https://img.youtube.com/vi/wb5PLv6-e6I/0.jpg)](https://www.youtube.com/watch?v=wb5PLv6-e6I)\n\n## Goals\n\n[[Back to the Table of Contents] ↑](#table-of-contents)\n\nStan design and implementation is driven by the following goals:\n\n- Catch common errors, anti-patterns, performance issues\n- Provide meaningful insights on the projects generally\n- Point out potential bugs and weak points in the programs flow for\n  users, so they can carefully evaluate each problem with the code\n- Help beginners to learn best practices in an easy and informative way\n- Generate the report that can be used as a proof of code quality\n- Create best in the class and flexible enough interface for usage\n  (including e.g. opt-in and opt-out inspections)\n\n## Features\n\n[[Back to the Table of Contents] ↑](#table-of-contents)\n\nStan is a configurable CLI tool. Besides the main feature of analysing\nHaskell projects statically, Stan has a list of features that make it\nunique, easy to use and flexible to configure:\n\n- Pretty analysis results, including both HTML and terminal reports\n- Suggestions and possible solutions for fixing the existing problems\n- Analysing not only Haskell source code, but also information from\n  the `.cabal` files\n- Flexible runtime configuration via [TOML][toml] and CLI\n\nYou can see an example of Stan HTML report hosted online here:\n\n* [Stan Report Example](https://kowainik.github.io/projects/stan/report)\n\nThe below example of the terminal output gives you the understanding\nof what sorts of analysis you can expect from Stan:\n\n![Stan terminal example](https://user-images.githubusercontent.com/4276606/85208720-89326100-b32a-11ea-94fd-4aa149626b74.png)\n\n## How it works\n\n[[Back to the Table of Contents] ↑](#table-of-contents)\n\nStan analysis is based on the [HIE files][hie] — compile-time\ninformation about Haskell source code gathered and recorded by\nGHC. The HIE files contain the Haskell AST, detailed information about\neach identifier and types of all expressions and sub-expressions. GHC\ndoes a huge amount of work when compiling the Haskell projects, and\nStan takes advantage of this feature to avoid duplicating the work and\nfocus more on the unique features.\n\nTo analyse HIE files easily, we developed an eDSL for defining AST and\nType patterns based on the\n[_final tagless_](http://okmij.org/ftp/tagless-final/course/lecture.pdf)\napproach. Stan algorithm traverses HIE AST for each HIE file in the\nproject, and matches every AST node with the given pattern to find\npotential improvement areas in the code.\n\nEach Stan analysis check is represented by the __inspection__ with the\nunique ID. Each inspection has a name, description, __severity__, list\nof __categories__, pattern for matching relevant parts of source code\nand possible solutions to the problem.\n\nWhen an inspection is casted on the project, it produces zero or more\n__observations__ —.\nYou can think of an _observation_ as a pair of an inspection and\na piece of source code where this inspection was triggered. Each\nobservation is assigned an unique stable ID depending on the source\nlocation, so you can refer to them later or ignore.\n\nYou can disable inspections or enable them only in particular modules\nusing __check__ — rules for controlling which inspections to run and\nwhere. Each check has a __type__ (`include` or `exclude`), __filter__\n(by inspection id, category, severity, etc.) and __scope__ (file,\ndirectory, everything). Checks can be specified using either TOML of\nCLI interfaces. By default, Stan analyses all source files using all\nimplemented inspections.\n\nIf you want to understand Stan terminology better, refer to the\nglossary:\n\n * [Stan Wiki page: Glossary][glossary]\n\n## Installation instructions\n\n[[Back to the Table of Contents] ↑](#table-of-contents)\n\nStan takes advantage of the\n[GHC API](http://hackage.haskell.org/package/ghc) to provide its\nanalysis. Because of this, Stan and the analysed project need to be\nbuilt with the same GHC version (for more details see\n[#178](https://github.com/kowainik/stan/issues/178)). That is why the\neasiest and most robust way to install Stan is to build it from\nsources on your machine.\n\n\u003e __Note:__ Stan is compatible with the GHC versions ⩾ 8.8\n\n### Using Cabal\n\n[[Back to the Table of Contents] ↑](#table-of-contents)\n\nBelow are the steps to install Stan using the Cabal build tool.\n\n\u003e You need to have [Cabal ⩾ 2.4](https://www.haskell.org/cabal/)\n\nFirst, you need to clone the repository:\n\n```shell\n$ git clone https://github.com/kowainik/stan.git\n$ cd stan\n```\n\nThen, you need to build it using Cabal:\n\n```shell\n$ cabal v2-build exe:stan\n```\n\nFinally, you can copy the resulting executable under the desired\nlocation (that should be under the PATH environment variable), like\nso:\n\n```shell\n$ cp \"$(cabal v2-exec --verbose=0 --offline sh -- -c 'command -v stan')\" ~/.local/bin/stan\n```\n\n### Using Stack\n\n[[Back to the Table of Contents] ↑](#table-of-contents)\n\nBelow are the steps to install Stan from its repository using the Stack tool.\n\n\u003e You need to have [Stack ⩾ 2.1.3](http://haskellstack.org)\n\nFirst, you need to clone the repository and change to the `stan` directory:\n\n```shell\n$ git clone https://github.com/kowainik/stan.git\n$ cd stan\n```\n\nThen, using Stack, you need to build the package and copy the executable to the\ndesired location (typically one on your PATH). If Stack's `--local-bin-path`\noption is omitted, Stack will copy the built executable to a\n[default location](https://docs.haskellstack.org/en/stable/yaml_configuration/#local-bin-path):\n\n```shell\n$ stack --local-bin-path=\u003cpath_to_desired_location\u003e install\n```\n\nStack's build, including the version of GHC used, will be configured by a\n`stack.yaml` file provided by the repository or the package from Hackage. If you\nwish to build Stan with a different version of GHC than that assumed, you will\nneed to edit the configuration accordingly.\n\n### Hackage\n\n[[Back to the Table of Contents] ↑](#table-of-contents)\n\nStan is available on Hackage.\n\nUsing the Cabal build tool, you can install the tool from there as well:\n\n```shell\n$ cabal v2-install stan --install-method=copy --overwrite-policy=always\n```\n\nYou can also choose with which GHC version you want to have Stan installed, and\noptionally add some suffix to the executable name:\n\n```shell\n$ cabal v2-install stan \\\n    -w ghc-8.10.1 \\\n    --install-method=copy \\\n    --overwrite-policy=always \\\n    --program-suffix=-8.10.1\n```\n\nUsing the Stack tool, you can also install a version of Stan from Hackage:\n\nFirst, you need to unpack the package locally and change to the package's\ndirectory. The following example assumes `stan-0.1.0.1`:\n\n```shell\n$ stack unpack stan-0.1.0.1 # Specify 'stan' for the most recent version\n$ cd stan-0.1.0.1 # The directory is named after the package version\n```\n\nThen, using Stack, you need to build the package and copy the executable to the\ndesired location (as above, for the repository example):\n\n```shell\n$ stack --local-bin-path=\u003cpath_to_desired_location\u003e install\n```\n\n### Homebrew\n\n[[Back to the Table of Contents] ↑](#table-of-contents)\n\nIf you are on MacOS, you can get Stan using Homebrew Kowainik's Tap.\n\nYou need to run the following command for that:\n\n```shell\n$ brew install kowainik/tap/stan\n```\n\n\u003e NOTE: Homebrew installs the Stan version build with the latest supported GHC\n\u003e version. This means that this version of Stan is working with the project with\n\u003e the same GHC version due to the GHC issues described above.\n\n### Ubuntu PPA\n\n[[Back to the Table of Contents] ↑](#table-of-contents)\n\nIf you are on Ubuntu, you can get Stan using\n[Kowainik's PPA](https://launchpad.net/~kowainik/+archive/ubuntu/stan).\n\nYou need to run the following commands for that:\n\n```shell\n$ sudo add-apt-repository ppa:kowainik/stan\n$ sudo apt update\n$ sudo apt install stan\n```\n\n\u003e NOTE: `apt-get` installs the Stan version build with the latest supported GHC\n\u003e version. This means that this version of Stan is working with the project with\n\u003e the same GHC version due to the GHC issues described above.\n\n### Download binary\n\n[[Back to the Table of Contents] ↑](#table-of-contents)\n\nYou can download binary directly\n[from GitHub releases](https://github.com/kowainik/stan/releases/latest).\n\nAfter downloading binary, make it executable and copy it under\nconvenient location, e.g.:\n\n```shell\n$ chmod +x stan-0.0.1.0-Linux-ghc-8.10.1\n$ mv stan-0.0.1.0-Linux-ghc-8.10.1 ~/.local/bin/stan\n```\n\n\u003e NOTE: you need to download binary for your specific OS and\n\u003e specicific GHC version you use due to the GHC issues described above.\n\n## Usage instructions\n\n[[Back to the Table of Contents] ↑](#table-of-contents)\n\nStan works with the [HIE files][hie] to analyse Haskell\nprojects. Therefore, Stan requires users to generate HIE files in\nadvance. Fortunately, it is straightforward to satisfy this\nnecessity. To produce HIE files, add the following GHC options in your\nproject's `.cabal` file to each stanza you want to analyse:\n\n```haskell\n    ghc-options:       -fwrite-ide-info\n                       -hiedir=.hie\n```\n\n\u003e _Recommendation_: you can use the [common\n\u003e stanzas](https://vrom911.github.io/blog/common-stanzas) feature to\n\u003e write the above options only once and enable them in each stanza\n\u003e easily.\n\n\u003e _Note:_ here we recommend generating the HIE files into `.hie/`\n\u003e folder. As it is the recommendation only, you can specify your own\n\u003e folder as well. But then you will need to run `stan` using the\n\u003e `--hiedir` option with the specified path to your `hie` folder.\n\nAfter creating HIE files, you can just run Stan on the project:\n\n```shell\n$ stan\n```\n\nto see all found suggestions in your terminal.\n\nIf you want to see a more detailed information in a more structured\nway, you can generate an HTML report (to the `stan.html` file) using\nthe following command:\n\n```shell\n$ stan report\n```\n\nStan strives to implement the convenient interface, so you can use the\ntool without configuring a lot in advance. However, the tool also\nprovides various ways to set it up in the way to be the most efficient\nwith your particular use case.\n\n### General configuration info\n\n[[Back to the Table of Contents] ↑](#table-of-contents)\n\nStan's work can be configured from the multiple sources (in increasing\norder of priority):\n\n1. Default settings (hard-coded in the library — includes __no__\n   custom settings)\n2. Environment variables\n3. [TOML][toml] file configuration\n4. CLI arguments\n\nStan runtime settings have many parts, and each of them can come from\ndifferent configuration sources. If some option is specified through\nmultiple sources, the most prioritized one will be used. In addition,\nStan helps to understand its own configuration, so it outputs detailed\ninformation about each part of the config, what configuration settings\nwere used and how they were set.\n\n![Configuration explanation](https://user-images.githubusercontent.com/4276606/85208889-bb908e00-b32b-11ea-8256-c576a33cbf38.png)\n\n### TOML configurations\n\n[[Back to the Table of Contents] ↑](#table-of-contents)\n\nStan supports [TOML][toml] runtime configuration in order to customize\nthe work of the tool based on the user's individual requirements. You\ncan use the TOML configuration to disable some inspections, enable\nthem only in particular Haskell modules, ignore some observations or\ncompletely remove some files from the analysis.\n\nSpecifically, you can use the following variables to set up custom configurations with TOML:\n\n| Variable | Description | Examples |\n|----------|-------------|----------|\n| `check` | Set up rules to control the set of inspections per scope. | `check = [{type = \"Exclude\", id = \"STAN-0101\", scope = \"all\"}]`            |\n| `remove` | Remove some files from the analysis completely. Stan won't be run in the specified scope at all. | `remove = [ {file = \"src/File.hs\"}, {directory = \"folder/\"} ]` |\n| `ignore` | Ignore specific observation that was found in your project   | `ignore = [{ id = \"OBS-STAN-0001-YrzpQi-11:42\" }]` |\n\nSee [Haddock documentation](http://hackage.haskell.org/package/stan-0.0.0.0/docs/Stan-Config.html#g:5)\nfor explanation of how the TOML\nconfiguration works and examples of the different use cases.\n\nIn case you have a number of TOML files locally, the following rules\ndescribe how Stan decides which TOML configuration file to use:\n\n* By default, Stan tries to read settings from the local `.stan.toml`\n  file in the current directory. So, if you want to adjust the default\n  Stan settings with some custom rules, create a `.stan.toml` file in\n  the root of your Haskell project.\n* If the local `.stan.toml` file is not found, Stan tries to read the\n  global `~/.stan.toml` file. Having a global Stan configuration can\n  be convenient, if you work on several projects and want to have the\n  same custom settings by default for all of them.\n* If you don't have any of the default configuration files, it is\n  still okay. Stan will use its own default hard-coded settings.\n* You can specify a path to a specific configuration file using the\n  `--config-file` option. This custom file will be used in addition to\n  the default TOML config.\n* If you don't want to use the default TOML configuration, pass the\n  `--no-default` flag or use the `STAN_USE_DEFAULT_CONFIG=False`\n  environment variable.\n\n### Command-line Interface\n\n[[Back to the Table of Contents] ↑](#table-of-contents)\n\nThis section describes what is possible to achieve with the Stan\nCLI. If you have already installed the analyser, you can use\n\n```shell\n$ stan --help\n```\n\nto get the short information of all possible commands and options in\nyour terminal.\n\n#### Main command\n\n[[Back to the Table of Contents] ↑](#table-of-contents)\n\nThe main command is the one that actually would analyse the Haskell\ncodebase. There are plenty of configurations and options you can tune\nfor each run (similarly to the TOML configurations):\n\n- Specify the [HIE files][hie] folder (will use `.hie/` otherwise)\n- Specify `.cabal` files of your project (will lookup automatically\n  otherwise)\n- Turn on/off the usage of the default `.stan.toml` configuration file\n- Specify the [TOML][toml] configuration file to use (will be used\n  additionally to default TOML file if applicable)\n- Filter in or out specific files, directories, inspections,\n  categories or severities\n- Generate the HTML report file\n- Set up the output verbosity\n- Choose to have machine readable JSON output instead\n\nHere is the high-level explanation of the available sub-commands:\n\n| Sub-command | Description | Examples |\n|-------------|-------------|----------|\n| `check` | Set up rules to control the set of inspections per scope. | `stan check --exclude --category=Infinity --scope-all check --include --id \"STAN-0101\" --file=src/File.hs` |\n| `remove` | Remove some files from the analysis completely. Stan won't be run in the specified scope at all. | `stan remove --file=src/File.hs remove --directory=folder/`         |\n| `ignore` | Ignore specific observation that was found in your project   | `stan ignore --id \"OBS-STAN-0001-YrzpQi-11:42\"`          |\n\nMore precisely the commands and options are described in here:\n\n```\nstan\n    [REPORT]\n    [   CHECKs {[TYPE option] [FILTER option] [SCOPE option]}\n      | REMOVEs {SCOPE option}\n      | IGNOREs {ID option}\n    ]\n    [--hiedir=DIR_PATH]\n    [--cabal-file-path=FILE_PATHs]\n    [--config-file=FILE_PATH]\n    [--no-default]\n    [-s|--short]\n    [--hide-solution]\n    [--json-output]\n    [-h|--help]\n    [-v|--version]\n\nDescription:\n  CHECKs           Command to Specify the list of checks\n  REMOVEs          Command to Specify scope to be removed\n  IGNOREs          Command to Specify the list of what needs to be ignored\n  REPORT           Command to generate an HTML Report\n  --hiedir=DIR_PATH        Relative path to the directory with HIE\n                           files (default: .hie)\n  --cabal-file-path=FILE_PATHs\n                           Relative path to the .cabal file (can specify many of this option)\n  --config-file=FILE_PATH  Relative path to the .toml configurations file\n  --no-default             Ignore local .stan.toml configuration file\n  -s,--short               Hide verbose output information for observations\n  --hide-solution          Hide verbose solution information for observations\n  --json-output            Output the machine-readable output in JSON format instead\n  -h,--help                Show this help text\n  -v,--version             Show Stan's version\n\nSub-commands options:\n\n\n  TYPE:\n    --include                Include check\n    --exclude                Exclude check\n  FILTER:\n    --id=INSPECTION_ID       Inspection ID to be used\n    --severity=SEVERITY      Inspection Severity to exclude or include\n    --category=CATEGORY      Inspection Category to exclude or include\n    --filter-all             Exclude or include ALL inspections\n  SCOPE:\n    --file=FILE_PATH         File to exclude or include\n    --directory=DIRECTORY_PATH\n                           Directory to exclude or include\n    --scope-all              Apply check to all files\n\nReport options:\n\n  -b,--browse              Open report in a browser\n```\n\nFor example, if you want to run Stan analysis only on a single file, generate\nthe HTML report and immediately open report in a browser, you can use\nthe following command:\n\n```shell\n$ stan check --exclude --filter-all --scope-all \\\n       check --include --filter-all --file=src/Stan/Example.hs \\\n       report --browse\n```\n\n#### Inspections\n\n[[Back to the Table of Contents] ↑](#table-of-contents)\n\nYou can find the list of all available inspections with description\nand additional information on our\n[dedicated wiki page][inspections]. However, with the tool you can get\nthis information easily by using the `inspection` command. Optionally,\nyou can see details of a particular inspection by typing the\ncorresponding inspection ID alongside. You can see more robust\ndescription of the command here:\n\n```\ninspection – Show all Inspections\n\nUsage:\n  stan inspection [INSPECTION_ID]\n\nAvailable options:\n  INSPECTION_ID            Show specific Inspection information\n  -h,--help                Show this help text\n```\n\n#### Converting between TOML and CLI configurations\n\n[[Back to the Table of Contents] ↑](#table-of-contents)\n\nIt is usually convenient to have a proper configuration file that\nsuits your project, which you can reuse each run of the Stan.\n\nBut sometimes you need to quickly run the tool with the same settings\non another machine where having such files is not possible. Or you\nwant to send the reproducible command, that anyone could execute and\nget the identical results. For these purposes, we have a special\ncommand that allows you to do so:\n\n```\ntoml-to-cli – Convert TOML configuration file into stan CLI command\n\nUsage:\n    stan toml-to-cli [--config-file=FILE_PATH]\n\nAvailable options:\n  --config-file=FILE_PATH  Relative path to the .toml configurations file\n  -h,--help                Show this help text\n```\n\nAnd for convenience you are able to use the reversed command –– `cli-to-toml`.\n\n```\ncli-to-toml – Convert CLI arguments into stan TOML configuration\n\nUsage:\n    stan cli-to-toml\n      [--config-file=FILE_PATH]\n      [   CHECKs {[TYPE option] [FILTER option] [SCOPE option]}\n        | REMOVEs {SCOPE option}\n        | IGNOREs {ID option}\n      ]\n```\n\n## Other tools\n\n[[Back to the Table of Contents] ↑](#table-of-contents)\n\n* [GHC](https://www.haskell.org/ghc/) — __Glasgow Haskell Compiler__\n\n  GHC is the most popular Haskell compiler. As it has access to all steps of the\n  code compilation, GHC can warn about different aspects of your code:\n  non-exhaustive pattern matching, unused variables, etc.\n\n  However, it is not supposed to be used as a static analysis tool. It provides\n  errors and warnings as a part of the whole compilation pipeline.\n\n* [Weeder](https://github.com/ocharles/weeder) — __Haskell dead-code analysis tool__\n\n  Weeder is a tool that analyses the code but in a very specific and limited\n  case. It helps to eliminate unreachable code in your project. Similarly to\n  Stan, the Weeder tool is also working with the HIE files to get this\n  information.\n\n* [HLint](https://github.com/ndmitchell/hlint) — __Haskell Linter Tool__\n\n  HLint is a linter tool that suggests code improvements to make code simpler.\n\n  Unlike Stan, that uses the HIE files for analysis and accesses the complete\n  compile-time info produced by GHC, HLint relies only on parsing, which has its\n  own benefits but also limits its capabilities.\n\n  Stan and HLint are complementary tools that have different scopes and goals.\n  There is no intention to duplicate HLint in Stan.\n\nTo learn more about the implementation and goals of our project, please read the\nsections above that describe the Stan project in detail.\n\n## Roadmap\n\n[[Back to the Table of Contents] ↑](#table-of-contents)\n\nOur plan for the nearest future:\n\n - [ ] Opt-in inspections\n - [ ] Custom users' inspections\n - [ ] More inspections on potential bugs and performance\n - [ ] Single-pass traverse on AST\n\nWe have much more ideas to work on.\nSee more detailed plan in the dedicated [GitHub Project page](https://github.com/kowainik/stan/projects/1).\n\n## Users\n\nStan is known to be adopted by the following companies:\n\n* A major international bank\n* [ITProTV](https://www.itpro.tv/)\n* [Soisy](https://www.soisy.it/)\n\n## Links to Wiki\n\n[[Back to the Table of Contents] ↑](#table-of-contents)\n\n* [Glossary][glossary]\n* [All inspections][inspections]\n* [For developers][development]\n* [Useful links][links]\n* [GHC issues backlog][ghc-backlog]\n\n\n[inspections]: https://github.com/kowainik/stan/wiki/All-Inspections\n[development]: https://github.com/kowainik/stan/wiki/Development\n[ghc-backlog]: https://github.com/kowainik/stan/wiki/GHC-Backlog\n[glossary]: https://github.com/kowainik/stan/wiki/Glossary\n[links]: https://github.com/kowainik/stan/wiki/Useful-links\n[hie]: https://gitlab.haskell.org/ghc/ghc/-/wikis/hie-files\n[toml]: https://github.com/toml-lang/toml\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkowainik%2Fstan","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkowainik%2Fstan","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkowainik%2Fstan/lists"}