505
505
--- 获取 position 对应的光标位置
506
506
--- @param uri uri
507
507
--- @param position position
508
+ --- @param isFinish ? boolean
508
509
--- @return integer
509
- function m .offset (uri , position )
510
+ function m .offset (uri , position , isFinish )
510
511
local file = m .getFile (uri )
511
512
local lines = m .getLines (uri )
512
513
local text = m .getText (uri )
@@ -526,7 +527,12 @@ function m.offset(uri, position)
526
527
offset = utf8.offset (text , position .character + 1 , start ) or # text
527
528
end
528
529
if file ._diffInfo then
529
- offset = smerger .getOffset (file ._diffInfo , offset )
530
+ local start , finish = smerger .getOffset (file ._diffInfo , offset )
531
+ if isFinish then
532
+ offset = finish
533
+ else
534
+ offset = start
535
+ end
530
536
end
531
537
return offset
532
538
end
@@ -567,29 +573,31 @@ end
567
573
--- 将应用差异前的offset转换为应用差异后的offset
568
574
--- @param uri uri
569
575
--- @param offset integer
570
- --- @return integer
576
+ --- @return integer start
577
+ --- @return integer finish
571
578
function m .diffedOffset (uri , offset )
572
579
local file = m .getFile (uri )
573
580
if not file then
574
- return offset
581
+ return offset , offset
575
582
end
576
583
if not file ._diffInfo then
577
- return offset
584
+ return offset , offset
578
585
end
579
586
return smerger .getOffset (file ._diffInfo , offset )
580
587
end
581
588
582
589
--- 将应用差异后的offset转换为应用差异前的offset
583
590
--- @param uri uri
584
591
--- @param offset integer
585
- --- @return integer
592
+ --- @return integer start
593
+ --- @return integer finish
586
594
function m .diffedOffsetBack (uri , offset )
587
595
local file = m .getFile (uri )
588
596
if not file then
589
- return offset
597
+ return offset , offset
590
598
end
591
599
if not file ._diffInfo then
592
- return offset
600
+ return offset , offset
593
601
end
594
602
return smerger .getOffsetBack (file ._diffInfo , offset )
595
603
end
608
616
--- 将光标位置转化为 position
609
617
--- @param uri uri
610
618
--- @param offset integer
619
+ --- @param isFinish ? boolean
611
620
--- @return position
612
- function m .position (uri , offset )
621
+ function m .position (uri , offset , isFinish )
613
622
local file = m .getFile (uri )
614
623
local lines = m .getLines (uri )
615
624
local text = m .getText (uri )
@@ -620,7 +629,12 @@ function m.position(uri, offset)
620
629
}
621
630
end
622
631
if file ._diffInfo then
623
- offset = smerger .getOffsetBack (file ._diffInfo , offset )
632
+ local start , finish = smerger .getOffsetBack (file ._diffInfo , offset )
633
+ if isFinish then
634
+ offset = finish
635
+ else
636
+ offset = start
637
+ end
624
638
lines = m .getOriginLines (uri )
625
639
text = m .getOriginText (uri )
626
640
end
658
672
--- @param offset2 integer
659
673
function m .range (uri , offset1 , offset2 )
660
674
local range = {
661
- start = m .position (uri , offset1 ),
662
- [' end' ] = m .position (uri , offset2 ),
675
+ start = m .position (uri , offset1 , false ),
676
+ [' end' ] = m .position (uri , offset2 , true ),
663
677
}
664
678
if range .start .character > 0 then
665
679
range .start .character = range .start .character - 1
673
687
--- @return integer start
674
688
--- @return integer finish
675
689
function m .unrange (uri , range )
676
- local start = m .offset (uri , range .start )
677
- local finish = m .offset (uri , range [' end' ])
690
+ local start = m .offset (uri , range .start , true )
691
+ local finish = m .offset (uri , range [' end' ], false )
678
692
return start , finish
679
693
end
680
694
0 commit comments