Files
ale/test/handler/test_steep_handler.vader
Loic Nageleisen e09520e2d7 Add Ruby linter with Steep (#4671)
* Add Ruby linter with Steep

Fixes #3254

* Run steep instead of using language server

LSP presents a few issues and this works around those.

* Work around Steep path issue

See https://github.com/soutaro/steep/pull/975

* Add simple tests for steep

* Add steep to supported tools

* Pass linter

* Add a comment regarding Steep's column counting

* Make lnum an integer

* Add Steep handler test

* Fix separator for Windows

* Escape Windows path separators for substitute()

* Use ALEInfo (I) group

* Use fnameescape instead of quotes

* Skip linting for files not under steep root

* Add and pass tests covering proper steep root lookup

* Fix separator discrepancy

* Use strict operators (match case)

* Fix ordering

* Use `is#` instead of `==#`
2024-06-25 17:17:27 +09:00

101 lines
3.4 KiB
Plaintext

Before:
runtime ale_linters/ruby/steep.vim
After:
call ale#linter#Reset()
Execute(The steep handler should parse lines correctly):
AssertEqual
\ [
\ {
\ 'lnum': 400,
\ 'col': 18,
\ 'end_col': 45,
\ 'text': 'Method parameters are incompatible with declaration `(untyped, untyped, *untyped, **untyped) { () -> untyped } -> untyped`',
\ 'code': 'Ruby::MethodArityMismatch',
\ 'type': 'E',
\ },
\ {
\ 'lnum': 20,
\ 'col': 9,
\ 'end_col': 17,
\ 'text': 'Cannot find implementation of method `::Frobz::FooBarBaz#method_name`',
\ 'code': 'Ruby::MethodDefinitionMissing',
\ 'type': 'W',
\ },
\ {
\ 'lnum': 30,
\ 'col': 9,
\ 'end_col': 17,
\ 'text': 'Cannot find implementation of method `::Frobz::FooBarBaz#method_name`',
\ 'code': 'Ruby::MethodDefinitionMissing',
\ 'type': 'I',
\ },
\ {
\ 'lnum': 40,
\ 'col': 9,
\ 'end_col': 17,
\ 'text': 'Cannot find implementation of method `::Frobz::FooBarBaz#method_name`',
\ 'code': 'Ruby::MethodDefinitionMissing',
\ 'type': 'I',
\ },
\ ],
\ ale_linters#ruby#steep#HandleOutput(347, [
\ '# Type checking files:',
\ '',
\ '...............................................................................................................................F..........F.F...F.',
\ '',
\ 'lib/frobz/foobar_baz.rb:400:17: [error] Method parameters are incompatible with declaration `(untyped, untyped, *untyped, **untyped) { () -> untyped } -> untyped`',
\ '│ Diagnostic ID: Ruby::MethodArityMismatch',
\ '│',
\ '└ def frobz(obj, suffix, *args, &block)',
\ ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~',
\ '',
\ 'lib/frobz/foobar_baz.rb:20:8: [warning] Cannot find implementation of method `::Frobz::FooBarBaz#method_name`',
\ '│ Diagnostic ID: Ruby::MethodDefinitionMissing',
\ '│',
\ '└ class FooBarBaz',
\ ' ~~~~~~~~~',
\ '',
\ 'lib/frobz/foobar_baz.rb:30:8: [information] Cannot find implementation of method `::Frobz::FooBarBaz#method_name`',
\ '│ Diagnostic ID: Ruby::MethodDefinitionMissing',
\ '│',
\ '└ class FooBarBaz',
\ ' ~~~~~~~~~',
\ '',
\ 'lib/frobz/foobar_baz.rb:40:8: [hint] Cannot find implementation of method `::Frobz::FooBarBaz#method_name`',
\ '│ Diagnostic ID: Ruby::MethodDefinitionMissing',
\ '│',
\ '└ class FooBarBaz',
\ ' ~~~~~~~~~',
\ '',
\ 'Detected 4 problems from 1 file',
\ ])
Execute(The steep handler should handle when files are checked and no offenses are found):
AssertEqual
\ [],
\ ale_linters#ruby#steep#HandleOutput(347, [
\ '# Type checking files:',
\ '',
\ '.............................................................................................................................................',
\ '',
\ 'No type error detected. 🧉',
\ ])
Execute(The steep handler should handle when no files are checked):
AssertEqual
\ [],
\ ale_linters#ruby#steep#HandleOutput(347, [
\ '# Type checking files:',
\ '',
\ '',
\ '',
\ 'No type error detected. 🧉',
\ ])
Execute(The steep handler should handle empty output):
AssertEqual [], ale_linters#ruby#steep#HandleOutput(347, [''])
AssertEqual [], ale_linters#ruby#steep#HandleOutput(347, [])