@@ -71,15 +71,32 @@ export class CMJumpToDefinition extends CodeMirrorIntegration {
7171 }
7272
7373 register ( ) {
74- this . editor_handlers . set (
75- 'mousedown' ,
76- this . _jumpToDefinitionOrRefernce . bind ( this )
77- ) ;
74+ this . editor_handlers . set ( 'mousedown' , this . _jumpOnMouseUp . bind ( this ) ) ;
7875 super . register ( ) ;
7976 }
8077
78+ private _jumpOnMouseUp (
79+ virtualEditor : CodeMirrorVirtualEditor ,
80+ event : MouseEvent
81+ ) {
82+ document . body . addEventListener (
83+ 'mouseup' ,
84+ ( mouseUpEvent : MouseEvent ) => {
85+ if ( mouseUpEvent . target !== event . target ) {
86+ // Cursor moved, e.g. block selection was attempted, see:
87+ // https://github.com/jupyter-lsp/jupyterlab-lsp/issues/823
88+ return ;
89+ }
90+ return this . _jumpToDefinitionOrRefernce ( virtualEditor , event ) ;
91+ } ,
92+ {
93+ once : true
94+ }
95+ ) ;
96+ }
97+
8198 private _jumpToDefinitionOrRefernce (
82- virtual_editor : CodeMirrorVirtualEditor ,
99+ virtualEditor : CodeMirrorVirtualEditor ,
83100 event : MouseEvent
84101 ) {
85102 const { button } = event ;
@@ -88,24 +105,24 @@ export class CMJumpToDefinition extends CodeMirrorIntegration {
88105 if ( ! shouldJump ) {
89106 return ;
90107 }
91- let root_position = this . position_from_mouse ( event ) ;
92- if ( root_position == null ) {
108+ let rootPosition = this . position_from_mouse ( event ) ;
109+ if ( rootPosition == null ) {
93110 this . console . warn (
94111 'Could not retrieve root position from mouse event to jump to definition/reference'
95112 ) ;
96113 return ;
97114 }
98- let document = virtual_editor . document_at_root_position ( root_position ) ;
99- let virtual_position =
100- virtual_editor . root_position_to_virtual_position ( root_position ) ;
115+ let document = virtualEditor . document_at_root_position ( rootPosition ) ;
116+ let virtualPosition =
117+ virtualEditor . root_position_to_virtual_position ( rootPosition ) ;
101118
102119 const positionParams : lsp . TextDocumentPositionParams = {
103120 textDocument : {
104121 uri : document . document_info . uri
105122 } ,
106123 position : {
107- line : virtual_position . line ,
108- character : virtual_position . ch
124+ line : virtualPosition . line ,
125+ character : virtualPosition . ch
109126 }
110127 } ;
111128
@@ -239,19 +256,19 @@ export class CMJumpToDefinition extends CodeMirrorIntegration {
239256
240257 let { uri, range } = targetInfo ;
241258
242- let virtual_position = PositionConverter . lsp_to_cm (
259+ let virtualPosition = PositionConverter . lsp_to_cm (
243260 range . start
244261 ) as IVirtualPosition ;
245262
246263 if ( uris_equal ( uri , positionParams . textDocument . uri ) ) {
247- let editor_index = this . adapter . get_editor_index_at ( virtual_position ) ;
264+ let editor_index = this . adapter . get_editor_index_at ( virtualPosition ) ;
248265 // if in current file, transform from the position within virtual document to the editor position:
249266 let editor_position =
250- this . virtual_editor . transform_virtual_to_editor ( virtual_position ) ;
267+ this . virtual_editor . transform_virtual_to_editor ( virtualPosition ) ;
251268 if ( editor_position === null ) {
252269 this . console . warn (
253270 'Could not jump: conversion from virtual position to editor position failed' ,
254- virtual_position
271+ virtualPosition
255272 ) ;
256273 return JumpResult . PositioningFailure ;
257274 }
@@ -281,7 +298,7 @@ export class CMJumpToDefinition extends CodeMirrorIntegration {
281298 return JumpResult . AssumeSuccess ;
282299 } else {
283300 // otherwise there is no virtual document and we expect the returned position to be source position:
284- let source_position_ce = PositionConverter . cm_to_ce ( virtual_position ) ;
301+ let source_position_ce = PositionConverter . cm_to_ce ( virtualPosition ) ;
285302 this . console . log ( `Jumping to external file: ${ uri } ` ) ;
286303 this . console . log ( 'Jump target (source location):' , source_position_ce ) ;
287304
@@ -344,7 +361,7 @@ class JumperLabIntegration implements IFeatureLabIntegration {
344361 this . jumpers = new Map ( ) ;
345362
346363 if ( fileEditorTracker !== null ) {
347- fileEditorTracker . widgetAdded . connect ( ( sender , widget ) => {
364+ fileEditorTracker . widgetAdded . connect ( ( _ , widget ) => {
348365 let fileEditor = widget . content ;
349366
350367 if ( fileEditor . editor instanceof CodeMirrorEditor ) {
@@ -354,7 +371,7 @@ class JumperLabIntegration implements IFeatureLabIntegration {
354371 } ) ;
355372 }
356373
357- notebookTracker . widgetAdded . connect ( async ( sender , widget ) => {
374+ notebookTracker . widgetAdded . connect ( async ( _ , widget ) => {
358375 // NOTE: assuming that the default cells content factory produces CodeMirror editors(!)
359376 let jumper = new NotebookJumper ( widget , documentManager ) ;
360377 this . jumpers . set ( widget . id , jumper ) ;
@@ -432,7 +449,7 @@ const COMMANDS = (trans: TranslationBundle): IFeatureCommand[] => [
432449 } ,
433450 {
434451 id : 'jump-back' ,
435- execute : async ( { connection , virtual_position , document , features } ) => {
452+ execute : async ( { features } ) => {
436453 const jump_feature = features . get ( FEATURE_ID ) as CMJumpToDefinition ;
437454 jump_feature . jumper . global_jump_back ( ) ;
438455 } ,
0 commit comments