shard-ameba/src/ameba/source.cr

47 lines
1 KiB
Crystal
Raw Normal View History

2017-10-26 17:47:42 +00:00
module Ameba
2017-10-30 20:00:01 +00:00
# An entity that represents a Crystal source file.
# Has path, lines of code and errors reported by rules.
2017-10-26 17:47:42 +00:00
class Source
2017-10-30 20:00:01 +00:00
# Represents an error caught by Ameba.
#
# Each error has the rule that created this error,
2017-11-07 21:50:25 +00:00
# location of the issue and a message.
2017-10-26 21:01:23 +00:00
record Error,
2017-11-07 21:50:25 +00:00
rule : Rule::Base,
location : Crystal::Location?,
2017-10-26 21:01:23 +00:00
message : String
getter lines : Array(String)?
2017-10-26 21:01:23 +00:00
getter errors = [] of Error
2017-10-31 18:29:30 +00:00
getter path : String?
getter code : String
getter ast : Crystal::ASTNode?
2017-10-26 17:47:42 +00:00
def initialize(@code : String, @path = nil)
2017-10-30 20:00:01 +00:00
end
2017-11-07 21:50:25 +00:00
def error(rule : Rule::Base, location, message : String)
errors << Error.new rule, location, message
2017-10-30 20:00:01 +00:00
end
def valid?
errors.empty?
2017-10-26 17:47:42 +00:00
end
2017-10-31 18:29:30 +00:00
def lines
@lines ||= @code.split("\n")
end
def ast
@ast ||=
Crystal::Parser.new(code)
.tap { |parser| parser.filename = @path }
.parse
end
def location(l, c)
Crystal::Location.new path, l, c
end
2017-10-26 17:47:42 +00:00
end
end