Skip to content
This repository was archived by the owner on Nov 25, 2021. It is now read-only.

Commit 67d30ee

Browse files
authored
feat: support highlighting tokens by range (#331)
1 parent 21edb94 commit 67d30ee

File tree

3 files changed

+396
-180
lines changed

3 files changed

+396
-180
lines changed

src/hoverifier.ts

+6-10
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ import {
4242
DOMFunctions,
4343
findElementWithOffset,
4444
getCodeElementsInRange,
45-
getTokenAtPosition,
45+
getTokenAtPositionOrRange,
4646
HoveredToken,
4747
} from './token_position'
4848
import { HoverAttachment, HoverOverlayProps, isPosition, LineOrPositionOrRange, DocumentHighlight } from './types'
@@ -557,7 +557,7 @@ export function createHoverifier<C extends object, D, A>({
557557
if (isPosition(position)) {
558558
cell = dom.getCodeElementFromLineNumber(codeView, position.line, position.part)
559559
if (cell) {
560-
target = findElementWithOffset(cell, position.character, tokenize)
560+
target = findElementWithOffset(cell, { offsetStart: position.character }, tokenize)
561561
if (target) {
562562
part = dom.getDiffCodePart && dom.getDiffCodePart(target)
563563
} else {
@@ -628,7 +628,7 @@ export function createHoverifier<C extends object, D, A>({
628628
// placed in the middle of a token.
629629
target:
630630
position && isPosition(position)
631-
? getTokenAtPosition(codeView, position, dom, position.part, tokenize)
631+
? getTokenAtPositionOrRange(codeView, position, dom, position.part, tokenize)
632632
: target,
633633
...rest,
634634
})),
@@ -770,7 +770,7 @@ export function createHoverifier<C extends object, D, A>({
770770
.pipe(
771771
switchMap(hoverObservable => hoverObservable),
772772
switchMap(({ hoverOrError, position, adjustPosition, codeView, part, ...rest }) => {
773-
let pos =
773+
const pos =
774774
hoverOrError &&
775775
hoverOrError !== LOADING &&
776776
!isErrorLike(hoverOrError) &&
@@ -789,10 +789,6 @@ export function createHoverifier<C extends object, D, A>({
789789
})
790790
}
791791

792-
// The requested position is is 0-indexed; the code here is currently 1-indexed
793-
const { line, character } = pos
794-
pos = { line: line + 1, character: character + 1, ...pos }
795-
796792
const adjustingPosition = adjustPosition
797793
? from(
798794
adjustPosition({
@@ -813,7 +809,7 @@ export function createHoverifier<C extends object, D, A>({
813809
switchMap(({ scrollBoundaries, hoverOrError, position, codeView, codeViewId, dom, part }) => {
814810
const highlightedRange = getHighlightedRange({ hoverOrError, position })
815811
const hoveredTokenElement = highlightedRange
816-
? getTokenAtPosition(codeView, highlightedRange.start, dom, part, tokenize)
812+
? getTokenAtPositionOrRange(codeView, highlightedRange, dom, part, tokenize)
817813
: undefined
818814
return resetOnBoundaryIntersection({
819815
scrollBoundaries,
@@ -938,7 +934,7 @@ export function createHoverifier<C extends object, D, A>({
938934
positions.pipe(
939935
map(highlightedRanges =>
940936
highlightedRanges.map(highlightedRange =>
941-
getTokenAtPosition(codeView, highlightedRange, dom, part, tokenize)
937+
getTokenAtPositionOrRange(codeView, highlightedRange, dom, part, tokenize)
942938
)
943939
),
944940
map(elements => ({ elements, codeView, dom, part }))

0 commit comments

Comments
 (0)