smarter disabling

pull/2934/head
filip mertens 2 years ago
parent 9dc5d09d4d
commit 4b18f3119d
  1. 20
      apps/remix-ide/src/app/plugins/parser/services/code-parser-antlr-service.ts

@ -30,9 +30,9 @@ export default class CodeParserAntlrService {
text: string, text: string,
ast: antlr.ParseResult | null, ast: antlr.ParseResult | null,
duration?: number, duration?: number,
blockDuration?: number,
parsingEnabled?: boolean, parsingEnabled?: boolean,
blocks?: BlockDefinition[] blocks?: BlockDefinition[],
blockDurations?: number[]
} }
} = {}; } = {};
constructor(plugin: CodeParser) { constructor(plugin: CodeParser) {
@ -52,15 +52,15 @@ export default class CodeParserAntlrService {
switch (ev.data.cmd) { switch (ev.data.cmd) {
case 'parsed': case 'parsed':
if (ev.data.ast && self.parserStartTime === ev.data.timestamp) { if (ev.data.ast && self.parserStartTime === ev.data.timestamp) {
self.setFileParsingState(ev.data.file, ev.data.blockDuration)
self.cache[ev.data.file] = { self.cache[ev.data.file] = {
...self.cache[ev.data.file], ...self.cache[ev.data.file],
text: ev.data.text, text: ev.data.text,
ast: ev.data.ast, ast: ev.data.ast,
duration: ev.data.duration, duration: ev.data.duration,
blockDuration: ev.data.blockDuration,
blocks: ev.data.blocks, blocks: ev.data.blocks,
blockDurations: self.cache[ev.data.file].blockDurations? [...self.cache[ev.data.file].blockDurations.slice(-3), ev.data.blockDuration]: [ev.data.blockDuration]
} }
self.setFileParsingState(ev.data.file)
} }
break; break;
} }
@ -68,16 +68,20 @@ export default class CodeParserAntlrService {
}); });
} }
setFileParsingState(file: string, duration: number) { setFileParsingState(file: string) {
if (this.cache[file]) { if (this.cache[file]) {
if (this.cache[file].blockDuration) { if (this.cache[file].blockDurations && this.cache[file].blockDurations.length > 3) {
if (this.cache[file].blockDuration > this.parserTreshHold && duration > this.parserTreshHold) { // calculate average of durations to determine if the parsing should be disabled
const values = [...this.cache[file].blockDurations]
const average = values.reduce((a, b) => a + b, 0) / values.length
if (average > this.parserTreshHold) {
this.cache[file].parsingEnabled = false this.cache[file].parsingEnabled = false
this.plugin.call('notification', 'toast', `This file is big so some autocomplete features will be disabled.`) this.plugin.call('notification', 'toast','Some autocomplete features will be disabled temporarily because the file takes too long to process.')
} else { } else {
this.cache[file].parsingEnabled = true this.cache[file].parsingEnabled = true
} }
} }
} }
} }

Loading…
Cancel
Save