+getCodeActionContextInRange :: TextDocumentIdentifier -> Range -> Session CodeActionContext
+getCodeActionContextInRange doc caRange = do
+ curDiags <- getCurrentDiagnostics doc
+ let diags = [ d | d@Diagnostic{_range=range} <- curDiags
+ , overlappingRange caRange range
+ ]
+ return $ CodeActionContext (List diags) Nothing
+ where
+ overlappingRange :: Range -> Range -> Bool
+ overlappingRange (Range s e) range =
+ positionInRange s range
+ || positionInRange e range
+
+ positionInRange :: Position -> Range -> Bool
+ positionInRange (Position pl po) (Range (Position sl so) (Position el eo)) =
+ pl > sl && pl < el
+ || pl == sl && pl == el && po >= so && po <= eo
+ || pl == sl && po >= so
+ || pl == el && po <= eo
+