@@ -130,6 +130,10 @@ export const preprocess = (text, filename) => {
130
130
let processedMarkup ;
131
131
let moduleExt = 'js' ;
132
132
let instanceExt = 'js' ;
133
+ let moduleEndLine ;
134
+ let processedModuleLineOffset ;
135
+ let instanceEndLine ;
136
+ let processedInstanceLineOffset ;
133
137
try {
134
138
// run preprocessor if present
135
139
if ( processor_options . svelte_preprocess ) {
@@ -142,8 +146,6 @@ export const preprocess = (text, filename) => {
142
146
state . mappings = decode ( result . mappings ) ;
143
147
}
144
148
145
- processedMarkup = result . markup ;
146
-
147
149
if ( result . module ) {
148
150
processedModule = result . module ;
149
151
moduleExt = result . module . ext ;
@@ -155,6 +157,8 @@ export const preprocess = (text, filename) => {
155
157
156
158
processedStyle = result . style ;
157
159
160
+ processedMarkup = result . markup ;
161
+
158
162
processor_options . named_blocks = true ;
159
163
}
160
164
}
@@ -163,10 +167,10 @@ export const preprocess = (text, filename) => {
163
167
if ( processedResult ) {
164
168
const { html, css, instance, module } = result . ast ;
165
169
166
- let styleDiff = processedStyle ? processedStyle . diff : 0 ;
167
- let markupDiff = processedMarkup ? processedMarkup . diff : 0 ;
168
170
let moduleDiff = processedModule ? processedModule . diff : 0 ;
169
171
let instanceDiff = processedInstance ? processedInstance . diff : 0 ;
172
+ let styleDiff = processedStyle ? processedStyle . diff : 0 ;
173
+ let markupDiff = processedMarkup ? processedMarkup . diff : 0 ;
170
174
171
175
let modulePreOffset = 0 ;
172
176
let modulePostOffset = 0 ;
@@ -201,6 +205,8 @@ export const preprocess = (text, filename) => {
201
205
}
202
206
203
207
if ( module && processedModule ) {
208
+ moduleEndLine = module . content . loc . end . line ;
209
+ processedModuleLineOffset = processedModule . ast . loc . end . line - moduleEndLine ;
204
210
module . content . body = processedModule . ast . body ;
205
211
206
212
module . start += modulePreOffset ;
@@ -211,6 +217,8 @@ export const preprocess = (text, filename) => {
211
217
}
212
218
213
219
if ( instance && processedInstance ) {
220
+ instanceEndLine = instance . content . loc . end . line ;
221
+ processedInstanceLineOffset = processedInstance . ast . loc . end . line - instanceEndLine ;
214
222
instance . content . body = processedInstance . ast . body ;
215
223
216
224
instance . start += instancePreOffset ;
@@ -240,15 +248,26 @@ export const preprocess = (text, filename) => {
240
248
state . var_names = new Set ( vars . map ( v => v . name ) ) ;
241
249
242
250
// convert warnings to linting messages
243
- state . messages = ( processor_options . ignore_warnings ? warnings . filter ( warning => ! processor_options . ignore_warnings ( warning ) ) : warnings ) . map ( ( { code, message, start, end } ) => ( {
244
- ruleId : code ,
245
- severity : 1 ,
246
- message,
247
- line : start && start . line ,
248
- column : start && start . column + 1 ,
249
- endLine : end && end . line ,
250
- endColumn : end && end . column + 1 ,
251
- } ) ) ;
251
+ state . messages = ( processor_options . ignore_warnings ? warnings . filter ( warning => ! processor_options . ignore_warnings ( warning ) ) : warnings ) . map ( ( { code, message, start, end } ) => {
252
+ let fixLine = 0 ;
253
+
254
+ if ( processedInstanceLineOffset && start && start . line > instanceEndLine ) {
255
+ fixLine += processedInstanceLineOffset ;
256
+ }
257
+
258
+ if ( processedModuleLineOffset && start && start . line > moduleEndLine ) {
259
+ fixLine += processedModuleLineOffset ;
260
+ }
261
+ return {
262
+ ruleId : code ,
263
+ severity : 1 ,
264
+ message,
265
+ line : start && start . line + fixLine ,
266
+ column : start && start . column + 1 ,
267
+ endLine : end && end . line + fixLine ,
268
+ endColumn : end && end . column + 1 ,
269
+ }
270
+ } ) ;
252
271
253
272
// build strings that we can send along to ESLint to get the remaining messages
254
273
0 commit comments