diff --git a/CHANGELOG.md b/CHANGELOG.md index d8488bd1..1e7e5429 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ### Fixed -- Fixed issue where new oauth providers weren't being display in the login page +- Fixed issue where new oauth providers weren't being display in the login page. [commit](https://github.com/sourcebot-dev/sourcebot/commit/a2e06266dbe5e5ad4c2c3f730c73d64edecedcf7) +- Fixed client side "mark decorations may not be empty" error when viewing certain files. [#325](https://github.com/sourcebot-dev/sourcebot/pull/325) +- Fixed issue where the symbol hover popover would not appear for large source files. [#325](https://github.com/sourcebot-dev/sourcebot/pull/325) ## [4.0.1] - 2025-05-28 diff --git a/packages/web/src/app/[domain]/browse/[...path]/components/rangeHighlightingExtension.ts b/packages/web/src/app/[domain]/browse/[...path]/components/rangeHighlightingExtension.ts index b5bba639..7f1076c3 100644 --- a/packages/web/src/app/[domain]/browse/[...path]/components/rangeHighlightingExtension.ts +++ b/packages/web/src/app/[domain]/browse/[...path]/components/rangeHighlightingExtension.ts @@ -20,9 +20,12 @@ export const rangeHighlightingExtension = (range: BrowseHighlightRange) => State const from = state.doc.line(start.lineNumber).from + start.column - 1; const to = state.doc.line(end.lineNumber).from + end.column - 1; - return Decoration.set([ - markDecoration.range(from, to), - ]); + const decorations: Range[] = []; + if (from < to) { + decorations.push(markDecoration.range(from, to)); + } + + return Decoration.set(decorations); } else { const decorations: Range[] = []; for (let line = start.lineNumber; line <= end.lineNumber; line++) { diff --git a/packages/web/src/ee/features/codeNav/components/symbolHoverPopup/symbolHoverTargetsExtension.ts b/packages/web/src/ee/features/codeNav/components/symbolHoverPopup/symbolHoverTargetsExtension.ts index 179a0a54..37327479 100644 --- a/packages/web/src/ee/features/codeNav/components/symbolHoverPopup/symbolHoverTargetsExtension.ts +++ b/packages/web/src/ee/features/codeNav/components/symbolHoverPopup/symbolHoverTargetsExtension.ts @@ -52,7 +52,7 @@ export const symbolHoverTargetsExtension = StateField.define({ // @note: we need to use `ensureSyntaxTree` here (as opposed to `syntaxTree`) // because we want to parse the entire document, not just the text visible in // the current viewport. - const { data: tree } = measureSync(() => ensureSyntaxTree(state, state.doc.length), "ensureSyntaxTree"); + const { data: tree } = measureSync(() => ensureSyntaxTree(state, state.doc.length, Infinity), "ensureSyntaxTree"); const decorations: Range[] = []; // @note: useful for debugging @@ -64,7 +64,7 @@ export const symbolHoverTargetsExtension = StateField.define({ tree?.iterate({ enter: (node) => { // console.log(node.type.name, getTextAt(node.from, node.to)); - if (NODE_TYPES.includes(node.type.name)) { + if (NODE_TYPES.includes(node.type.name) && node.from < node.to) { decorations.push(decoration.range(node.from, node.to)); } }, diff --git a/packages/web/src/lib/extensions/searchResultHighlightExtension.ts b/packages/web/src/lib/extensions/searchResultHighlightExtension.ts index 3ae9e4a1..58364f56 100644 --- a/packages/web/src/lib/extensions/searchResultHighlightExtension.ts +++ b/packages/web/src/lib/extensions/searchResultHighlightExtension.ts @@ -33,8 +33,13 @@ const matchHighlighter = StateField.define({ .map((range, index) => { const { from, to } = convertToCodeMirrorRange(range, transaction.newDoc); const mark = index === selectedMatchIndex ? selectedMatchMark : matchMark; - return mark.range(from, to); - }); + if (from < to) { + return mark.range(from, to); + } + + return undefined; + }) + .filter((decoration) => decoration !== undefined); highlights = Decoration.set(decorations) }