From d8c369ef4d05084e9997f56658e30992b8f8b458 Mon Sep 17 00:00:00 2001 From: Anders Eknert Date: Tue, 3 Sep 2024 15:48:55 +0200 Subject: [PATCH] Docs: Document fixing issues, project roots, and new features This is a follow-up PR to #1035, documenting the new capabilities of Regal added there Signed-off-by: Anders Eknert --- README.md | 58 +++++++++++++++- docs/assets/lsp/code_action_fix.png | Bin 0 -> 36943 bytes docs/assets/lsp/code_action_show.png | Bin 0 -> 44967 bytes docs/fixing.md | 99 ++++++++++++++++++++++++--- docs/language-server.md | 1 + 5 files changed, 146 insertions(+), 12 deletions(-) create mode 100644 docs/assets/lsp/code_action_fix.png create mode 100644 docs/assets/lsp/code_action_show.png diff --git a/README.md b/README.md index 822a3d81..47a9a69c 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,19 @@ [![Build Status](https://github.com/styrainc/regal/workflows/Build/badge.svg?branch=main)](https://github.com/styrainc/regal/actions) ![OPA v0.68.0](https://openpolicyagent.org/badge/v0.68.0) -Regal is a linter and language server for [Rego](https://www.openpolicyagent.org/docs/latest/policy-language/), helping -you write better policies and have fun while doing it! +**Rego** let's you write **rules**. **Regal** let's you **rule Rego**! + +The OPA community's favorite development tool for Open Policy Agent and Rego. Regal is a linter, a language server and +a debugger implementation for [Rego](https://www.openpolicyagent.org/docs/latest/policy-language/), with the goal of +making your policy development experience: + +- **Educational**: Learn from your mistakes +- **Secure**: Find bugs and potential issues in your policies before they reach production +- **Uniform**: Enforce best practices and coding style across your team or organization +- **Fun!**: + + +TODO: UPDATE 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 literal 0 HcmV?d00001 diff --git a/docs/assets/lsp/code_action_show.png b/docs/assets/lsp/code_action_show.png new file mode 100644 index 0000000000000000000000000000000000000000..9942fe6234a6a5e3976f6182c46a2e5441b10206 GIT binary patch literal 44967 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 BAeR6D literal 0 HcmV?d00001 diff --git a/docs/fixing.md b/docs/fixing.md index c2bfc483..82fb8aba 100644 --- a/docs/fixing.md +++ b/docs/fixing.md @@ -1,15 +1,18 @@ # Fixing Violations -For each violation Regal is able to detect, there is a documentation page -explaining the issue in detail and how to fix it. For example, here's the one for -the [`prefer-some-in-iteration`](/regal/rules/style/prefer-some-in-iteration) rule. +For each violation Regal is able to detect, there is a documentation page explaining the issue in detail and how to fix +it. For example, here's the one for the [`prefer-some-in-iteration`](/regal/rules/style/prefer-some-in-iteration) rule. -Some rules are automatically fixable, meaning that Regal can fix the violation -for you. To automatically fix all supported violations, run: +Some rules are **automatically** fixable, meaning that Regal can fix the violation for you. Note that while most fixes +will make minor changes to the code, some fixes make more significant modifications. As an example, the +[directory-package-mismatch](https://docs.styra.com/regal/rules/idiomatic/directory-package-mismatch) fix will +automatically move a file to its idiomatic location based on the package path declared in the file. -```shell -regal fix [path [...]] [flags] -``` +:::tip +Before you make any automated fixes, make sure to commit any other changes you may have done in your project! That way +you can easily revert the changes if anything goes wrong, and this allows you to review the diff before committing the +fixes. +::: Currently, the following rules are automatically fixable: @@ -17,10 +20,86 @@ Currently, the following rules are automatically fixable: - [use-rego-v1](/regal/rules/imports/use-rego-v1) - [use-assignment-operator](/regal/rules/style/use-assignment-operator) - [no-whitespace-comment](/regal/rules/style/no-whitespace-comment) +- [directory-package-mismatch](https://docs.styra.com/regal/rules/idiomatic/directory-package-mismatch) + +So, how do you go on about automatically fixing reported violations? + +## The `regal fix` Command + +The first method is to use `regal fix` from the command line. This command can be seen as the remediating counterpart +to `regal lint`, and most configuration options are the same. For example, a linter rule configured to be ignored by +the linter will also be ignored by the fixer. Typing `regal fix --help` will show you the available options, as well +as all the supported "fixers" for your version of Regal. Lets's see what automatically fixing violations looks like! + +**Example**: fixing all files in the `bundle` directory: + +```shell +> regal fix bundle +3 fixes applied: +In project root: /Users/john/projects/authz/bundle + +lib/roles.rego: +- use-rego-v1 + +policy.rego -> main/policy.rego: +- directory-package-mismatch +- no-whitespace-comment +``` + +In the example above, Regal made fixes corresponding to the linter rules `use-rego-v1`, `directory-package-mismatch`, +and `no-whitespace-comment` in `lib/roles.rego` and `policy.rego`. While the number of fixes applied was reported as 3, +the number of _violations_ fixed could of course have been higher, as e.g. the `no-whitespace-comment` rule might have +been violated in multiple places in `policy.rego`. Note also how one of the fixes (`directory-package-mismatch`) +involved **moving** `policy.rego` to `main/policy.rego`, as that rule requires the file to be in a directory structure +matching its package path (`package main`). + +### Project Roots + +All paths are relative to its closest **project root**, as reported in the second line of the output. Most policy +projects will likely only have one "root", which is the workspace directory itself. More complex projects may however +host multiple roots inside the workspace, and defining these roots — either by configuration, or by `.manifest` files — +will in some cases (like the previously mentioned `directory-package-mismatch` fix) help Regal better apply the correct +fixes. See the documentation on [project roots](https://docs.styra.com/regal#project-roots) for more information. + +### Dry Run + +Using the `--dry-run` flag is a great way to see what changes will be made without actually applying them. Following our +example from above, adding the `--dry-run` flag to `regal fix bundle` would have told us beforehand what changes we +should expect to see. Make it a habit to dry-run your fixes before applying them, and make sure you've commited any +other changes before running the fixer! + +## Fixing Violations in Editors + +In addition to the `regal fix` command, users integratiing Regal with their editors can fix violations directly as +they are reported in the file being edited. This is done by means of Code Actions, which commonly displays a lightbulb +icon next to where a violation occurs. Clicking on the lightbulb will show a list of available actions, which in Regal's +case maps directly to the available fix for the violation reported (if any). + +Example of code action in VS Code, where available fixes can be listed either by clicking the lightbulb icon to the +right, or by clicking "Quick Fix..." in the tooltip window: + +Screenshot of code action displayed in VS Code + +Example of suggested Code Action for the +[use-assignment-operator](https://docs.styra.com/regal/rules/style/use-assignment-operator) rule. Click to fix! + +Screenshot of code action fix suggestion displayed in VS Code + +### Limitations + +Compared to `regal fix`, automatically fixing violations in editors has some limitations: + +- Normally works on one file at a time, not entire directories +- No ability to dry-run a fix, but on the other hand, the editor's **Undo** feature will let you easily revert any + changes made. :::tip -Need to fix individual violations? Checkout the editors Regal supports -[here](/regal/editor-support). +If you're curious about using Regal to fix problems directly in your editor, see the docs on editor support +[here](/regal/editor-support) to learn more! ::: ## Community diff --git a/docs/language-server.md b/docs/language-server.md index d1026a26..0b04bf69 100644 --- a/docs/language-server.md +++ b/docs/language-server.md @@ -137,6 +137,7 @@ Regal currently provides quick fix code actions for the following linter rules: - [use-rego-v1](https://docs.styra.com/regal/rules/imports/use-rego-v1) - [use-assignment-operator](https://docs.styra.com/regal/rules/style/use-assignment-operator) - [no-whitespace-comment](https://docs.styra.com/regal/rules/style/no-whitespace-comment) +- [directory-package-mismatch](https://docs.styra.com/regal/rules/idiomatic/directory-package-mismatch) ### Code lenses (Evaluation)