mirror of
https://github.com/dense-analysis/ale.git
synced 2025-12-06 12:44:23 +08:00
* 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 `==#`
101 lines
3.4 KiB
Plaintext
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, [])
|
|
|