This library enables running Brakeman via Ruby LSP.
The library is in early but working stages. It has only been tested with VS Code so far.
Add ruby-lsp-brakeman
to your Gemfile
:
gem 'ruby-lsp-brakeman', require: false
Bundle install and restart the Ruby LSP server/extension to enable.
Initialization output should look like this:
![Starting Brakeman in Ruby LSP/VS Code](https://private-user-images.githubusercontent.com/75613/401427883-2cfbd42f-dfef-4488-b5b8-b5b8ce3da3cd.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk2NDM3OTUsIm5iZiI6MTczOTY0MzQ5NSwicGF0aCI6Ii83NTYxMy80MDE0Mjc4ODMtMmNmYmQ0MmYtZGZlZi00NDg4LWI1YjgtYjViOGNlM2RhM2NkLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE1VDE4MTgxNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTM0MGJmNWQ1YjUyZmYzNjY0Mzc3ZDUyYTNmZDMxOTYyM2RiNzMwOGJmOTg0NjNlM2ExZjJjNzYxN2ZiZjdkMWUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.rbm0G_z88OcTdzXfPRDLB7P84JCVsWG1Brgm2-HS49g)
Display of inline warnings on hover:
![Display of Brakeman warning](https://private-user-images.githubusercontent.com/75613/401427886-8708d0d5-0cac-4e7a-8416-1a94a91b54a5.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk2NDM3OTUsIm5iZiI6MTczOTY0MzQ5NSwicGF0aCI6Ii83NTYxMy80MDE0Mjc4ODYtODcwOGQwZDUtMGNhYy00ZTdhLTg0MTYtMWE5NGE5MWI1NGE1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE1VDE4MTgxNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTU2NzIxMDlhZTZiMTQyMDlhMGE4ZjUyMGE1YTg2MmQxMzJjMTgzZGYyMTk1N2I1NTc0MTUyYzQwODBhNGRkN2EmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.N3XF5vLJjnF1CQMvm8r-8b0y-mij7ZzfawC8NeNIgEw)
Display after clicking "View Problem":
![Display of Brakeman warning](https://private-user-images.githubusercontent.com/75613/401427888-5d0f071e-9854-4253-97dd-3a20db6a1081.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk2NDM3OTUsIm5iZiI6MTczOTY0MzQ5NSwicGF0aCI6Ii83NTYxMy80MDE0Mjc4ODgtNWQwZjA3MWUtOTg1NC00MjUzLTk3ZGQtM2EyMGRiNmExMDgxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE1VDE4MTgxNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTk3ODJjYmQ3MDI3ZGFiYjY0NWNjOTJmZTc2MGIxMmQ1MWEzM2E4MzA4NGFkNzM2N2U1MjdkMDZlMDkzZWZiYmQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.Kx7MVKqcreWJoT-bNNb-e3w_kWF5DKI_-01AWUidc3k)
Warnings are listed as "problems" in VS Code's panel:
![Listing of Brakeman warnings](https://private-user-images.githubusercontent.com/75613/401427880-c7128ec1-0778-41e5-ae1a-12c96363ce50.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk2NDM3OTUsIm5iZiI6MTczOTY0MzQ5NSwicGF0aCI6Ii83NTYxMy80MDE0Mjc4ODAtYzcxMjhlYzEtMDc3OC00MWU1LWFlMWEtMTJjOTYzNjNjZTUwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE1VDE4MTgxNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTNlNzVkNTEyYTAwNDFjMzhiMTQyMTViYmJkMmQ0ODIxOThmYjYzMjM1Y2I4Y2RkMTgxZDIyNTEyMDUxMTM1ZGYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.WfVL05OAiX6oi5Qq_6qHKu9MMuPG0uabhU61lq1EP9k)
When files are saved, Brakeman will rescan the files and update any impacted warnings. Note that scans are asynchronous and only one scan will run at a time. If multiple files are changed while a scan is running, they will be queued and then rescanned all together when the current scan finishes.
![Queuing, scanning, reported changes](https://private-user-images.githubusercontent.com/75613/401429269-5898495d-0ffb-4a15-860a-f45d1ea1ad58.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk2NDM3OTUsIm5iZiI6MTczOTY0MzQ5NSwicGF0aCI6Ii83NTYxMy80MDE0MjkyNjktNTg5ODQ5NWQtMGZmYi00YTE1LTg2MGEtZjQ1ZDFlYTFhZDU4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE1VDE4MTgxNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTkwMWQ2ZDc0NDM2ZWY3YWVlNzM1MDRmMTE5MDA5NDZmZTZkZTkyNDlmMGNjNzQzODgyMDFiZjBkYjQxMzAxODcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.ucaiAwENkyg7IC45g3RQcX6kZlwxC_onM4zlG6S5R6A)
- Column numbers are not available right now, so the entire line is always reported
- Brakeman's rescanning capabilities are currently being overhauled. They work but may be a little slow (but still faster than a full scan)
- Large applications may require way too much memory for incremental scans to be useful
- Warnings may not clear if Ruby LSP crashes
- VS Code does not seem to support
CodeDescription
which can link to more information - No tests yet, so buyer beware
The gem is available as open source under the terms of the MIT License.