@@ -193,12 +193,23 @@ def from_line_marker(
193193 marker_subtype = (search_term .marker_subtype or "" ).casefold ()
194194
195195 match marker_subtype :
196- case 'number' : # Simple case: a line number
197- index = int (stripped_search ) - 1
198- assert 0 <= index < len (lines ), (
199- f"Line number { stripped_search } out of bounds "
200- f"(must be in interval [1, { len (lines )} ])"
201- )
196+ case 'number' : # Line number relative to search range
197+ relative_index = int (stripped_search ) - 1
198+ if search_range :
199+ # Make index relative to search range start
200+ index = search_range .start + relative_index
201+ assert search_range .start <= index < search_range .end , (
202+ f"Line number { stripped_search } out of bounds "
203+ f"(must be in interval [1, { search_range .end - search_range .start } ] "
204+ f"relative to context)"
205+ )
206+ else :
207+ # No context - use absolute file line number
208+ index = relative_index
209+ assert 0 <= index < len (lines ), (
210+ f"Line number { stripped_search } out of bounds "
211+ f"(must be in interval [1, { len (lines )} ])"
212+ )
202213 reference_indent = get_line_indent_count_from_lines (lines , index )
203214 index += calc_index_delta_for_relative_position (search_term )
204215 return cls (index , index , reference_indent )
0 commit comments