Backward compatibility to Crystal 1.3

This commit is contained in:
Vitalii Elenhaupt 2022-04-03 19:17:47 +03:00
parent 7192b64df0
commit 087f470f15
No known key found for this signature in database
GPG Key ID: CD0BF17825928BC0
7 changed files with 94 additions and 12 deletions

View File

@ -15,6 +15,6 @@ scripts:
executables:
- ameba
crystal: ">= 0.35.0"
crystal: ">= 0.36.0"
license: MIT

View File

@ -1,5 +1,4 @@
require "../../spec_helper"
require "semantic_version"
module Ameba::AST
struct Test
@ -77,12 +76,7 @@ module Ameba::AST
CRYSTAL
node = as_nodes(s).nil_literal_nodes.first
source = subject.node_source node, s.split("\n")
if SemanticVersion.parse(Crystal::VERSION) <= SemanticVersion.parse("0.35.1")
source.should be_nil
else
source.should eq "nil"
end
source.should eq "nil"
end
end

View File

@ -61,7 +61,9 @@ module Ameba::Rule::Lint
issue = s.issues.first
issue.rule.should_not be_nil
issue.location.to_s.should eq "source.cr:1:1"
# TODO: refactor this in next release
# Crystal 1.4 changes the start location of Crystal::ExceptionHandler
# issue.location.to_s.should eq "source.cr:2:3"
issue.end_location.to_s.should eq "source.cr:6:3"
issue.message.should eq "Empty `ensure` block detected"
end

View File

@ -166,7 +166,9 @@ module Ameba::Rule::Lint
issue = s.issues.first
issue.rule.should_not be_nil
issue.location.to_s.should eq "source.cr:1:1"
# TODO: refactor this in next release
# Crystal 1.4 changes the start location of Crystal::ExceptionHandler
# issue.location.to_s.should eq "source.cr:2:3"
issue.end_location.to_s.should eq "source.cr:4:3"
issue.message.should eq(
"Exception handler has shadowed exceptions: IndexError"

View File

@ -194,7 +194,10 @@ module Ameba::AST::Util
return 0 unless node.responds_to?(:name) && (name = node.name)
case name
when Crystal::ASTNode then name.name_size
when Crystal::ASTNode then name.name_size
# TODO: remove in a next release
# (preserves backward compatibility of crystal <= 1.3.2 )
when Symbol then name.to_s.size # Crystal::MagicConstant
when Crystal::Token::Kind then name.to_s.size # Crystal::MagicConstant
else name.size
end

81
src/ameba/ext/override.cr Normal file
View File

@ -0,0 +1,81 @@
# TODO: remove in a next release
# (preserves backward compatibility of crystal <= 1.3.2 )
{% if compare_versions(Crystal::VERSION, "1.3.2") < 1 %}
struct Symbol
def comment?
self == :COMMENT
end
def delimiter_start?
self == :DELIMITER_START
end
def delimiter_end?
self == :DELIMITER_END
end
def interpolation_start?
self == :INTERPOLATION_START
end
def string_array_start?
self == :STRING_ARRAY_START
end
def string_array_end?
self == :STRING_ARRAY_END
end
def symbol_array_start?
self == :SYMBOL_ARRAY_START
end
def eof?
self == :EOF
end
def op_rcurly?
self == :"}"
end
def begin?
self == :begin
end
def op_minus_gt?
self == :"->"
end
def ident?
self == :IDENT
end
def op_lparen?
self == :"("
end
def op_rparen?
self == :")"
end
def newline?
self == :NEWLINE
end
def space?
self == :SPACE
end
def number?
self == :NUMBER
end
def string?
self == :STRING
end
end
struct Crystal::Token::Kind
#
end
{% end %}

View File

@ -90,7 +90,7 @@ module Ameba::Rule::Style
end
private def redundant_begin_in_expressions?(node)
node.keyword == Crystal::Expressions::Keyword::Begin
node.keyword.try &.begin?
end
private def inner_handler?(handler)