@@ -63,12 +63,7 @@ function appendDiagnostic(win: Window, doc: Document, config: d.DevClientConfig,
6363 fileHeader . title = escapeHtml ( diagnostic . absFilePath ) ;
6464
6565 if ( canOpenInEditor ) {
66- ( fileHeader as HTMLAnchorElement ) . href = '#open-in-editor' ;
67- fileHeader . addEventListener ( 'click' , ( ev ) => {
68- ev . preventDefault ( ) ;
69- ev . stopPropagation ( ) ;
70- openInEditor ( win , config , diagnostic ) ;
71- } ) ;
66+ addOpenInEditor ( win , config , fileHeader , diagnostic . absFilePath , diagnostic . lineNumber , diagnostic . columnNumber ) ;
7267 }
7368 }
7469
@@ -98,15 +93,24 @@ function appendDiagnostic(win: Window, doc: Document, config: d.DevClientConfig,
9893
9994 prepareLines ( diagnostic . lines ) . forEach ( l => {
10095 const tr = doc . createElement ( 'tr' ) ;
101- if ( l . errorCharStart > - 1 ) {
102- tr . className = 'dev-server-diagnostic-error-line' ;
96+ if ( l . errorCharStart > 0 ) {
97+ tr . classList . add ( 'dev-server-diagnostic-error-line' ) ;
98+ }
99+ if ( canOpenInEditor ) {
100+ tr . classList . add ( 'dev-server-diagnostic-open-in-editor' ) ;
103101 }
104102 table . appendChild ( tr ) ;
105103
106104 const tdNum = doc . createElement ( 'td' ) ;
107105 tdNum . className = 'dev-server-diagnostic-blob-num' ;
108- if ( l . lineNumber > - 1 ) {
106+ if ( l . lineNumber > 0 ) {
109107 tdNum . setAttribute ( 'data-line-number' , l . lineNumber + '' ) ;
108+ tdNum . title = escapeHtml ( diagnostic . relFilePath ) + ', line ' + l . lineNumber ;
109+
110+ if ( canOpenInEditor ) {
111+ const column = l . lineNumber === diagnostic . lineNumber ? diagnostic . columnNumber : 1 ;
112+ addOpenInEditor ( win , config , tdNum , diagnostic . absFilePath , l . lineNumber , column ) ;
113+ }
110114 }
111115 tr . appendChild ( tdNum ) ;
112116
@@ -121,17 +125,26 @@ function appendDiagnostic(win: Window, doc: Document, config: d.DevClientConfig,
121125}
122126
123127
124- function openInEditor ( win : Window , config : d . DevClientConfig , diagnostic : d . Diagnostic ) {
125- const qs : d . OpenInEditorData = {
126- file : diagnostic . absFilePath ,
127- line : diagnostic . lineNumber ,
128- column : diagnostic . columnNumber ,
129- editor : config . editors [ 0 ] . id
130- } ;
131-
132- const url = `${ OPEN_IN_EDITOR_URL } ?${ Object . keys ( qs ) . map ( k => `${ k } =${ ( qs as any ) [ k ] } ` ) . join ( '&' ) } ` ;
133-
134- win . fetch ( url ) ;
128+ function addOpenInEditor ( win : Window , config : d . DevClientConfig , elm : HTMLElement , file : string , line : number , column : number ) {
129+ if ( elm . tagName === 'A' ) {
130+ ( elm as HTMLAnchorElement ) . href = '#open-in-editor' ;
131+ }
132+ if ( typeof column !== 'number' || column < 1 ) {
133+ column = 1 ;
134+ }
135+ elm . addEventListener ( 'click' , ( ev ) => {
136+ ev . preventDefault ( ) ;
137+ ev . stopPropagation ( ) ;
138+ const qs : d . OpenInEditorData = {
139+ file : file ,
140+ line : line ,
141+ column : column ,
142+ editor : config . editors [ 0 ] . id
143+ } ;
144+
145+ const url = `${ OPEN_IN_EDITOR_URL } ?${ Object . keys ( qs ) . map ( k => `${ k } =${ ( qs as any ) [ k ] } ` ) . join ( '&' ) } ` ;
146+ win . fetch ( url ) ;
147+ } ) ;
135148}
136149
137150
0 commit comments