@@ -365,15 +365,46 @@ extension WindowBaseCommandHandler {
365365
366366 let codeLanguage = languageIdentifierFromFileURL ( fileURL)
367367
368- let snippets = editor. selections. map { selection in
368+ let selections : [ CursorRange ] = {
369+ var all = [ CursorRange] ( )
370+
371+ // join the ranges if they overlaps in line
372+
373+ for selection in editor. selections {
374+ let range = CursorRange ( start: selection. start, end: selection. end)
375+
376+ func intersect( _ lhs: CursorRange , _ rhs: CursorRange ) -> Bool {
377+ lhs. start. line <= rhs. end. line && lhs. end. line >= rhs. start. line
378+ }
379+
380+ if let last = all. last, intersect ( last, range) {
381+ all [ all. count - 1 ] = CursorRange (
382+ start: . init(
383+ line: min ( last. start. line, range. start. line) ,
384+ character: min ( last. start. character, range. start. character)
385+ ) ,
386+ end: . init(
387+ line: max ( last. end. line, range. end. line) ,
388+ character: max ( last. end. character, range. end. character)
389+ )
390+ )
391+ } else if !range. isEmpty {
392+ all. append ( range)
393+ }
394+ }
395+
396+ return all
397+ } ( )
398+
399+ let snippets = selections. map { selection in
369400 guard selection. start != selection. end else {
370401 return PromptToCodeSnippet (
371402 startLineIndex: selection. start. line,
372403 originalCode: " " ,
373404 modifiedCode: " " ,
374405 description: " " ,
375406 error: " " ,
376- attachedRange: . init ( start : selection. start , end : selection . end )
407+ attachedRange: selection
377408 )
378409 }
379410 var selection = selection
@@ -399,7 +430,10 @@ extension WindowBaseCommandHandler {
399430 // indentation.
400431 selection. start = . init( line: selection. start. line, character: 0 )
401432 }
402- let selectedCode = editor. selectedCode ( in: selection)
433+ let selectedCode = editor. selectedCode ( in: . init(
434+ start: selection. start,
435+ end: selection. end
436+ ) )
403437 return PromptToCodeSnippet (
404438 startLineIndex: selection. start. line,
405439 originalCode: selectedCode,
0 commit comments