Skip to content

Commit

Permalink
updateKeys -> createKeyMessageMap -> flagMessages -> update cache
Browse files Browse the repository at this point in the history
  • Loading branch information
aminya committed Aug 1, 2020
1 parent 00cd9a9 commit bc078e5
Showing 1 changed file with 14 additions and 38 deletions.
52 changes: 14 additions & 38 deletions lib/message-registry.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import { CompositeDisposable, Emitter } from 'atom'
import debounce from 'lodash/debounce'
import type { Disposable, TextBuffer } from 'atom'
import { messageKey } from './helpers'
import { messageKey, updateKeys, createKeyMessageMap, flagMessages } from './helpers'
import type { MessagesPatch, Message, Linter } from './types'

type Linter$Message$Map = {
Expand Down Expand Up @@ -50,7 +50,6 @@ class MessageRegistry {
}
update() {
const result = { added: [], removed: [], messages: [] }

for (const entry of this.messagesMap) {
if (entry.deleted) {
result.removed = result.removed.concat(entry.oldMessages)
Expand All @@ -77,47 +76,24 @@ class MessageRegistry {
continue
}

const newKeys = new Set()
const oldKeys = new Set()
const { oldMessages } = entry
let foundNew = false
entry.oldMessages = []

for (let i = 0, { length } = oldMessages; i < length; ++i) {
const message = oldMessages[i]
message.key = messageKey(message)
oldKeys.add(message.key)
}
// update the key of oldMessages
updateKeys(oldMessages)

for (let i = 0, { length } = entry.messages; i < length; ++i) {
const message = entry.messages[i]
if (newKeys.has(message.key)) {
continue
}
newKeys.add(message.key)
if (!oldKeys.has(message.key)) {
foundNew = true
result.added.push(message)
result.messages.push(message)
entry.oldMessages.push(message)
}
}
// create a map from keys to oldMessages
const keyMessageMap = createKeyMessageMap(oldMessages)

if (!foundNew && entry.messages.length === oldMessages.length) {
// Messages are unchanged
result.messages = result.messages.concat(oldMessages)
entry.oldMessages = oldMessages
continue
}
// flag messages as oldKept, oldRemoved, newAdded
const flaggedMessages = flagMessages(entry.messages, keyMessageMap)

for (let i = 0, { length } = oldMessages; i < length; ++i) {
const message = oldMessages[i]
if (newKeys.has(message.key)) {
entry.oldMessages.push(message)
result.messages.push(message)
} else {
result.removed.push(message)
}
// update the result and cache
if (flaggedMessages !== null) {
const { oldKept, oldRemoved, newAdded } = flaggedMessages
result.added = result.added.concat(newAdded)
result.removed = result.removed.concat(oldRemoved)
result.messages = result.messages.concat(newAdded.concat(oldKept))
entry.oldMessages = result.messages // update chache
}
}

Expand Down

0 comments on commit bc078e5

Please sign in to comment.