Skip to content

Commit

Permalink
🆕 steelbrain#1603 Add support for disabling indie linters
Browse files Browse the repository at this point in the history
  • Loading branch information
rixo committed May 18, 2019
1 parent 829c49b commit 5530fb2
Showing 1 changed file with 40 additions and 0 deletions.
40 changes: 40 additions & 0 deletions lib/indie-registry.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,19 @@ class IndieRegistry {
emitter: Emitter
delegates: Set<IndieDelegate>
subscriptions: CompositeDisposable
disabledProviders: Array<string>

constructor() {
this.emitter = new Emitter()
this.delegates = new Set()
this.subscriptions = new CompositeDisposable()
this.disabledProviders = []

this.subscriptions.add(
atom.config.observe('linter.disabledProviders', disabledProviders => {
this.updateDisabledProviders(disabledProviders)
}),
)
this.subscriptions.add(this.emitter)
}
// Public method
Expand All @@ -30,12 +37,45 @@ class IndieRegistry {
this.delegates.delete(indieLinter)
})
indieLinter.onDidUpdate(messages => {
// guard: don't update messages for disabled providers
if (this.disabledProviders.includes(indieLinter.name)) {
return
}
this.emitter.emit('did-update', { linter: indieLinter, messages })
})
this.emitter.emit('observe', indieLinter)

return indieLinter
}
updateDisabledProviders(disabledProviderNames: String[]): void {
const isNewlyDisabled = name => !this.disabledProviders.includes(name)
const isNoMoreDisabled = name => !disabledProviderNames.includes(name)

const hideLinterMessages = targetName => {
const isTarget = ({name}) => name === targetName
const indieLinter = [...this.delegates].find(isTarget)
if (indieLinter) {
this.emitter.emit('did-update', { linter: indieLinter, messages: [] })
}
}

const showLinterMessages = targetName => {
const isTarget = ({name}) => name === targetName
const indieLinter = [...this.delegates].find(isTarget)
if (indieLinter) {
const messages = indieLinter.getMessages()
this.emitter.emit('did-update', { linter: indieLinter, messages })
}
}

const newlyDisabledNames = disabledProviderNames.filter(isNewlyDisabled)
const newlyEnabledNames = this.disabledProviders.filter(isNoMoreDisabled)

this.disabledProviders = newlyDisabledNames

newlyDisabledNames.forEach(hideLinterMessages)
newlyEnabledNames.forEach(showLinterMessages)
}
getProviders(): Array<IndieDelegate> {
return Array.from(this.delegates)
}
Expand Down

0 comments on commit 5530fb2

Please sign in to comment.