@@ -14,6 +14,19 @@ class NotFileUriError < StandardError; end
1414 #: Integer
1515 attr_reader :start_line , :end_line , :start_column , :end_column
1616
17+ class << self
18+ #: (Prism::Location prism_location, uri: String) -> Location
19+ def from_prism ( prism_location , uri :)
20+ Location . new (
21+ uri : uri ,
22+ start_line : prism_location . start_line - 1 ,
23+ start_column : prism_location . start_column ,
24+ end_line : prism_location . end_line - 1 ,
25+ end_column : prism_location . end_column ,
26+ )
27+ end
28+ end
29+
1730 #: (?uri: String, ?start_line: Integer, ?end_line: Integer, ?start_column: Integer, ?end_column: Integer) -> void
1831 def initialize ( uri :, start_line :, end_line :, start_column :, end_column :)
1932 @uri = uri
@@ -68,6 +81,17 @@ def to_s
6881 # A one based location intended for display purposes. This is what should be used when displaying a location to users,
6982 # like in CLIs
7083 class DisplayLocation < Location
84+ class << self
85+ #: (Prism::Location prism_location, uri: String) -> Location
86+ def from_prism ( prism_location , uri :)
87+ raise NotImplementedError , <<~MESSAGE
88+ Cannot convert Prism::Location directly to a Rubydex::DisplayLocation.
89+ Start with `Rubydex::Location.from_prism(...)` and then convert the resulting
90+ location with `to_display`
91+ MESSAGE
92+ end
93+ end
94+
7195 # Returns itself
7296 #
7397 #: () -> DisplayLocation
0 commit comments