diff --git a/src/spectator/source.cr b/src/spectator/source.cr index dd0c30d..0393cca 100644 --- a/src/spectator/source.cr +++ b/src/spectator/source.cr @@ -11,10 +11,30 @@ module Spectator def initialize(@file, @line) end + # The relative path to the file from the current directory. + # If the file isn't in the current directory or a sub-directory, + # then the absolute path is provided. + def path + # Add the path separator here. + # Otherwise, things like: + # `spectator/foo.cr` and `spectator.cr` overlap. + # It also makes the substring easier. + cwd = Dir.current + File::SEPARATOR + if file.starts_with?(cwd) + # Relative to the current directory. + # Trim the current directory path from the beginning. + file[cwd.size..-1] + else + # Not trivial to find the file. + # Return the absolute path. + file + end + end + # String representation of the source. # This is formatted as `FILE:LINE`. def to_s(io) - io << file + io << path io << ':' io << line end