|  | // Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file | 
|  | // for details. All rights reserved. Use of this source code is governed by a | 
|  | // BSD-style license that can be found in the LICENSE file. | 
|  |  | 
|  | import 'package:analysis_server/lsp_protocol/protocol.dart' | 
|  | show Position, Range; | 
|  | import 'package:analysis_server/src/lsp/mapping.dart'; | 
|  | import 'package:analyzer/src/test_utilities/test_code_format.dart'; | 
|  |  | 
|  | extension TestCodePositionExtension on TestCodePosition { | 
|  | /// Return the LSP [Position] of the marker. | 
|  | /// | 
|  | /// Positions are based on [TestCode.code], with all parsed markers removed. | 
|  | Position get position => toPosition(lineInfo.getLocation(offset)); | 
|  | } | 
|  |  | 
|  | extension TestCodeRangeExtension on TestCodeRange { | 
|  | /// The LSP [Range] indicated by the markers. | 
|  | /// | 
|  | /// Ranges are based on [TestCode.code], with all parsed markers removed. | 
|  | Range get range => toRange(lineInfo, sourceRange.offset, sourceRange.length); | 
|  | } |