From e06b05b8b04ef71126b41a7b0cd2153b3dbd0265 Mon Sep 17 00:00:00 2001 From: Amin Yahyaabadi Date: Mon, 4 Jan 2021 19:10:35 -0600 Subject: [PATCH] chore: add built files --- dist/editor-registry.d.ts | 3 +-- dist/index.js | 2 +- dist/index.js.map | 2 +- dist/indie-registry.d.ts | 3 +-- dist/linter-registry.d.ts | 3 +-- dist/message-registry.d.ts | 4 ++-- dist/toggle-view.d.ts | 4 ++-- dist/tsconfig.tsbuildinfo | 34 +++++++++++++++++----------------- dist/ui-registry.d.ts | 4 +--- 9 files changed, 27 insertions(+), 32 deletions(-) diff --git a/dist/editor-registry.d.ts b/dist/editor-registry.d.ts index 477032dc..4eab75bc 100644 --- a/dist/editor-registry.d.ts +++ b/dist/editor-registry.d.ts @@ -1,7 +1,7 @@ import { Emitter, CompositeDisposable } from 'atom'; import type { Disposable, TextEditor } from 'atom'; import EditorLinter from './editor-linter'; -declare class EditorRegistry { +export default class EditorRegistry { emitter: Emitter; lintOnOpen: boolean; subscriptions: CompositeDisposable; @@ -14,4 +14,3 @@ declare class EditorRegistry { observe(callback: (editorLinter: EditorLinter) => void): Disposable; dispose(): void; } -export default EditorRegistry; diff --git a/dist/index.js b/dist/index.js index bfc355a6..d517ff29 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1,2 +1,2 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("atom"),t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},i="object"==typeof t&&t&&t.Object===Object&&t,s="object"==typeof self&&self&&self.Object===Object&&self,r=i||s||Function("return this")(),n=r.Symbol,o=Object.prototype,a=o.hasOwnProperty,d=o.toString,l=n?n.toStringTag:void 0;var c=function(e){var t=a.call(e,l),i=e[l];try{e[l]=void 0;var s=!0}catch(e){}var r=d.call(e);return s&&(t?e[l]=i:delete e[l]),r},h=Object.prototype.toString;var u=function(e){return h.call(e)},p=n?n.toStringTag:void 0;var g=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":p&&p in Object(e)?c(e):u(e)};var f=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)};var m,b=function(e){if(!f(e))return!1;var t=g(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t},v=r["__core-js_shared__"],y=(m=/[^.]+$/.exec(v&&v.keys&&v.keys.IE_PROTO||""))?"Symbol(src)_1."+m:"";var w=function(e){return!!y&&y in e},_=Function.prototype.toString;var I=function(e){if(null!=e){try{return _.call(e)}catch(e){}try{return e+""}catch(e){}}return""},L=/^\[object .+?Constructor\]$/,E=Function.prototype,D=Object.prototype,M=E.toString,P=D.hasOwnProperty,j=RegExp("^"+M.call(P).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");var C=function(e){return!(!f(e)||w(e))&&(b(e)?j:L).test(I(e))};var A=function(e,t){return null==e?void 0:e[t]};var O=function(e,t){var i=A(e,t);return C(i)?i:void 0},S=O(Object,"create");var U=function(){this.__data__=S?S(null):{},this.size=0};var $=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},N=Object.prototype.hasOwnProperty;var T=function(e){var t=this.__data__;if(S){var i=t[e];return"__lodash_hash_undefined__"===i?void 0:i}return N.call(t,e)?t[e]:void 0},k=Object.prototype.hasOwnProperty;var x=function(e){var t=this.__data__;return S?void 0!==t[e]:k.call(t,e)};var R=function(e,t){var i=this.__data__;return this.size+=this.has(e)?0:1,i[e]=S&&void 0===t?"__lodash_hash_undefined__":t,this};function F(e){var t=-1,i=null==e?0:e.length;for(this.clear();++t-1};var X=function(e,t){var i=this.__data__,s=V(i,e);return s<0?(++this.size,i.push([e,t])):i[s][1]=t,this};function H(e){var t=-1,i=null==e?0:e.length;for(this.clear();++t-1};var be=function(e,t,i){for(var s=-1,r=null==e?0:e.length;++s=200){var l=t?null:Ie(e);if(l)return _e(l);o=!1,r=ve,d=new he}else d=t?[]:a;e:for(;++s" • "+e);atom.notifications.addWarning("[Linter] "+e,{dismissable:!0,detail:`${t}\n${s.join("\n")}`})}const Me=new Set(["error","warning","info"]);function Pe(t,i){const s=[];if(Array.isArray(i)){let t=!1,r=!1,n=!1,o=!1,a=!1,d=!1,l=!1,c=!1,h=!1;for(let u=0,{length:p}=i;ue.concat(t.getScopeDescriptor().getScopesArray()),["*"]))}let Ue;function $e(e,t,i){if(!e)return!0;if(i){let t=null;const i=atom.project.getPaths();for(let s=0,{length:r}=i;s!o.includes(e)),d=new Set;for(let e=0,t=a.length;e{xe(e,t)}),e}clearMessages(){this.subscriptions.disposed||(this.emitter.emit("did-update",[]),this.messages.clear())}setMessages(e,t=null){if("string"!=typeof e||!Array.isArray(t))throw new Error("Invalid Parameters to setMessages()");!this.subscriptions.disposed&&Pe(this.name,t)&&(t.forEach((function(t){if(t.location.file!==e)throw console.debug("[Linter-UI-Default] Expected File",e,"Message",t),new Error("message.location.file does not match the given filePath")})),Te(this.name,t),this.messages.set(e,t),this.emitter.emit("did-update",this.getMessages()))}setAllMessages(e){if(!this.subscriptions.disposed&&(Array.isArray(e)&&!atom.inDevMode()||Pe(this.name,e))){Te(this.name,e),this.messages.clear();for(let t=0,{length:i}=e;t{this.delegates.delete(i)}),i.onDidUpdate(e=>{this.emitter.emit("did-update",{linter:i,messages:e})}),this.emitter.emit("observe",i),i}getProviders(){return Array.from(this.delegates)}observe(e){return this.delegates.forEach(e),this.emitter.on("observe",e)}onDidUpdate(e){return this.emitter.on("did-update",e)}dispose(){for(const e of this.delegates)e.dispose();this.subscriptions.dispose()}}var Be=function(){return r.Date.now()};var ze=function(e){return null!=e&&"object"==typeof e};var qe=function(e){return"symbol"==typeof e||ze(e)&&"[object Symbol]"==g(e)},Ve=/^\s+|\s+$/g,Ge=/^[-+]0x[0-9a-f]+$/i,Ke=/^0b[01]+$/i,We=/^0o[0-7]+$/i,Ye=parseInt;var Xe=function(e){if("number"==typeof e)return e;if(qe(e))return NaN;if(f(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=f(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(Ve,"");var i=Ke.test(e);return i||We.test(e)?Ye(e.slice(2),i?2:8):Ge.test(e)?NaN:+e},He=Math.max,Je=Math.min;var Qe=function(e,t,i){var s,r,n,o,a,d,l=0,c=!1,h=!1,u=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function p(t){var i=s,n=r;return s=r=void 0,l=t,o=e.apply(n,i)}function g(e){return l=e,a=setTimeout(b,t),c?p(e):o}function m(e){var i=e-d;return void 0===d||i>=t||i<0||h&&e-l>=n}function b(){var e=Be();if(m(e))return v(e);a=setTimeout(b,function(e){var i=t-(e-d);return h?Je(i,n-(e-l)):i}(e))}function v(e){return a=void 0,u&&s?p(e):(s=r=void 0,o)}function y(){var e=Be(),i=m(e);if(s=arguments,r=this,d=e,i){if(void 0===a)return g(d);if(h)return clearTimeout(a),a=setTimeout(b,t),p(d)}return void 0===a&&(a=setTimeout(b,t)),o}return t=Xe(t)||0,f(i)&&(c=!!i.leading,n=(h="maxWait"in i)?He(Xe(i.maxWait)||0,t):n,u="trailing"in i?!!i.trailing:u),y.cancel=function(){void 0!==a&&clearTimeout(a),l=0,s=d=r=a=void 0},y.flush=function(){return void 0===a?o:v(Be())},y};class Ze{constructor(){this.emitter=new e.Emitter,this.messages=[],this.messagesMap=new Set,this.subscriptions=new e.CompositeDisposable,this.debouncedUpdate=Qe(this.update,100,{leading:!0}),this.subscriptions.add(this.emitter)}set({messages:e,linter:t,buffer:i}){let s=null;for(const e of this.messagesMap)if(e.buffer===i&&e.linter===t){s=e;break}s?(s.messages=e,s.changed=!0):this.messagesMap.add({messages:e,linter:t,buffer:i,oldMessages:[],changed:!0,deleted:!1}),this.debouncedUpdate()}update(){const e={added:[],removed:[],messages:[]};for(const t of this.messagesMap){if(t.deleted){xe(e.removed,t.oldMessages),this.messagesMap.delete(t);continue}if(!t.changed){xe(e.messages,t.oldMessages);continue}const i=ke(t.messages,t.oldMessages);if(null!==i){const{oldKept:s,oldRemoved:r,newAdded:n}=i;xe(e.added,n),xe(e.removed,r);const o=n.concat(s);xe(e.messages,o),t.oldMessages=o}}(e.added.length||e.removed.length)&&(this.messages=e.messages,this.emitter.emit("did-update-messages",e))}onDidUpdateMessages(e){return this.emitter.on("did-update-messages",e)}deleteByBuffer(e){for(const t of this.messagesMap)t.buffer===e&&(t.deleted=!0);this.debouncedUpdate()}deleteByLinter(e){for(const t of this.messagesMap)t.linter===e&&(t.deleted=!0);this.debouncedUpdate()}dispose(){this.subscriptions.dispose()}}class et{constructor(){this.lintOnChange=!0,this.ignoreVCS=!0,this.ignoreGlob="**/*.min.{js,css}",this.lintPreviewTabs=!0,this.disabledProviders=[],this.emitter=new e.Emitter,this.linters=new Set,this.subscriptions=new e.CompositeDisposable,this.activeNotifications=new Set,this.subscriptions.add(atom.config.observe("linter.lintOnChange",e=>{this.lintOnChange=e})),this.subscriptions.add(atom.config.observe("core.excludeVcsIgnoredPaths",e=>{this.ignoreVCS=e})),this.subscriptions.add(atom.config.observe("linter.ignoreGlob",e=>{this.ignoreGlob=e})),this.subscriptions.add(atom.config.observe("linter.lintPreviewTabs",e=>{this.lintPreviewTabs=e})),this.subscriptions.add(atom.config.observe("linter.disabledProviders",e=>{this.disabledProviders=e})),this.subscriptions.add(this.emitter)}hasLinter(e){return this.linters.has(e)}addLinter(e){(function(e){const t=[];return e&&"object"==typeof e?("string"!=typeof e.name&&t.push("Linter.name must be a string"),("string"!=typeof e.scope||"file"!==e.scope&&"project"!==e.scope)&&t.push("Linter.scope must be either 'file' or 'project'"),"boolean"!=typeof e.lintsOnChange&&t.push("Linter.lintsOnChange must be a boolean"),Array.isArray(e.grammarScopes)||t.push("Linter.grammarScopes must be an Array"),"function"!=typeof e.lint&&t.push("Linter.lint must be a function")):t.push("Linter must be an object"),!t.length||(De("Invalid Linter received",`These issues were encountered while registering a Linter named '${e&&e.name?e.name:"Unknown"}'`,t),!1)})(e)&&(e[Ce]=!0,void 0===e.__$sb_linter_request_latest&&(e.__$sb_linter_request_latest=0),void 0===e[Ae]&&(e[Ae]=0),e.__$sb_linter_version=2,this.linters.add(e))}getProviders(){return Array.from(this.linters)}deleteLinter(e){this.linters.has(e)&&(e[Ce]=!1,this.linters.delete(e))}async lint({onChange:e,editor:t}){const i=t.getPath();if(e&&!this.lintOnChange||$e(t.getPath(),this.ignoreGlob,this.ignoreVCS)||!this.lintPreviewTabs&&atom.workspace.getActivePane().getPendingItem()===t)return!1;const s=Se(t),r=[];for(const n of this.linters){if(!Oe(n,e,s))continue;if(this.disabledProviders.includes(n.name))continue;const o=++n.__$sb_linter_request_latest,a="file"===n.scope?t.getBuffer():null,d="file"===n.scope?i:null;this.emitter.emit("did-begin-linting",{number:o,linter:n,filePath:d}),r.push(new Promise((function(e){e(n.lint(t))})).then(e=>{if(this.emitter.emit("did-finish-linting",{number:o,linter:n,filePath:d}),n[Ae]>=o||!n[Ce]||a&&!a.isAlive())return;if(n[Ae]=o,a&&!a.isAlive())return;if(null===e)return;let t=!0;!atom.inDevMode()&&Array.isArray(e)||(t=Pe(n.name,e)),t&&(Te(n.name,e),this.emitter.emit("did-update-messages",{messages:e,linter:n,buffer:a}))},e=>{this.emitter.emit("did-finish-linting",{number:o,linter:n,filePath:d}),console.error("[Linter] Error running "+n.name,e);const t="[Linter] Error running "+n.name;if(Array.from(this.activeNotifications).some(e=>e.getOptions().detail===t))return;const i=atom.notifications.addError(t,{detail:"See Console for more info.",dismissable:!0,buttons:[{text:"Open Console",onDidClick:()=>{atom.openDevTools(),i.dismiss()}},{text:"Cancel",onDidClick:()=>{i.dismiss()}}]})}))}return await Promise.all(r),!0}onDidUpdateMessages(e){return this.emitter.on("did-update-messages",e)}onDidBeginLinting(e){return this.emitter.on("did-begin-linting",e)}onDidFinishLinting(e){return this.emitter.on("did-finish-linting",e)}dispose(){this.activeNotifications.forEach(e=>e.dismiss()),this.activeNotifications.clear(),this.linters.clear(),this.subscriptions.dispose()}}class tt{constructor(t){if(!atom.workspace.isTextEditor(t))throw new Error("EditorLinter expects a valid TextEditor");const i=t.getBuffer(),s=Qe(()=>{this.emitter.emit("should-lint",!1)},50,{leading:!0});this.editor=t,this.emitter=new e.Emitter,this.subscriptions=new e.CompositeDisposable,this.subscriptions.add(this.editor.onDidDestroy(()=>this.dispose())),this.subscriptions.add(this.editor.onDidSave(s)),this.subscriptions.add(i.onDidReload(s)),this.subscriptions.add(this.subscriptiveObserve(atom.config,"linter.lintOnChangeInterval",e=>i.onDidChange(Qe(()=>{this.emitter.emit("should-lint",!0)},e))))}getEditor(){return this.editor}lint(e=!1){this.emitter.emit("should-lint",e)}onShouldLint(e){return this.emitter.on("should-lint",e)}onDidDestroy(e){return this.emitter.on("did-destroy",e)}dispose(){this.emitter.emit("did-destroy"),this.subscriptions.dispose(),this.emitter.dispose()}subscriptiveObserve(t,i,s){let r=null;const n=t.observe(i,e=>{r&&r.dispose(),r=s.call(this,e)});return new e.Disposable((function(){n.dispose(),r&&r.dispose()}))}}class it{constructor(){this.lintOnOpen=!0,this.emitter=new e.Emitter,this.subscriptions=new e.CompositeDisposable,this.editorLinters=new Map,this.subscriptions.add(this.emitter),this.subscriptions.add(atom.config.observe("linter.lintOnOpen",e=>{this.lintOnOpen=e}))}activate(){this.subscriptions.add(atom.workspace.observeTextEditors(e=>{this.createFromTextEditor(e)}))}get(e){return this.editorLinters.get(e)}createFromTextEditor(e){let t=this.editorLinters.get(e);return t||(t=new tt(e),t.onDidDestroy(()=>{this.editorLinters.delete(e)}),this.editorLinters.set(e,t),this.emitter.emit("observe",t),this.lintOnOpen&&t.lint(),t)}hasSibling(e){const t=e.getEditor().getBuffer();return Array.from(this.editorLinters.keys()).some(e=>e.getBuffer()===t)}observe(e){return this.editorLinters.forEach(e),this.emitter.on("observe",e)}dispose(){for(const e of this.editorLinters.values())e.dispose();this.subscriptions.dispose()}}let st,rt,nt,ot;function at(e){let t;if(e&&"object"==typeof e&&"string"==typeof e.name)t=e.name;else{if("string"!=typeof e)throw new Error("Unknown object passed to formatItem()");t=e}return" - "+t}function dt(e,t){return e.name.localeCompare(t.name)}class lt{constructor(){this.emitter=new e.Emitter,this.subscriptions=new e.CompositeDisposable,this.subscriptions.add(this.emitter),this.subscriptions.add(atom.commands.add("atom-workspace",{"linter:enable-linter":()=>this.enableLinter(),"linter:disable-linter":()=>this.disableLinter()})),this.subscriptions.add(atom.commands.add("atom-text-editor:not([mini])",{"linter:lint":()=>this.lint(),"linter:debug":()=>this.debug(),"linter:toggle-active-editor":()=>this.toggleActiveEditor()}))}lint(){this.emitter.emit("should-lint")}debug(){this.emitter.emit("should-debug")}enableLinter(){this.emitter.emit("should-toggle-linter","enable")}disableLinter(){this.emitter.emit("should-toggle-linter","disable")}toggleActiveEditor(){this.emitter.emit("should-toggle-active-editor")}showDebug(e,t,i){st||(st=require("../package.json"));const s=atom.workspace.getActiveTextEditor();if(void 0===s)return;const r=Se(s),n=e.slice().sort(dt),o=t.slice().sort(dt),a=i.slice().sort(dt),d=o.map(at).join("\n"),l=n.map(at).join("\n"),c=n.filter(e=>Oe(e,!1,r)).map(at).join("\n"),h=r.map(at).join("\n"),u=a.map(at).join("\n"),p=atom.config.get("linter.ignoreGlob"),g=atom.config.get("core.excludeVcsIgnoredPaths"),f=atom.config.get("linter.disabledProviders").map(at).join("\n"),m=$e(s.getPath(),p,g);atom.notifications.addInfo("Linter Debug Info",{detail:["Platform: "+process.platform,"Atom Version: "+atom.getVersion(),"Linter Version: "+st.version,"Opened file is ignored: "+(m?"Yes":"No"),"Matching Linter Providers: \n"+c,"Disabled Linter Providers: \n"+f,"Standard Linter Providers: \n"+l,"Indie Linter Providers: \n"+d,"UI Providers: \n"+u,"Ignore Glob: "+p,"VCS Ignored Paths are excluded: "+g,"Current File Scopes: \n"+h].join("\n"),dismissable:!0})}onShouldLint(e){return this.emitter.on("should-lint",e)}onShouldDebug(e){return this.emitter.on("should-debug",e)}onShouldToggleActiveEditor(e){return this.emitter.on("should-toggle-active-editor",e)}onShouldToggleLinter(e){return this.emitter.on("should-toggle-linter",e)}dispose(){this.subscriptions.dispose()}}class ct{constructor(t,i){this.disabledProviders=[],this.action=t,this.emitter=new e.Emitter,this.providers=i,this.subscriptions=new e.CompositeDisposable,this.subscriptions.add(this.emitter),this.subscriptions.add(atom.config.observe("linter.disabledProviders",e=>{this.disabledProviders=e}))}async getItems(){return"disable"===this.action?this.providers.filter(e=>!this.disabledProviders.includes(e)):this.disabledProviders}async process(e){if("disable"===this.action)this.disabledProviders.push(e),this.emitter.emit("did-disable",e);else{const t=this.disabledProviders.indexOf(e);-1!==t&&this.disabledProviders.splice(t,1)}atom.config.set("linter.disabledProviders",this.disabledProviders)}async show(){rt||(rt=require("atom-select-list"));const t=new rt({items:await this.getItems(),emptyMessage:"No matches found",elementForItem:e=>{const t=document.createElement("li");return t.textContent=e,t},didConfirmSelection:e=>{this.process(e).catch(e=>console.error("[Linter] Unable to process toggle:",e)).then(()=>this.dispose())},didCancelSelection:()=>{this.dispose()},didConfirmEmptySelection:()=>{this.dispose()}}),i=atom.workspace.addModalPanel({item:t});t.focus(),this.subscriptions.add(new e.Disposable((function(){i.destroy()})))}onDidDispose(e){return this.emitter.on("did-dispose",e)}onDidDisable(e){return this.emitter.on("did-disable",e)}dispose(){this.emitter.emit("did-dispose"),this.subscriptions.dispose()}}class ht{constructor(){this.idleCallbacks=new Set,this.subscriptions=new e.CompositeDisposable,this.commands=new lt,this.subscriptions.add(this.commands),this.commands.onShouldLint(()=>{this.registryEditorsInit();const e=atom.workspace.getActiveTextEditor();if(void 0===e)return;const t=this.registryEditors.get(e);t&&t.lint()}),this.commands.onShouldToggleActiveEditor(()=>{const e=atom.workspace.getActiveTextEditor();if(void 0===e)return;this.registryEditorsInit();const t=this.registryEditors.get(e);t?t.dispose():e&&this.registryEditors.createFromTextEditor(e)}),this.commands.onShouldDebug(async()=>{this.registryUIInit(),this.registryIndieInit(),this.registryLintersInit(),this.commands.showDebug(this.registryLinters.getProviders(),this.registryIndie.getProviders(),this.registryUI.getProviders())}),this.commands.onShouldToggleLinter(e=>{this.registryLintersInit();const t=new ct(e,Ee(this.registryLinters.getProviders().map(e=>e.name)));t.onDidDispose(()=>{this.subscriptions.remove(t)}),t.onDidDisable(e=>{const t=this.registryLinters.getProviders().find(t=>t.name===e);t&&(this.registryMessagesInit(),this.registryMessages.deleteByLinter(t))}),t.show(),this.subscriptions.add(t)});const t=window.requestIdleCallback(()=>{this.idleCallbacks.delete(t),this.subscriptions.add(atom.project.onDidChangePaths(()=>{this.commands.lint()}))});this.idleCallbacks.add(t);const i=window.requestIdleCallback(()=>{this.idleCallbacks.delete(i),this.registryEditorsInit()});this.idleCallbacks.add(i)}dispose(){this.idleCallbacks.forEach(e=>window.cancelIdleCallback(e)),this.idleCallbacks.clear(),this.subscriptions.dispose()}registryEditorsInit(){void 0===this.registryEditors&&(this.registryEditors=new it,this.subscriptions.add(this.registryEditors),this.registryEditors.observe(e=>{e.onShouldLint(t=>{this.registryLintersInit(),this.registryLinters.lint({onChange:t,editor:e.getEditor()})}),e.onDidDestroy(()=>{this.registryMessagesInit(),this.registryEditors.hasSibling(e)||this.registryMessages.deleteByBuffer(e.getEditor().getBuffer())})}),this.registryEditors.activate())}registryLintersInit(){void 0===this.registryLinters&&(this.registryLinters=new et,this.subscriptions.add(this.registryLinters),this.registryLinters.onDidUpdateMessages(({linter:e,messages:t,buffer:i})=>{this.registryMessagesInit(),this.registryMessages.set({linter:e,messages:t,buffer:i})}),this.registryLinters.onDidBeginLinting(({linter:e,filePath:t})=>{this.registryUIInit(),this.registryUI.didBeginLinting(e,t)}),this.registryLinters.onDidFinishLinting(({linter:e,filePath:t})=>{this.registryUIInit(),this.registryUI.didFinishLinting(e,t)}))}registryIndieInit(){void 0===this.registryIndie&&(this.registryIndie=new Fe,this.subscriptions.add(this.registryIndie),this.registryIndie.observe(e=>{e.onDidDestroy(()=>{this.registryMessagesInit(),this.registryMessages.deleteByLinter(e)})}),this.registryIndie.onDidUpdate(({linter:e,messages:t})=>{this.registryMessagesInit(),this.registryMessages.set({linter:e,messages:t,buffer:null})}))}registryMessagesInit(){this.registryMessages||(this.registryMessages=new Ze,this.subscriptions.add(this.registryMessages),this.registryMessages.onDidUpdateMessages(e=>{this.registryUIInit(),this.registryUI.render(e)}))}registryUIInit(){void 0===this.registryUI&&(this.registryUI=new je,this.subscriptions.add(this.registryUI))}addUI(e){this.registryUIInit(),this.registryUI.add(e),this.registryMessagesInit();const t=this.registryMessages.messages;t.length&&e.render({added:t,messages:t,removed:[]})}deleteUI(e){this.registryUIInit(),this.registryUI.delete(e)}addLinter(e){this.registryLintersInit(),this.registryLinters.addLinter(e)}deleteLinter(e){this.registryLintersInit(),this.registryLinters.deleteLinter(e),this.registryMessagesInit(),this.registryMessages.deleteByLinter(e)}addIndie(e){return this.registryIndieInit(),this.registryIndie.register(e,2)}}exports.activate=function(){ot=new e.CompositeDisposable,nt=new ht,ot.add(nt),ot.add(atom.packages.onDidActivateInitialPackages((function(){atom.inSpecMode()||require("atom-package-deps").install("linter",!0)})))},exports.consumeLinter=function(t){let i;i=Array.isArray(t)?t:[t];for(const e of i)nt.addLinter(e);return new e.Disposable(()=>{for(const e of i)nt.deleteLinter(e)})},exports.consumeUI=function(t){let i;i=Array.isArray(t)?t:[t];for(const e of i)nt.addUI(e);return new e.Disposable(()=>{for(const e of i)nt.deleteUI(e)})},exports.deactivate=function(){ot.dispose()},exports.provideIndie=function(){return e=>nt.addIndie(e)}; +"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("atom"),t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},i="object"==typeof t&&t&&t.Object===Object&&t,s="object"==typeof self&&self&&self.Object===Object&&self,r=i||s||Function("return this")(),n=r.Symbol,o=Object.prototype,a=o.hasOwnProperty,d=o.toString,l=n?n.toStringTag:void 0;var c=function(e){var t=a.call(e,l),i=e[l];try{e[l]=void 0;var s=!0}catch(e){}var r=d.call(e);return s&&(t?e[l]=i:delete e[l]),r},h=Object.prototype.toString;var u=function(e){return h.call(e)},g=n?n.toStringTag:void 0;var p=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":g&&g in Object(e)?c(e):u(e)};var f=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)};var m,b=function(e){if(!f(e))return!1;var t=p(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t},v=r["__core-js_shared__"],y=(m=/[^.]+$/.exec(v&&v.keys&&v.keys.IE_PROTO||""))?"Symbol(src)_1."+m:"";var w=function(e){return!!y&&y in e},_=Function.prototype.toString;var I=function(e){if(null!=e){try{return _.call(e)}catch(e){}try{return e+""}catch(e){}}return""},L=/^\[object .+?Constructor\]$/,E=Function.prototype,D=Object.prototype,M=E.toString,P=D.hasOwnProperty,j=RegExp("^"+M.call(P).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");var C=function(e){return!(!f(e)||w(e))&&(b(e)?j:L).test(I(e))};var A=function(e,t){return null==e?void 0:e[t]};var O=function(e,t){var i=A(e,t);return C(i)?i:void 0},S=O(Object,"create");var U=function(){this.__data__=S?S(null):{},this.size=0};var $=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},N=Object.prototype.hasOwnProperty;var T=function(e){var t=this.__data__;if(S){var i=t[e];return"__lodash_hash_undefined__"===i?void 0:i}return N.call(t,e)?t[e]:void 0},k=Object.prototype.hasOwnProperty;var x=function(e){var t=this.__data__;return S?void 0!==t[e]:k.call(t,e)};var R=function(e,t){var i=this.__data__;return this.size+=this.has(e)?0:1,i[e]=S&&void 0===t?"__lodash_hash_undefined__":t,this};function F(e){var t=-1,i=null==e?0:e.length;for(this.clear();++t-1};var X=function(e,t){var i=this.__data__,s=V(i,e);return s<0?(++this.size,i.push([e,t])):i[s][1]=t,this};function H(e){var t=-1,i=null==e?0:e.length;for(this.clear();++t-1};var be=function(e,t,i){for(var s=-1,r=null==e?0:e.length;++s=200){var l=t?null:Ie(e);if(l)return _e(l);o=!1,r=ve,d=new he}else d=t?[]:a;e:for(;++s" • "+e);atom.notifications.addWarning("[Linter] "+e,{dismissable:!0,detail:`${t}\n${s.join("\n")}`})}const Me=new Set(["error","warning","info"]);function Pe(t,i){const s=[];if(Array.isArray(i)){let t=!1,r=!1,n=!1,o=!1,a=!1,d=!1,l=!1,c=!1,h=!1;for(let u=0,{length:g}=i;ue.concat(t.getScopeDescriptor().getScopesArray()),["*"]))}let Ue;function $e(e,t,i){if(!e)return!0;if(i){let t=null;const i=atom.project.getPaths();for(let s=0,{length:r}=i;s!o.includes(e)),d=new Set;for(let e=0,t=a.length;e{xe(e,t)}),e}clearMessages(){this.subscriptions.disposed||(this.emitter.emit("did-update",[]),this.messages.clear())}setMessages(e,t=null){if("string"!=typeof e||!Array.isArray(t))throw new Error("Invalid Parameters to setMessages()");!this.subscriptions.disposed&&Pe(this.name,t)&&(t.forEach((function(t){if(t.location.file!==e)throw console.debug("[Linter-UI-Default] Expected File",e,"Message",t),new Error("message.location.file does not match the given filePath")})),Te(this.name,t),this.messages.set(e,t),this.emitter.emit("did-update",this.getMessages()))}setAllMessages(e){if(!this.subscriptions.disposed&&(Array.isArray(e)&&!atom.inDevMode()||Pe(this.name,e))){Te(this.name,e),this.messages.clear();for(let t=0,{length:i}=e;t{this.delegates.delete(i)}),i.onDidUpdate(e=>{this.emitter.emit("did-update",{linter:i,messages:e})}),this.emitter.emit("observe",i),i}getProviders(){return Array.from(this.delegates)}observe(e){return this.delegates.forEach(e),this.emitter.on("observe",e)}onDidUpdate(e){return this.emitter.on("did-update",e)}dispose(){for(const e of this.delegates)e.dispose();this.subscriptions.dispose()}}var Be=function(){return r.Date.now()};var ze=function(e){return null!=e&&"object"==typeof e};var qe=function(e){return"symbol"==typeof e||ze(e)&&"[object Symbol]"==p(e)},Ve=/^\s+|\s+$/g,Ge=/^[-+]0x[0-9a-f]+$/i,Ke=/^0b[01]+$/i,We=/^0o[0-7]+$/i,Ye=parseInt;var Xe=function(e){if("number"==typeof e)return e;if(qe(e))return NaN;if(f(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=f(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(Ve,"");var i=Ke.test(e);return i||We.test(e)?Ye(e.slice(2),i?2:8):Ge.test(e)?NaN:+e},He=Math.max,Je=Math.min;var Qe=function(e,t,i){var s,r,n,o,a,d,l=0,c=!1,h=!1,u=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function g(t){var i=s,n=r;return s=r=void 0,l=t,o=e.apply(n,i)}function p(e){return l=e,a=setTimeout(b,t),c?g(e):o}function m(e){var i=e-d;return void 0===d||i>=t||i<0||h&&e-l>=n}function b(){var e=Be();if(m(e))return v(e);a=setTimeout(b,function(e){var i=t-(e-d);return h?Je(i,n-(e-l)):i}(e))}function v(e){return a=void 0,u&&s?g(e):(s=r=void 0,o)}function y(){var e=Be(),i=m(e);if(s=arguments,r=this,d=e,i){if(void 0===a)return p(d);if(h)return clearTimeout(a),a=setTimeout(b,t),g(d)}return void 0===a&&(a=setTimeout(b,t)),o}return t=Xe(t)||0,f(i)&&(c=!!i.leading,n=(h="maxWait"in i)?He(Xe(i.maxWait)||0,t):n,u="trailing"in i?!!i.trailing:u),y.cancel=function(){void 0!==a&&clearTimeout(a),l=0,s=d=r=a=void 0},y.flush=function(){return void 0===a?o:v(Be())},y};class Ze{constructor(){this.emitter=new e.Emitter,this.messages=[],this.messagesMap=new Set,this.subscriptions=new e.CompositeDisposable,this.debouncedUpdate=Qe(this.update,100,{leading:!0}),this.subscriptions.add(this.emitter)}set({messages:e,linter:t,buffer:i}){let s=null;for(const e of this.messagesMap)if(e.buffer===i&&e.linter===t){s=e;break}s?(s.messages=e,s.changed=!0):this.messagesMap.add({messages:e,linter:t,buffer:i,oldMessages:[],changed:!0,deleted:!1}),this.debouncedUpdate()}update(){const e={added:[],removed:[],messages:[]};for(const t of this.messagesMap){if(t.deleted){xe(e.removed,t.oldMessages),this.messagesMap.delete(t);continue}if(!t.changed){xe(e.messages,t.oldMessages);continue}const i=ke(t.messages,t.oldMessages);if(null!==i){const{oldKept:s,oldRemoved:r,newAdded:n}=i;xe(e.added,n),xe(e.removed,r);const o=n.concat(s);xe(e.messages,o),t.oldMessages=o}}(e.added.length||e.removed.length)&&(this.messages=e.messages,this.emitter.emit("did-update-messages",e))}onDidUpdateMessages(e){return this.emitter.on("did-update-messages",e)}deleteByBuffer(e){for(const t of this.messagesMap)t.buffer===e&&(t.deleted=!0);this.debouncedUpdate()}deleteByLinter(e){for(const t of this.messagesMap)t.linter===e&&(t.deleted=!0);this.debouncedUpdate()}dispose(){this.subscriptions.dispose()}}class et{constructor(){this.emitter=new e.Emitter,this.linters=new Set,this.lintOnChange=!0,this.ignoreVCS=!0,this.ignoreGlob="**/*.min.{js,css}",this.lintPreviewTabs=!0,this.subscriptions=new e.CompositeDisposable,this.disabledProviders=[],this.activeNotifications=new Set,this.subscriptions.add(this.emitter,atom.config.observe("linter.lintOnChange",e=>{this.lintOnChange=e}),atom.config.observe("core.excludeVcsIgnoredPaths",e=>{this.ignoreVCS=e}),atom.config.observe("linter.ignoreGlob",e=>{this.ignoreGlob=e}),atom.config.observe("linter.lintPreviewTabs",e=>{this.lintPreviewTabs=e}),atom.config.observe("linter.disabledProviders",e=>{this.disabledProviders=e}))}hasLinter(e){return this.linters.has(e)}addLinter(e){(function(e){const t=[];return e&&"object"==typeof e?("string"!=typeof e.name&&t.push("Linter.name must be a string"),("string"!=typeof e.scope||"file"!==e.scope&&"project"!==e.scope)&&t.push("Linter.scope must be either 'file' or 'project'"),"boolean"!=typeof e.lintsOnChange&&t.push("Linter.lintsOnChange must be a boolean"),Array.isArray(e.grammarScopes)||t.push("Linter.grammarScopes must be an Array"),"function"!=typeof e.lint&&t.push("Linter.lint must be a function")):t.push("Linter must be an object"),!t.length||(De("Invalid Linter received",`These issues were encountered while registering a Linter named '${e&&e.name?e.name:"Unknown"}'`,t),!1)})(e)&&(e[Ce]=!0,void 0===e.__$sb_linter_request_latest&&(e.__$sb_linter_request_latest=0),void 0===e[Ae]&&(e[Ae]=0),e.__$sb_linter_version=2,this.linters.add(e))}getProviders(){return Array.from(this.linters)}deleteLinter(e){this.linters.has(e)&&(e[Ce]=!1,this.linters.delete(e))}async lint({onChange:e,editor:t}){const i=t.getPath();if(e&&!this.lintOnChange||$e(t.getPath(),this.ignoreGlob,this.ignoreVCS)||!this.lintPreviewTabs&&atom.workspace.getActivePane().getPendingItem()===t)return!1;const s=Se(t),r=[];for(const n of this.linters){if(!Oe(n,e,s))continue;if(this.disabledProviders.includes(n.name))continue;const o=++n.__$sb_linter_request_latest,a="file"===n.scope?t.getBuffer():null,d="file"===n.scope?i:null;this.emitter.emit("did-begin-linting",{number:o,linter:n,filePath:d}),r.push(new Promise((function(e){e(n.lint(t))})).then(e=>{if(this.emitter.emit("did-finish-linting",{number:o,linter:n,filePath:d}),n[Ae]>=o||!n[Ce]||a&&!a.isAlive())return;if(n[Ae]=o,a&&!a.isAlive())return;if(null===e)return;let t=!0;!atom.inDevMode()&&Array.isArray(e)||(t=Pe(n.name,e)),t&&(Te(n.name,e),this.emitter.emit("did-update-messages",{messages:e,linter:n,buffer:a}))},e=>{this.emitter.emit("did-finish-linting",{number:o,linter:n,filePath:d}),console.error("[Linter] Error running "+n.name,e);const t="[Linter] Error running "+n.name;if(Array.from(this.activeNotifications).some(e=>e.getOptions().detail===t))return;const i=atom.notifications.addError(t,{detail:"See Console for more info.",dismissable:!0,buttons:[{text:"Open Console",onDidClick:()=>{atom.openDevTools(),i.dismiss()}},{text:"Cancel",onDidClick:()=>{i.dismiss()}}]})}))}return await Promise.all(r),!0}onDidUpdateMessages(e){return this.emitter.on("did-update-messages",e)}onDidBeginLinting(e){return this.emitter.on("did-begin-linting",e)}onDidFinishLinting(e){return this.emitter.on("did-finish-linting",e)}dispose(){this.activeNotifications.forEach(e=>e.dismiss()),this.activeNotifications.clear(),this.linters.clear(),this.subscriptions.dispose()}}class tt{constructor(t){if(this.emitter=new e.Emitter,this.subscriptions=new e.CompositeDisposable,!atom.workspace.isTextEditor(t))throw new Error("EditorLinter expects a valid TextEditor");const i=t.getBuffer(),s=Qe(()=>{this.emitter.emit("should-lint",!1)},50,{leading:!0});this.editor=t,this.subscriptions.add(this.editor.onDidDestroy(()=>this.dispose()),this.editor.onDidSave(s),i.onDidReload(s),this.subscriptiveObserve(atom.config,"linter.lintOnChangeInterval",e=>i.onDidChange(Qe(()=>{this.emitter.emit("should-lint",!0)},e))))}getEditor(){return this.editor}lint(e=!1){this.emitter.emit("should-lint",e)}onShouldLint(e){return this.emitter.on("should-lint",e)}onDidDestroy(e){return this.emitter.on("did-destroy",e)}dispose(){this.emitter.emit("did-destroy"),this.subscriptions.dispose(),this.emitter.dispose()}subscriptiveObserve(t,i,s){let r=null;const n=t.observe(i,e=>{r&&r.dispose(),r=s.call(this,e)});return new e.Disposable((function(){n.dispose(),r&&r.dispose()}))}}class it{constructor(){this.emitter=new e.Emitter,this.lintOnOpen=!0,this.subscriptions=new e.CompositeDisposable,this.editorLinters=new Map,this.subscriptions.add(this.emitter,atom.config.observe("linter.lintOnOpen",e=>{this.lintOnOpen=e}))}activate(){this.subscriptions.add(atom.workspace.observeTextEditors(e=>{this.createFromTextEditor(e)}))}get(e){return this.editorLinters.get(e)}createFromTextEditor(e){let t=this.editorLinters.get(e);return t||(t=new tt(e),t.onDidDestroy(()=>{this.editorLinters.delete(e)}),this.editorLinters.set(e,t),this.emitter.emit("observe",t),this.lintOnOpen&&t.lint(),t)}hasSibling(e){const t=e.getEditor().getBuffer();return Array.from(this.editorLinters.keys()).some(e=>e.getBuffer()===t)}observe(e){return this.editorLinters.forEach(e),this.emitter.on("observe",e)}dispose(){for(const e of this.editorLinters.values())e.dispose();this.subscriptions.dispose()}}let st,rt,nt,ot;function at(e){let t;if(e&&"object"==typeof e&&"string"==typeof e.name)t=e.name;else{if("string"!=typeof e)throw new Error("Unknown object passed to formatItem()");t=e}return" - "+t}function dt(e,t){return e.name.localeCompare(t.name)}class lt{constructor(){this.emitter=new e.Emitter,this.subscriptions=new e.CompositeDisposable,this.subscriptions.add(this.emitter,atom.commands.add("atom-workspace",{"linter:enable-linter":()=>this.enableLinter(),"linter:disable-linter":()=>this.disableLinter()}),atom.commands.add("atom-text-editor:not([mini])",{"linter:lint":()=>this.lint(),"linter:debug":()=>this.debug(),"linter:toggle-active-editor":()=>this.toggleActiveEditor()}))}lint(){this.emitter.emit("should-lint")}debug(){this.emitter.emit("should-debug")}enableLinter(){this.emitter.emit("should-toggle-linter","enable")}disableLinter(){this.emitter.emit("should-toggle-linter","disable")}toggleActiveEditor(){this.emitter.emit("should-toggle-active-editor")}showDebug(e,t,i){st||(st=require("../package.json"));const s=atom.workspace.getActiveTextEditor();if(void 0===s)return;const r=Se(s),n=e.slice().sort(dt),o=t.slice().sort(dt),a=i.slice().sort(dt),d=o.map(at).join("\n"),l=n.map(at).join("\n"),c=n.filter(e=>Oe(e,!1,r)).map(at).join("\n"),h=r.map(at).join("\n"),u=a.map(at).join("\n"),g=atom.config.get("linter.ignoreGlob"),p=atom.config.get("core.excludeVcsIgnoredPaths"),f=atom.config.get("linter.disabledProviders").map(at).join("\n"),m=$e(s.getPath(),g,p);atom.notifications.addInfo("Linter Debug Info",{detail:["Platform: "+process.platform,"Atom Version: "+atom.getVersion(),"Linter Version: "+st.version,"Opened file is ignored: "+(m?"Yes":"No"),"Matching Linter Providers: \n"+c,"Disabled Linter Providers: \n"+f,"Standard Linter Providers: \n"+l,"Indie Linter Providers: \n"+d,"UI Providers: \n"+u,"Ignore Glob: "+g,"VCS Ignored Paths are excluded: "+p,"Current File Scopes: \n"+h].join("\n"),dismissable:!0})}onShouldLint(e){return this.emitter.on("should-lint",e)}onShouldDebug(e){return this.emitter.on("should-debug",e)}onShouldToggleActiveEditor(e){return this.emitter.on("should-toggle-active-editor",e)}onShouldToggleLinter(e){return this.emitter.on("should-toggle-linter",e)}dispose(){this.subscriptions.dispose()}}class ct{constructor(t,i){this.emitter=new e.Emitter,this.subscriptions=new e.CompositeDisposable,this.disabledProviders=[],this.action=t,this.providers=i,this.subscriptions.add(this.emitter,atom.config.observe("linter.disabledProviders",e=>{this.disabledProviders=e}))}async getItems(){return"disable"===this.action?this.providers.filter(e=>!this.disabledProviders.includes(e)):this.disabledProviders}async process(e){if("disable"===this.action)this.disabledProviders.push(e),this.emitter.emit("did-disable",e);else{const t=this.disabledProviders.indexOf(e);-1!==t&&this.disabledProviders.splice(t,1)}atom.config.set("linter.disabledProviders",this.disabledProviders)}async show(){rt||(rt=require("atom-select-list"));const t=new rt({items:await this.getItems(),emptyMessage:"No matches found",elementForItem:e=>{const t=document.createElement("li");return t.textContent=e,t},didConfirmSelection:e=>{this.process(e).catch(e=>console.error("[Linter] Unable to process toggle:",e)).then(()=>this.dispose())},didCancelSelection:()=>{this.dispose()},didConfirmEmptySelection:()=>{this.dispose()}}),i=atom.workspace.addModalPanel({item:t});t.focus(),this.subscriptions.add(new e.Disposable((function(){i.destroy()})))}onDidDispose(e){return this.emitter.on("did-dispose",e)}onDidDisable(e){return this.emitter.on("did-disable",e)}dispose(){this.emitter.emit("did-dispose"),this.subscriptions.dispose()}}class ht{constructor(){this.commands=new lt,this.subscriptions=new e.CompositeDisposable,this.idleCallbacks=new Set,this.subscriptions.add(this.commands),this.commands.onShouldLint(()=>{this.registryEditorsInit();const e=atom.workspace.getActiveTextEditor();if(void 0===e)return;const t=this.registryEditors.get(e);t&&t.lint()}),this.commands.onShouldToggleActiveEditor(()=>{const e=atom.workspace.getActiveTextEditor();if(void 0===e)return;this.registryEditorsInit();const t=this.registryEditors.get(e);t?t.dispose():e&&this.registryEditors.createFromTextEditor(e)}),this.commands.onShouldDebug(async()=>{this.registryUIInit(),this.registryIndieInit(),this.registryLintersInit(),this.commands.showDebug(this.registryLinters.getProviders(),this.registryIndie.getProviders(),this.registryUI.getProviders())}),this.commands.onShouldToggleLinter(e=>{this.registryLintersInit();const t=new ct(e,Ee(this.registryLinters.getProviders().map(e=>e.name)));t.onDidDispose(()=>{this.subscriptions.remove(t)}),t.onDidDisable(e=>{const t=this.registryLinters.getProviders().find(t=>t.name===e);t&&(this.registryMessagesInit(),this.registryMessages.deleteByLinter(t))}),t.show(),this.subscriptions.add(t)});const t=window.requestIdleCallback(()=>{this.idleCallbacks.delete(t),this.subscriptions.add(atom.project.onDidChangePaths(()=>{this.commands.lint()}))});this.idleCallbacks.add(t);const i=window.requestIdleCallback(()=>{this.idleCallbacks.delete(i),this.registryEditorsInit()});this.idleCallbacks.add(i)}dispose(){this.idleCallbacks.forEach(e=>window.cancelIdleCallback(e)),this.idleCallbacks.clear(),this.subscriptions.dispose()}registryEditorsInit(){void 0===this.registryEditors&&(this.registryEditors=new it,this.subscriptions.add(this.registryEditors),this.registryEditors.observe(e=>{e.onShouldLint(t=>{this.registryLintersInit(),this.registryLinters.lint({onChange:t,editor:e.getEditor()})}),e.onDidDestroy(()=>{this.registryMessagesInit(),this.registryEditors.hasSibling(e)||this.registryMessages.deleteByBuffer(e.getEditor().getBuffer())})}),this.registryEditors.activate())}registryLintersInit(){void 0===this.registryLinters&&(this.registryLinters=new et,this.subscriptions.add(this.registryLinters),this.registryLinters.onDidUpdateMessages(({linter:e,messages:t,buffer:i})=>{this.registryMessagesInit(),this.registryMessages.set({linter:e,messages:t,buffer:i})}),this.registryLinters.onDidBeginLinting(({linter:e,filePath:t})=>{this.registryUIInit(),this.registryUI.didBeginLinting(e,t)}),this.registryLinters.onDidFinishLinting(({linter:e,filePath:t})=>{this.registryUIInit(),this.registryUI.didFinishLinting(e,t)}))}registryIndieInit(){void 0===this.registryIndie&&(this.registryIndie=new Fe,this.subscriptions.add(this.registryIndie),this.registryIndie.observe(e=>{e.onDidDestroy(()=>{this.registryMessagesInit(),this.registryMessages.deleteByLinter(e)})}),this.registryIndie.onDidUpdate(({linter:e,messages:t})=>{this.registryMessagesInit(),this.registryMessages.set({linter:e,messages:t,buffer:null})}))}registryMessagesInit(){this.registryMessages||(this.registryMessages=new Ze,this.subscriptions.add(this.registryMessages),this.registryMessages.onDidUpdateMessages(e=>{this.registryUIInit(),this.registryUI.render(e)}))}registryUIInit(){void 0===this.registryUI&&(this.registryUI=new je,this.subscriptions.add(this.registryUI))}addUI(e){this.registryUIInit(),this.registryUI.add(e),this.registryMessagesInit();const t=this.registryMessages.messages;t.length&&e.render({added:t,messages:t,removed:[]})}deleteUI(e){this.registryUIInit(),this.registryUI.delete(e)}addLinter(e){this.registryLintersInit(),this.registryLinters.addLinter(e)}deleteLinter(e){this.registryLintersInit(),this.registryLinters.deleteLinter(e),this.registryMessagesInit(),this.registryMessages.deleteByLinter(e)}addIndie(e){return this.registryIndieInit(),this.registryIndie.register(e,2)}}exports.activate=function(){ot=new e.CompositeDisposable,nt=new ht,ot.add(nt,atom.packages.onDidActivateInitialPackages((function(){atom.inSpecMode()||require("atom-package-deps").install("linter",!0)})))},exports.consumeLinter=function(t){let i;i=Array.isArray(t)?t:[t];for(const e of i)nt.addLinter(e);return new e.Disposable(()=>{for(const e of i)nt.deleteLinter(e)})},exports.consumeUI=function(t){let i;i=Array.isArray(t)?t:[t];for(const e of i)nt.addUI(e);return new e.Disposable(()=>{for(const e of i)nt.deleteUI(e)})},exports.deactivate=function(){ot.dispose()},exports.provideIndie=function(){return e=>nt.addIndie(e)}; //# sourceMappingURL=index.js.map diff --git a/dist/index.js.map b/dist/index.js.map index 04a4741c..49e1bbcf 100644 --- a/dist/index.js.map +++ b/dist/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sources":["../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_root.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/isObject.js","../node_modules/lodash/isFunction.js","../node_modules/lodash/_isMasked.js","../node_modules/lodash/_coreJsData.js","../node_modules/lodash/_toSource.js","../node_modules/lodash/_baseIsNative.js","../node_modules/lodash/_getValue.js","../node_modules/lodash/_getNative.js","../node_modules/lodash/_nativeCreate.js","../node_modules/lodash/_hashClear.js","../node_modules/lodash/_hashDelete.js","../node_modules/lodash/_hashGet.js","../node_modules/lodash/_hashHas.js","../node_modules/lodash/_hashSet.js","../node_modules/lodash/_Hash.js","../node_modules/lodash/_listCacheClear.js","../node_modules/lodash/eq.js","../node_modules/lodash/_assocIndexOf.js","../node_modules/lodash/_listCacheDelete.js","../node_modules/lodash/_listCacheGet.js","../node_modules/lodash/_listCacheHas.js","../node_modules/lodash/_listCacheSet.js","../node_modules/lodash/_ListCache.js","../node_modules/lodash/_Map.js","../node_modules/lodash/_mapCacheClear.js","../node_modules/lodash/_isKeyable.js","../node_modules/lodash/_getMapData.js","../node_modules/lodash/_mapCacheDelete.js","../node_modules/lodash/_mapCacheGet.js","../node_modules/lodash/_mapCacheHas.js","../node_modules/lodash/_mapCacheSet.js","../node_modules/lodash/_MapCache.js","../node_modules/lodash/_setCacheAdd.js","../node_modules/lodash/_setCacheHas.js","../node_modules/lodash/_SetCache.js","../node_modules/lodash/_baseFindIndex.js","../node_modules/lodash/_baseIsNaN.js","../node_modules/lodash/_strictIndexOf.js","../node_modules/lodash/_baseIndexOf.js","../node_modules/lodash/_arrayIncludes.js","../node_modules/lodash/_arrayIncludesWith.js","../node_modules/lodash/_cacheHas.js","../node_modules/lodash/_Set.js","../node_modules/lodash/noop.js","../node_modules/lodash/_setToArray.js","../node_modules/lodash/_createSet.js","../node_modules/lodash/_baseUniq.js","../node_modules/lodash/uniq.js","../lib/validate/helpers.ts","../lib/validate/index.ts","../lib/ui-registry.ts","../lib/helpers.ts","../lib/indie-delegate.ts","../lib/indie-registry.ts","../node_modules/lodash/now.js","../node_modules/lodash/isObjectLike.js","../node_modules/lodash/isSymbol.js","../node_modules/lodash/toNumber.js","../node_modules/lodash/debounce.js","../lib/message-registry.ts","../lib/linter-registry.ts","../lib/editor-linter.ts","../lib/editor-registry.ts","../lib/commands.ts","../lib/toggle-view.ts","../lib/index.ts","../lib/main.ts"],"sourcesContent":["/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nmodule.exports = setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = baseFindIndex;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\nmodule.exports = baseIsNaN;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = strictIndexOf;\n","var baseFindIndex = require('./_baseFindIndex'),\n baseIsNaN = require('./_baseIsNaN'),\n strictIndexOf = require('./_strictIndexOf');\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nmodule.exports = baseIndexOf;\n","var baseIndexOf = require('./_baseIndexOf');\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nmodule.exports = arrayIncludes;\n","/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arrayIncludesWith;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nmodule.exports = noop;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nmodule.exports = setToArray;\n","var Set = require('./_Set'),\n noop = require('./noop'),\n setToArray = require('./_setToArray');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\nmodule.exports = createSet;\n","var SetCache = require('./_SetCache'),\n arrayIncludes = require('./_arrayIncludes'),\n arrayIncludesWith = require('./_arrayIncludesWith'),\n cacheHas = require('./_cacheHas'),\n createSet = require('./_createSet'),\n setToArray = require('./_setToArray');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nmodule.exports = baseUniq;\n","var baseUniq = require('./_baseUniq');\n\n/**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\nfunction uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n}\n\nmodule.exports = uniq;\n","export function showError(title: string, description: string, points: Array) {\n const renderedPoints = points.map(item => ` • ${item}`)\n atom.notifications.addWarning(`[Linter] ${title}`, {\n dismissable: true,\n detail: `${description}\\n${renderedPoints.join('\\n')}`,\n })\n}\n","import { Range, Point } from 'atom'\nimport { showError } from './helpers'\nimport type { UI, Linter, Message, Indie } from '../types'\n\nconst VALID_SEVERITY = new Set(['error', 'warning', 'info'])\n\nfunction validateUI(ui: UI): boolean {\n const messages = []\n\n if (ui && typeof ui === 'object') {\n if (typeof ui.name !== 'string') {\n messages.push('UI.name must be a string')\n }\n if (typeof ui.didBeginLinting !== 'function') {\n messages.push('UI.didBeginLinting must be a function')\n }\n if (typeof ui.didFinishLinting !== 'function') {\n messages.push('UI.didFinishLinting must be a function')\n }\n if (typeof ui.render !== 'function') {\n messages.push('UI.render must be a function')\n }\n if (typeof ui.dispose !== 'function') {\n messages.push('UI.dispose must be a function')\n }\n } else {\n messages.push('UI must be an object')\n }\n\n if (messages.length) {\n showError(\n 'Invalid UI received',\n `These issues were encountered while registering the UI named '${ui && ui.name ? ui.name : 'Unknown'}'`,\n messages,\n )\n return false\n }\n\n return true\n}\n\nfunction validateLinter(linter: Linter): boolean {\n const messages = []\n\n if (linter && typeof linter === 'object') {\n if (typeof linter.name !== 'string') {\n messages.push('Linter.name must be a string')\n }\n if (typeof linter.scope !== 'string' || (linter.scope !== 'file' && linter.scope !== 'project')) {\n messages.push(\"Linter.scope must be either 'file' or 'project'\")\n }\n if (typeof linter.lintsOnChange !== 'boolean') {\n messages.push('Linter.lintsOnChange must be a boolean')\n }\n if (!Array.isArray(linter.grammarScopes)) {\n messages.push('Linter.grammarScopes must be an Array')\n }\n if (typeof linter.lint !== 'function') {\n messages.push('Linter.lint must be a function')\n }\n } else {\n messages.push('Linter must be an object')\n }\n\n if (messages.length) {\n showError(\n 'Invalid Linter received',\n `These issues were encountered while registering a Linter named '${linter && linter.name ? linter.name : 'Unknown'}'`,\n messages,\n )\n return false\n }\n\n return true\n}\n\nfunction validateIndie(indie: Indie): boolean {\n const messages = []\n\n if (indie && typeof indie === 'object') {\n if (typeof indie.name !== 'string') {\n messages.push('Indie.name must be a string')\n }\n } else {\n messages.push('Indie must be an object')\n }\n\n if (messages.length) {\n showError(\n 'Invalid Indie received',\n `These issues were encountered while registering an Indie Linter named '${\n indie && indie.name ? indie.name : 'Unknown'\n }'`,\n messages,\n )\n return false\n }\n\n return true\n}\n\nfunction validateMessages(linterName: string, entries: Array): boolean {\n const messages = []\n\n if (Array.isArray(entries)) {\n let invalidURL = false\n let invalidIcon = false\n let invalidExcerpt = false\n let invalidLocation = false\n let invalidSeverity = false\n let invalidSolution = false\n let invalidReference = false\n let invalidDescription = false\n let invalidLinterName = false\n\n for (let i = 0, { length } = entries; i < length; ++i) {\n const message = entries[i]\n const { reference } = message\n if (!invalidIcon && message.icon && typeof message.icon !== 'string') {\n invalidIcon = true\n messages.push('Message.icon must be a string')\n }\n if (\n !invalidLocation &&\n (!message.location ||\n typeof message.location !== 'object' ||\n typeof message.location.file !== 'string' ||\n typeof message.location.position !== 'object' ||\n !message.location.position)\n ) {\n invalidLocation = true\n messages.push('Message.location must be valid')\n } else if (!invalidLocation) {\n const range = Range.fromObject(message.location.position)\n if (\n Number.isNaN(range.start.row) ||\n Number.isNaN(range.start.column) ||\n Number.isNaN(range.end.row) ||\n Number.isNaN(range.end.column)\n ) {\n invalidLocation = true\n messages.push('Message.location.position should not contain NaN coordinates')\n }\n }\n if (!invalidSolution && message.solutions && !Array.isArray(message.solutions)) {\n invalidSolution = true\n messages.push('Message.solutions must be valid')\n }\n if (\n !invalidReference &&\n reference &&\n (typeof reference !== 'object' ||\n typeof reference.file !== 'string' ||\n typeof reference.position !== 'object' ||\n !reference.position)\n ) {\n invalidReference = true\n messages.push('Message.reference must be valid')\n } else if (!invalidReference && reference && reference.position !== undefined) {\n const position = Point.fromObject(reference.position)\n if (Number.isNaN(position.row) || Number.isNaN(position.column)) {\n invalidReference = true\n messages.push('Message.reference.position should not contain NaN coordinates')\n }\n }\n if (!invalidExcerpt && typeof message.excerpt !== 'string') {\n invalidExcerpt = true\n messages.push('Message.excerpt must be a string')\n }\n if (!invalidSeverity && !VALID_SEVERITY.has(message.severity)) {\n invalidSeverity = true\n messages.push(\"Message.severity must be 'error', 'warning' or 'info'\")\n }\n if (!invalidURL && message.url && typeof message.url !== 'string') {\n invalidURL = true\n messages.push('Message.url must be a string')\n }\n if (\n !invalidDescription &&\n message.description &&\n typeof message.description !== 'function' &&\n typeof message.description !== 'string'\n ) {\n invalidDescription = true\n messages.push('Message.description must be a function or string')\n }\n if (!invalidLinterName && message.linterName && typeof message.linterName !== 'string') {\n invalidLinterName = true\n messages.push('Message.linterName must be a string')\n }\n }\n } else {\n messages.push('Linter Result must be an Array')\n }\n\n if (messages.length) {\n showError(\n 'Invalid Linter Result received',\n `These issues were encountered while processing messages from a linter named '${linterName}'`,\n messages,\n )\n return false\n }\n\n return true\n}\n\nexport { validateUI as ui, validateLinter as linter, validateIndie as indie, validateMessages as messages }\n","import { CompositeDisposable } from 'atom'\nimport { ui as validateUI } from './validate'\nimport type { Linter, UI, MessagesPatch } from './types'\n\nclass UIRegistry {\n providers: Set\n subscriptions: CompositeDisposable\n\n constructor() {\n this.providers = new Set()\n this.subscriptions = new CompositeDisposable()\n }\n add(ui: UI) {\n if (!this.providers.has(ui) && validateUI(ui)) {\n this.subscriptions.add(ui)\n this.providers.add(ui)\n }\n }\n delete(provider: UI) {\n if (this.providers.has(provider)) {\n provider.dispose()\n this.providers.delete(provider)\n }\n }\n getProviders(): Array {\n return Array.from(this.providers)\n }\n render(messages: MessagesPatch) {\n this.providers.forEach(function (provider) {\n provider.render(messages)\n })\n }\n didBeginLinting(linter: Linter, filePath: string | null | undefined = null) {\n this.providers.forEach(function (provider) {\n provider.didBeginLinting(linter, filePath)\n })\n }\n didFinishLinting(linter: Linter, filePath: string | null | undefined = null) {\n this.providers.forEach(function (provider) {\n provider.didFinishLinting(linter, filePath)\n })\n }\n dispose() {\n this.providers.clear()\n this.subscriptions.dispose()\n }\n}\n\nexport default UIRegistry\n","import arrayUnique from 'lodash/uniq'\nimport { Range, Point } from 'atom'\nimport type { TextEditor } from 'atom'\nimport type { Linter, Message, MessageSolution } from './types'\n\nexport const $version = '__$sb_linter_version'\nexport const $activated = '__$sb_linter_activated'\nexport const $requestLatest = '__$sb_linter_request_latest'\nexport const $requestLastReceived = '__$sb_linter_request_last_received'\n\nexport function shouldTriggerLinter(linter: Linter, wasTriggeredOnChange: boolean, scopes: Array): boolean {\n if (wasTriggeredOnChange && !linter.lintsOnChange) {\n return false\n }\n return scopes.some(function (scope) {\n return linter.grammarScopes.includes(scope)\n })\n}\n\nexport function getEditorCursorScopes(textEditor: TextEditor): Array {\n return arrayUnique(\n textEditor.getCursors().reduce((scopes, cursor) => scopes.concat(cursor.getScopeDescriptor().getScopesArray()), ['*']),\n )\n}\n\nlet minimatch: typeof import('minimatch')\nexport function isPathIgnored(filePath: string | null | undefined, ignoredGlob: string, ignoredVCS: boolean): boolean {\n if (!filePath) {\n return true\n }\n\n if (ignoredVCS) {\n let repository = null\n const projectPaths = atom.project.getPaths()\n for (let i = 0, { length } = projectPaths; i < length; ++i) {\n const projectPath = projectPaths[i]\n if (filePath.indexOf(projectPath) === 0) {\n repository = atom.project.getRepositories()[i]\n break\n }\n }\n if (repository && repository.isPathIgnored(filePath)) {\n return true\n }\n }\n const normalizedFilePath = process.platform === 'win32' ? filePath.replace(/\\\\/g, '/') : filePath\n if (!minimatch) {\n minimatch = require('minimatch')\n }\n return minimatch(normalizedFilePath, ignoredGlob)\n}\n\nexport function updateMessageKey(message: Message) {\n const { reference, location } = message\n message.key = [\n `$LINTER:${message.linterName}`,\n `$LOCATION:${location.file}$${location.position.start.row}$${location.position.start.column}$${location.position.end.row}$${location.position.end.column}`,\n reference\n ? `$REFERENCE:${reference.file}$${reference.position ? `${reference.position.row}$${reference.position.column}` : ''}`\n : '$REFERENCE:null',\n `$EXCERPT:${message.excerpt}`,\n `$SEVERITY:${message.severity}`,\n message.icon ? `$ICON:${message.icon}` : '$ICON:null',\n message.url ? `$URL:${message.url}` : '$URL:null',\n typeof message.description === 'string' ? `$DESCRIPTION:${message.description}` : '$DESCRIPTION:null',\n ].join('')\n}\n\nexport function normalizeMessages(linterName: string, messages: Array) {\n for (let i = 0, { length } = messages; i < length; ++i) {\n const message = messages[i]\n const { reference } = message\n if (Array.isArray(message.location.position)) {\n message.location.position = Range.fromObject(message.location.position)\n }\n if (reference && Array.isArray(reference.position)) {\n reference.position = Point.fromObject(reference.position)\n }\n if (message.solutions && message.solutions.length) {\n for (let j = 0, _length = message.solutions.length, solution: MessageSolution; j < _length; j++) {\n solution = message.solutions[j]\n if (Array.isArray(solution.position)) {\n solution.position = Range.fromObject(solution.position)\n }\n }\n }\n message.version = 2\n if (!message.linterName) {\n message.linterName = linterName\n }\n updateMessageKey(message)\n }\n}\n\n// update the key of the given messages\nexport function updateKeys(messages: Array) {\n messages.forEach(m => {\n updateMessageKey(m)\n })\n}\n\n// create a map from keys to messages\nexport function createKeyMessageMap(messages: Array): Map {\n const keyMessageMap = new Map()\n for (let i = 0, { length } = messages; i < length; ++i) {\n const message = messages[i]\n keyMessageMap.set(message.key, message)\n }\n return keyMessageMap\n}\n\ninterface FlaggedMessages {\n oldKept: Array\n oldRemoved: Array\n newAdded: Array\n}\n\n// This fast function returns the new messages and old messages by comparing their key against the cache.\n// This prevents re-rendering the already rendered messages\nexport function flagMessages(inputs: Array, oldMessages: Array): FlaggedMessages | null {\n // inputs check\n if (inputs === undefined || oldMessages === undefined) {\n return null\n }\n\n // All the messages of the linter are new, no need to diff\n // tag the messages for adding and save them to linter's cache\n if (!oldMessages.length) {\n // NOTE: No need to add .key here because normalizeMessages already does that\n return { oldKept: [], oldRemoved: [], newAdded: inputs }\n }\n\n // The linter has no messages anymore\n // tag all of its messages from cache for removal and empty the cache\n if (!inputs.length) {\n return { oldKept: [], oldRemoved: oldMessages, newAdded: [] }\n }\n\n // In all the other situations:\n // perform diff checking between the linter's new messages and its cache\n\n // create a map from keys to oldMessages\n const cache = createKeyMessageMap(oldMessages)\n\n // Find old kept and new added\n const newAdded: Set = new Set()\n const oldKept: Map = new Map()\n for (let iInput = 0, len = inputs.length; iInput < len; iInput++) {\n const input = inputs[iInput]\n if (cache.has(input.key)) {\n oldKept.set(input.key, input)\n } else {\n newAdded.add(input)\n }\n }\n\n // Find old removed\n const cacheKeys = Array.from(cache.keys())\n const oldKeptKeys = Array.from(oldKept.keys())\n\n const oldRemovedKeys = cacheKeys.filter(x => !oldKeptKeys.includes(x))\n\n const oldRemoved: Set = new Set()\n for (let iRemoved = 0, RemovedKeysLen = oldRemovedKeys.length; iRemoved < RemovedKeysLen; iRemoved++) {\n // cache is created from oldMessages and oldRemovedKeys is a subset of oldMessages. So this will not be undefined\n oldRemoved.add(cache.get(oldRemovedKeys[iRemoved]) as Message)\n }\n\n return {\n oldKept: Array.from(oldKept.values()),\n oldRemoved: [...oldRemoved],\n newAdded: [...newAdded],\n }\n}\n\n// fast mergeArray function\n// https://uilicious.com/blog/javascript-array-push-is-945x-faster-than-array-concat/\nexport function mergeArray(arr1: Array, arr2: Array) {\n if (!arr2.length) {\n return\n }\n Array.prototype.push.apply(arr1, arr2)\n}\n","import { Emitter, CompositeDisposable } from 'atom'\nimport type { Disposable } from 'atom'\n\nimport * as Validate from './validate'\nimport { normalizeMessages, mergeArray } from './helpers'\nimport type { Indie, Message } from './types'\n\nexport default class IndieDelegate {\n indie: Indie\n scope: 'project'\n emitter: Emitter\n version: 2\n messages: Map>\n subscriptions: CompositeDisposable\n\n constructor(indie: Indie, version: 2) {\n this.indie = indie\n this.scope = 'project'\n this.version = version\n this.emitter = new Emitter()\n this.messages = new Map()\n this.subscriptions = new CompositeDisposable()\n\n this.subscriptions.add(this.emitter)\n }\n get name(): string {\n return this.indie.name\n }\n getMessages(): Array {\n const out: Array = []\n this.messages.forEach(m => {\n mergeArray(out, m)\n })\n return out\n }\n clearMessages(): void {\n if (!this.subscriptions.disposed) {\n this.emitter.emit('did-update', [])\n this.messages.clear()\n }\n }\n setMessages(filePath: string | Array>, messages: Array | null | undefined = null): void {\n // v2 Support from here on\n if (typeof filePath !== 'string' || !Array.isArray(messages)) {\n throw new Error('Invalid Parameters to setMessages()')\n }\n if (this.subscriptions.disposed || !Validate.messages(this.name, messages)) {\n return\n }\n messages.forEach(function (message) {\n if (message.location.file !== filePath) {\n console.debug('[Linter-UI-Default] Expected File', filePath, 'Message', message)\n throw new Error('message.location.file does not match the given filePath')\n }\n })\n\n normalizeMessages(this.name, messages)\n this.messages.set(filePath, messages)\n this.emitter.emit('did-update', this.getMessages())\n }\n setAllMessages(messages: Array): void {\n if (this.subscriptions.disposed) {\n return\n }\n\n if (!Array.isArray(messages) || atom.inDevMode()) {\n if (!Validate.messages(this.name, messages)) return\n }\n normalizeMessages(this.name, messages)\n\n this.messages.clear()\n for (let i = 0, { length } = messages; i < length; ++i) {\n const message: Message = messages[i]\n const filePath = message.location.file\n let fileMessages = this.messages.get(filePath)\n if (!fileMessages) {\n this.messages.set(filePath, (fileMessages = []))\n }\n fileMessages.push(message)\n }\n this.emitter.emit('did-update', this.getMessages())\n }\n onDidUpdate(callback: (...args: Array) => any): Disposable {\n return this.emitter.on('did-update', callback)\n }\n onDidDestroy(callback: (...args: Array) => any): Disposable {\n return this.emitter.on('did-destroy', callback)\n }\n dispose(): void {\n this.emitter.emit('did-destroy')\n this.subscriptions.dispose()\n this.messages.clear()\n }\n}\n","import { Emitter, CompositeDisposable } from 'atom'\nimport type { Disposable } from 'atom'\n\nimport IndieDelegate from './indie-delegate'\nimport { indie as validateIndie } from './validate'\nimport type { Indie } from './types'\n\nclass IndieRegistry {\n emitter: Emitter\n delegates: Set\n subscriptions: CompositeDisposable\n\n constructor() {\n this.emitter = new Emitter()\n this.delegates = new Set()\n this.subscriptions = new CompositeDisposable()\n\n this.subscriptions.add(this.emitter)\n }\n // Public method\n register(config: Indie, version: 2): IndieDelegate {\n if (!validateIndie(config)) {\n throw new Error('Error registering Indie Linter')\n }\n const indieLinter = new IndieDelegate(config, version)\n this.delegates.add(indieLinter)\n indieLinter.onDidDestroy(() => {\n this.delegates.delete(indieLinter)\n })\n indieLinter.onDidUpdate(messages => {\n this.emitter.emit('did-update', { linter: indieLinter, messages })\n })\n this.emitter.emit('observe', indieLinter)\n\n return indieLinter\n }\n getProviders(): Array {\n return Array.from(this.delegates)\n }\n observe(callback: (...args: Array) => any): Disposable {\n this.delegates.forEach(callback)\n return this.emitter.on('observe', callback)\n }\n onDidUpdate(callback: (...args: Array) => any): Disposable {\n return this.emitter.on('did-update', callback)\n }\n dispose() {\n for (const entry of this.delegates) {\n entry.dispose()\n }\n this.subscriptions.dispose()\n }\n}\n\nexport default IndieRegistry\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","import { CompositeDisposable, Emitter } from 'atom'\nimport debounce from 'lodash/debounce'\nimport type { Disposable, TextBuffer } from 'atom'\nimport { flagMessages, mergeArray } from './helpers'\nimport type { MessagesPatch, Message, Linter } from './types'\n\ntype Linter$Message$Map = {\n buffer: TextBuffer | null | undefined\n linter: Linter\n changed: boolean\n deleted: boolean\n messages: Array\n oldMessages: Array\n}\n\nclass MessageRegistry {\n emitter: Emitter\n messages: Array\n messagesMap: Set\n subscriptions: CompositeDisposable\n debouncedUpdate: () => void\n\n constructor() {\n this.emitter = new Emitter()\n this.messages = []\n this.messagesMap = new Set()\n this.subscriptions = new CompositeDisposable()\n this.debouncedUpdate = debounce(this.update, 100, { leading: true })\n\n this.subscriptions.add(this.emitter)\n }\n set({ messages, linter, buffer }: { messages: Array; linter: Linter; buffer: TextBuffer | null }) {\n // check if the linter has been already set\n let found = null\n for (const entry of this.messagesMap) {\n if (entry.buffer === buffer && entry.linter === linter) {\n found = entry\n break\n }\n }\n\n if (found) {\n // found linter\n found.messages = messages\n found.changed = true\n } else {\n // new linter\n this.messagesMap.add({ messages, linter, buffer, oldMessages: [], changed: true, deleted: false })\n }\n this.debouncedUpdate()\n }\n update() {\n // the final object sent to UI that contains the messages tagged for adding/removeal. messages is all the kept + added messages\n const result: { added: Array; removed: Array; messages: Array } = {\n added: [],\n removed: [],\n messages: [],\n }\n\n // looping over each linter\n for (const entry of this.messagesMap) {\n // if linter is deleted\n // tag the linter's cache for removal and delete it from the map\n if (entry.deleted) {\n mergeArray(result.removed, entry.oldMessages)\n this.messagesMap.delete(entry)\n continue\n }\n\n // if the linter is not changed\n // just use its cache (no added/removed and everything is kept) and skip the rest\n if (!entry.changed) {\n // TODO When this code acutally runs?!\n mergeArray(result.messages, entry.oldMessages)\n continue\n }\n\n // flag messages as oldKept, oldRemoved, newAdded\n const flaggedMessages = flagMessages(entry.messages, entry.oldMessages)\n\n // update the result and cache\n if (flaggedMessages !== null) {\n const { oldKept, oldRemoved, newAdded } = flaggedMessages\n mergeArray(result.added, newAdded)\n mergeArray(result.removed, oldRemoved)\n const allThisEntry = newAdded.concat(oldKept)\n mergeArray(result.messages, allThisEntry)\n entry.oldMessages = allThisEntry // update chache\n }\n }\n\n // if any messages is removed or added, then update the UI\n if (result.added.length || result.removed.length) {\n this.messages = result.messages\n this.emitter.emit('did-update-messages', result)\n }\n }\n onDidUpdateMessages(callback: (difference: MessagesPatch) => void): Disposable {\n return this.emitter.on('did-update-messages', callback)\n }\n deleteByBuffer(buffer: TextBuffer) {\n for (const entry of this.messagesMap) {\n if (entry.buffer === buffer) {\n entry.deleted = true\n }\n }\n this.debouncedUpdate()\n }\n deleteByLinter(linter: Linter) {\n for (const entry of this.messagesMap) {\n if (entry.linter === linter) {\n entry.deleted = true\n }\n }\n this.debouncedUpdate()\n }\n dispose() {\n this.subscriptions.dispose()\n }\n}\n\nexport default MessageRegistry\n","import { Emitter, CompositeDisposable } from 'atom'\nimport type { TextEditor, Disposable, Notification } from 'atom'\n\nimport * as Helpers from './helpers'\nimport * as Validate from './validate'\nimport { $version, $activated, $requestLatest, $requestLastReceived } from './helpers'\nimport type { Linter } from './types'\n\nclass LinterRegistry {\n emitter: Emitter\n linters: Set\n lintOnChange: boolean = true\n ignoreVCS: boolean = true\n ignoreGlob: string = '**/*.min.{js,css}'\n lintPreviewTabs: boolean = true\n subscriptions: CompositeDisposable\n disabledProviders: Array = []\n activeNotifications: Set\n\n constructor() {\n this.emitter = new Emitter()\n this.linters = new Set()\n this.subscriptions = new CompositeDisposable()\n this.activeNotifications = new Set()\n\n this.subscriptions.add(\n atom.config.observe('linter.lintOnChange', lintOnChange => {\n this.lintOnChange = lintOnChange\n }),\n )\n this.subscriptions.add(\n atom.config.observe('core.excludeVcsIgnoredPaths', ignoreVCS => {\n this.ignoreVCS = ignoreVCS\n }),\n )\n this.subscriptions.add(\n atom.config.observe('linter.ignoreGlob', ignoreGlob => {\n this.ignoreGlob = ignoreGlob\n }),\n )\n this.subscriptions.add(\n atom.config.observe('linter.lintPreviewTabs', lintPreviewTabs => {\n this.lintPreviewTabs = lintPreviewTabs\n }),\n )\n this.subscriptions.add(\n atom.config.observe('linter.disabledProviders', disabledProviders => {\n this.disabledProviders = disabledProviders\n }),\n )\n this.subscriptions.add(this.emitter)\n }\n hasLinter(linter: Linter): boolean {\n return this.linters.has(linter)\n }\n addLinter(linter: Linter) {\n if (!Validate.linter(linter)) {\n return\n }\n linter[$activated] = true\n if (typeof linter[$requestLatest] === 'undefined') {\n linter[$requestLatest] = 0\n }\n if (typeof linter[$requestLastReceived] === 'undefined') {\n linter[$requestLastReceived] = 0\n }\n linter[$version] = 2\n this.linters.add(linter)\n }\n getProviders(): Array {\n return Array.from(this.linters)\n }\n deleteLinter(linter: Linter) {\n if (!this.linters.has(linter)) {\n return\n }\n linter[$activated] = false\n this.linters.delete(linter)\n }\n async lint({ onChange, editor }: { onChange: boolean; editor: TextEditor }): Promise {\n const filePath = editor.getPath()\n\n if (\n (onChange && !this.lintOnChange) || // Lint-on-change mismatch\n // Ignored by VCS, Glob, or simply not saved anywhere yet\n Helpers.isPathIgnored(editor.getPath(), this.ignoreGlob, this.ignoreVCS) ||\n (!this.lintPreviewTabs && atom.workspace.getActivePane().getPendingItem() === editor) // Ignore Preview tabs\n ) {\n return false\n }\n\n const scopes = Helpers.getEditorCursorScopes(editor)\n\n const promises = []\n for (const linter of this.linters) {\n if (!Helpers.shouldTriggerLinter(linter, onChange, scopes)) {\n continue\n }\n if (this.disabledProviders.includes(linter.name)) {\n continue\n }\n const number = ++linter[$requestLatest]\n const statusBuffer = linter.scope === 'file' ? editor.getBuffer() : null\n const statusFilePath = linter.scope === 'file' ? filePath : null\n\n this.emitter.emit('did-begin-linting', { number, linter, filePath: statusFilePath })\n promises.push(\n new Promise(function (resolve: (editor: ReturnType) => void) {\n resolve(linter.lint(editor))\n }).then(\n messages => {\n this.emitter.emit('did-finish-linting', { number, linter, filePath: statusFilePath })\n if (linter[$requestLastReceived] >= number || !linter[$activated] || (statusBuffer && !statusBuffer.isAlive())) {\n return\n }\n linter[$requestLastReceived] = number\n if (statusBuffer && !statusBuffer.isAlive()) {\n return\n }\n\n if (messages === null) {\n // NOTE: Do NOT update the messages when providers return null\n return\n }\n\n let validity = true\n // NOTE: We are calling it when results are not an array to show a nice notification\n if (atom.inDevMode() || !Array.isArray(messages)) {\n validity = Validate.messages(linter.name, messages)\n }\n if (!validity) {\n return\n }\n\n Helpers.normalizeMessages(linter.name, messages)\n this.emitter.emit('did-update-messages', { messages, linter, buffer: statusBuffer })\n },\n error => {\n this.emitter.emit('did-finish-linting', { number, linter, filePath: statusFilePath })\n\n console.error(`[Linter] Error running ${linter.name}`, error)\n const notificationMessage = `[Linter] Error running ${linter.name}`\n if (Array.from(this.activeNotifications).some(item => item.getOptions().detail === notificationMessage)) {\n // This message is still showing to the user!\n return\n }\n\n const notification = atom.notifications.addError(notificationMessage, {\n detail: 'See Console for more info.',\n dismissable: true,\n buttons: [\n {\n text: 'Open Console',\n onDidClick: () => {\n atom.openDevTools()\n notification.dismiss()\n },\n },\n {\n text: 'Cancel',\n onDidClick: () => {\n notification.dismiss()\n },\n },\n ],\n })\n },\n ),\n )\n }\n\n await Promise.all(promises)\n return true\n }\n onDidUpdateMessages(callback: (...args: Array) => any): Disposable {\n return this.emitter.on('did-update-messages', callback)\n }\n onDidBeginLinting(callback: (...args: Array) => any): Disposable {\n return this.emitter.on('did-begin-linting', callback)\n }\n onDidFinishLinting(callback: (...args: Array) => any): Disposable {\n return this.emitter.on('did-finish-linting', callback)\n }\n dispose() {\n this.activeNotifications.forEach(notification => notification.dismiss())\n this.activeNotifications.clear()\n this.linters.clear()\n this.subscriptions.dispose()\n }\n}\n\nexport default LinterRegistry\n","import { Emitter, CompositeDisposable, Disposable } from 'atom'\nimport debounce from 'lodash/debounce'\nimport type { TextEditor } from 'atom'\n\nexport default class EditorLinter {\n editor: TextEditor\n emitter: Emitter\n subscriptions: CompositeDisposable\n\n constructor(editor: TextEditor) {\n if (!atom.workspace.isTextEditor(editor)) {\n throw new Error('EditorLinter expects a valid TextEditor')\n }\n const editorBuffer = editor.getBuffer()\n const debouncedLint = debounce(\n () => {\n this.emitter.emit('should-lint', false)\n },\n 50,\n { leading: true },\n )\n\n this.editor = editor\n this.emitter = new Emitter()\n this.subscriptions = new CompositeDisposable()\n\n this.subscriptions.add(this.editor.onDidDestroy(() => this.dispose()))\n // This debouncing is for beautifiers, if they change contents of the editor and save\n // Linter should count that group of events as one.\n this.subscriptions.add(this.editor.onDidSave(debouncedLint))\n // This is to relint in case of external changes to the opened file\n this.subscriptions.add(editorBuffer.onDidReload(debouncedLint))\n // NOTE: TextEditor::onDidChange immediately invokes the callback if the text editor was *just* created\n // Using TextBuffer::onDidChange doesn't have the same behavior so using it instead.\n this.subscriptions.add(\n this.subscriptiveObserve(atom.config, 'linter.lintOnChangeInterval', interval =>\n editorBuffer.onDidChange(\n debounce(() => {\n this.emitter.emit('should-lint', true)\n }, interval),\n ),\n ),\n )\n }\n getEditor(): TextEditor {\n return this.editor\n }\n lint(onChange: boolean = false) {\n this.emitter.emit('should-lint', onChange)\n }\n onShouldLint(callback: (...args: Array) => any): Disposable {\n return this.emitter.on('should-lint', callback)\n }\n onDidDestroy(callback: (...args: Array) => any): Disposable {\n return this.emitter.on('did-destroy', callback)\n }\n dispose() {\n this.emitter.emit('did-destroy')\n this.subscriptions.dispose()\n this.emitter.dispose()\n }\n\n subscriptiveObserve(object: Record, eventName: string, callback: (...args: Array) => any): Disposable {\n let subscription: Disposable | null = null\n const eventSubscription = object.observe(eventName, (props: Record) => {\n if (subscription) {\n subscription.dispose()\n }\n // TODO what is this?!\n subscription = callback.call(this, props)\n })\n\n return new Disposable(function () {\n eventSubscription.dispose()\n if (subscription) {\n subscription.dispose()\n }\n })\n }\n}\n","import { Emitter, CompositeDisposable } from 'atom'\nimport type { Disposable, TextEditor } from 'atom'\nimport EditorLinter from './editor-linter'\n\nclass EditorRegistry {\n emitter: Emitter\n lintOnOpen: boolean = true\n subscriptions: CompositeDisposable\n editorLinters: Map\n\n constructor() {\n this.emitter = new Emitter()\n this.subscriptions = new CompositeDisposable()\n this.editorLinters = new Map()\n\n this.subscriptions.add(this.emitter)\n this.subscriptions.add(\n atom.config.observe('linter.lintOnOpen', lintOnOpen => {\n this.lintOnOpen = lintOnOpen\n }),\n )\n }\n activate() {\n this.subscriptions.add(\n atom.workspace.observeTextEditors(textEditor => {\n this.createFromTextEditor(textEditor)\n }),\n )\n }\n get(textEditor: TextEditor): EditorLinter | null | undefined {\n return this.editorLinters.get(textEditor)\n }\n createFromTextEditor(textEditor: TextEditor): EditorLinter {\n let editorLinter = this.editorLinters.get(textEditor)\n if (editorLinter) {\n return editorLinter\n }\n editorLinter = new EditorLinter(textEditor)\n editorLinter.onDidDestroy(() => {\n this.editorLinters.delete(textEditor)\n })\n this.editorLinters.set(textEditor, editorLinter)\n this.emitter.emit('observe', editorLinter)\n if (this.lintOnOpen) {\n editorLinter.lint()\n }\n return editorLinter\n }\n hasSibling(editorLinter: EditorLinter): boolean {\n const buffer = editorLinter.getEditor().getBuffer()\n\n return Array.from(this.editorLinters.keys()).some(item => item.getBuffer() === buffer)\n }\n observe(callback: (editorLinter: EditorLinter) => void): Disposable {\n this.editorLinters.forEach(callback)\n return this.emitter.on('observe', callback)\n }\n dispose() {\n for (const entry of this.editorLinters.values()) {\n entry.dispose()\n }\n this.subscriptions.dispose()\n }\n}\n\nexport default EditorRegistry\n","import { CompositeDisposable, Emitter } from 'atom'\nimport type { Disposable } from 'atom'\n\nimport * as Helpers from './helpers'\nimport type { Linter, UI } from './types'\nimport type IndieDelegate from './indie-delegate'\n\nlet manifest: { version: number }\n\nfunction formatItem(item: { name: string } | string) {\n let itemName: string\n if (item && typeof item === 'object' && typeof item.name === 'string') {\n itemName = item.name\n } else if (typeof item === 'string') {\n itemName = item\n } else {\n throw new Error('Unknown object passed to formatItem()')\n }\n return ` - ${itemName}`\n}\nfunction sortByName(item1: { name: string }, item2: { name: string }) {\n return item1.name.localeCompare(item2.name)\n}\n\nexport default class Commands {\n emitter: Emitter\n subscriptions: CompositeDisposable\n\n constructor() {\n this.emitter = new Emitter()\n this.subscriptions = new CompositeDisposable()\n\n this.subscriptions.add(this.emitter)\n this.subscriptions.add(\n atom.commands.add('atom-workspace', {\n 'linter:enable-linter': () => this.enableLinter(),\n 'linter:disable-linter': () => this.disableLinter(),\n }),\n )\n this.subscriptions.add(\n atom.commands.add('atom-text-editor:not([mini])', {\n 'linter:lint': () => this.lint(),\n 'linter:debug': () => this.debug(),\n 'linter:toggle-active-editor': () => this.toggleActiveEditor(),\n }),\n )\n }\n lint() {\n this.emitter.emit('should-lint')\n }\n debug() {\n this.emitter.emit('should-debug')\n }\n enableLinter() {\n this.emitter.emit('should-toggle-linter', 'enable')\n }\n disableLinter() {\n this.emitter.emit('should-toggle-linter', 'disable')\n }\n toggleActiveEditor() {\n this.emitter.emit('should-toggle-active-editor')\n }\n showDebug(standardLinters: Array, indieLinters: Array, uiProviders: Array) {\n if (!manifest) {\n manifest = require('../package.json')\n }\n\n const textEditor = atom.workspace.getActiveTextEditor()\n if (textEditor === undefined) return\n const textEditorScopes = Helpers.getEditorCursorScopes(textEditor)\n const sortedLinters = standardLinters.slice().sort(sortByName)\n const sortedIndieLinters = indieLinters.slice().sort(sortByName)\n const sortedUIProviders = uiProviders.slice().sort(sortByName)\n\n const indieLinterNames = sortedIndieLinters.map(formatItem).join('\\n')\n const standardLinterNames = sortedLinters.map(formatItem).join('\\n')\n const matchingStandardLinters = sortedLinters\n .filter(linter => Helpers.shouldTriggerLinter(linter, false, textEditorScopes))\n .map(formatItem)\n .join('\\n')\n const humanizedScopes = textEditorScopes.map(formatItem).join('\\n')\n const uiProviderNames = sortedUIProviders.map(formatItem).join('\\n')\n\n const ignoreGlob = atom.config.get('linter.ignoreGlob')\n const ignoreVCSIgnoredPaths = atom.config.get('core.excludeVcsIgnoredPaths')\n const disabledLinters = atom.config.get('linter.disabledProviders').map(formatItem).join('\\n')\n const filePathIgnored = Helpers.isPathIgnored(textEditor.getPath(), ignoreGlob, ignoreVCSIgnoredPaths)\n\n atom.notifications.addInfo('Linter Debug Info', {\n detail: [\n `Platform: ${process.platform}`,\n `Atom Version: ${atom.getVersion()}`,\n `Linter Version: ${manifest.version}`,\n `Opened file is ignored: ${filePathIgnored ? 'Yes' : 'No'}`,\n `Matching Linter Providers: \\n${matchingStandardLinters}`,\n `Disabled Linter Providers: \\n${disabledLinters}`,\n `Standard Linter Providers: \\n${standardLinterNames}`,\n `Indie Linter Providers: \\n${indieLinterNames}`,\n `UI Providers: \\n${uiProviderNames}`,\n `Ignore Glob: ${ignoreGlob}`,\n `VCS Ignored Paths are excluded: ${ignoreVCSIgnoredPaths}`,\n `Current File Scopes: \\n${humanizedScopes}`,\n ].join('\\n'),\n dismissable: true,\n })\n }\n onShouldLint(callback: (...args: Array) => any): Disposable {\n return this.emitter.on('should-lint', callback)\n }\n onShouldDebug(callback: (...args: Array) => any): Disposable {\n return this.emitter.on('should-debug', callback)\n }\n onShouldToggleActiveEditor(callback: (...args: Array) => any): Disposable {\n return this.emitter.on('should-toggle-active-editor', callback)\n }\n onShouldToggleLinter(callback: (...args: Array) => any): Disposable {\n return this.emitter.on('should-toggle-linter', callback)\n }\n dispose() {\n this.subscriptions.dispose()\n }\n}\n","import { CompositeDisposable, Emitter, Disposable } from 'atom'\n\n// https://github.com/atom/atom-select-list/pull/28\nlet SelectListView: any\ntype ToggleAction = 'enable' | 'disable'\n\nclass ToggleProviders {\n action: ToggleAction\n emitter: Emitter\n providers: Array\n subscriptions: CompositeDisposable\n disabledProviders: Array = []\n\n constructor(action: ToggleAction, providers: Array) {\n this.action = action\n this.emitter = new Emitter()\n this.providers = providers\n this.subscriptions = new CompositeDisposable()\n\n this.subscriptions.add(this.emitter)\n this.subscriptions.add(\n atom.config.observe('linter.disabledProviders', disabledProviders => {\n this.disabledProviders = disabledProviders\n }),\n )\n }\n async getItems(): Promise> {\n if (this.action === 'disable') {\n return this.providers.filter(name => !this.disabledProviders.includes(name))\n }\n return this.disabledProviders\n }\n async process(name: string): Promise {\n if (this.action === 'disable') {\n this.disabledProviders.push(name)\n this.emitter.emit('did-disable', name)\n } else {\n const index = this.disabledProviders.indexOf(name)\n if (index !== -1) {\n this.disabledProviders.splice(index, 1)\n }\n }\n atom.config.set('linter.disabledProviders', this.disabledProviders)\n }\n async show() {\n if (!SelectListView) {\n SelectListView = require('atom-select-list')\n }\n const selectListView = new SelectListView({\n items: await this.getItems(),\n emptyMessage: 'No matches found',\n elementForItem: (item: any) => {\n const li = document.createElement('li')\n li.textContent = item\n return li\n },\n didConfirmSelection: (item: any) => {\n this.process(item)\n .catch(e => console.error('[Linter] Unable to process toggle:', e))\n .then(() => this.dispose())\n },\n didCancelSelection: () => {\n this.dispose()\n },\n didConfirmEmptySelection: () => {\n this.dispose()\n },\n })\n const panel = atom.workspace.addModalPanel({ item: selectListView })\n\n selectListView.focus()\n this.subscriptions.add(\n new Disposable(function () {\n panel.destroy()\n }),\n )\n }\n onDidDispose(callback: () => any): Disposable {\n return this.emitter.on('did-dispose', callback)\n }\n onDidDisable(callback: (name: string) => any): Disposable {\n return this.emitter.on('did-disable', callback)\n }\n dispose() {\n this.emitter.emit('did-dispose')\n this.subscriptions.dispose()\n }\n}\n\nexport default ToggleProviders\n","import { CompositeDisposable, Disposable } from 'atom'\n\nimport Linter from './main'\nimport type { UI, Linter as LinterProvider, Indie } from './types'\n\n// Internal variables\nlet instance: Linter\nlet subscriptions: CompositeDisposable\n\nexport function activate() {\n subscriptions = new CompositeDisposable()\n\n instance = new Linter()\n subscriptions.add(instance)\n\n subscriptions.add(\n atom.packages.onDidActivateInitialPackages(function () {\n if (!atom.inSpecMode()) {\n require('atom-package-deps').install('linter', true)\n }\n }),\n )\n}\nexport function consumeLinter(linter: LinterProvider | Array): Disposable {\n let linters: Array\n if (Array.isArray(linter)) {\n linters = linter\n } else {\n linters = [linter]\n }\n\n for (const entry of linters) {\n instance.addLinter(entry)\n }\n return new Disposable(() => {\n for (const entry of linters) {\n instance.deleteLinter(entry)\n }\n })\n}\nexport function consumeUI(ui: UI | Array): Disposable {\n let uis: Array\n if (Array.isArray(ui)) {\n uis = ui\n } else {\n uis = [ui]\n }\n\n for (const entry of uis) {\n instance.addUI(entry)\n }\n return new Disposable(() => {\n for (const entry of uis) {\n instance.deleteUI(entry)\n }\n })\n}\nexport function provideIndie() {\n return (indie: Indie) => instance.addIndie(indie)\n}\nexport function deactivate() {\n subscriptions.dispose()\n}\n","import arrayUnique from 'lodash/uniq'\nimport { CompositeDisposable } from 'atom'\n\nimport UIRegistry from './ui-registry'\nimport IndieRegistry from './indie-registry'\nimport MessageRegistry from './message-registry'\nimport LinterRegistry from './linter-registry'\nimport EditorsRegistry from './editor-registry'\nimport Commands from './commands'\nimport ToggleView from './toggle-view'\nimport type { UI, Linter as LinterProvider, Indie } from './types'\n\nclass Linter {\n commands: Commands\n registryUI?: UIRegistry\n registryIndie?: IndieRegistry\n registryEditors?: EditorsRegistry\n registryLinters?: LinterRegistry\n registryMessages?: MessageRegistry\n subscriptions: CompositeDisposable\n idleCallbacks: Set\n\n constructor() {\n this.idleCallbacks = new Set()\n this.subscriptions = new CompositeDisposable()\n\n this.commands = new Commands()\n this.subscriptions.add(this.commands)\n\n this.commands.onShouldLint(() => {\n this.registryEditorsInit()\n const textEditor = atom.workspace.getActiveTextEditor()\n if (textEditor === undefined) return\n // this.registryEditors becomes valid inside registryEditorsInit\n const editorLinter = this.registryEditors!.get(textEditor)\n if (editorLinter) {\n editorLinter.lint()\n }\n })\n this.commands.onShouldToggleActiveEditor(() => {\n const textEditor = atom.workspace.getActiveTextEditor()\n if (textEditor === undefined) return\n this.registryEditorsInit()\n // this.registryEditors becomes valid inside registryEditorsInit\n const editor = this.registryEditors!.get(textEditor)\n if (editor) {\n editor.dispose()\n } else if (textEditor) {\n // this.registryEditors becomes valid inside registryEditorsInit\n this.registryEditors!.createFromTextEditor(textEditor)\n }\n })\n this.commands.onShouldDebug(async () => {\n this.registryUIInit()\n this.registryIndieInit()\n this.registryLintersInit()\n this.commands.showDebug(\n // this.registryLinters becomes valid inside registryLintersInit\n this.registryLinters!.getProviders(),\n // this.registryIndie becomes valid inside registryIndieInit\n this.registryIndie!.getProviders(),\n // this.registryUI becomes valid inside registryUIInit\n this.registryUI!.getProviders(),\n )\n })\n this.commands.onShouldToggleLinter(action => {\n this.registryLintersInit()\n // this.registryLinters becomes valid inside registryLintersInit\n const toggleView = new ToggleView(action, arrayUnique(this.registryLinters!.getProviders().map(linter => linter.name)))\n toggleView.onDidDispose(() => {\n this.subscriptions.remove(toggleView)\n })\n toggleView.onDidDisable(name => {\n // this.registryLinters becomes valid inside registryLintersInit\n const linter = this.registryLinters!.getProviders().find(entry => entry.name === name)\n if (linter) {\n this.registryMessagesInit()\n // this.registryMessages becomes valid inside registryMessagesInit\n this.registryMessages!.deleteByLinter(linter)\n }\n })\n toggleView.show()\n this.subscriptions.add(toggleView)\n })\n\n const projectPathChangeCallbackID = window.requestIdleCallback(\n /* projectPathChange */ () => {\n this.idleCallbacks.delete(projectPathChangeCallbackID)\n // NOTE: Atom triggers this on boot so wait a while\n this.subscriptions.add(\n atom.project.onDidChangePaths(() => {\n this.commands.lint()\n }),\n )\n },\n )\n this.idleCallbacks.add(projectPathChangeCallbackID)\n\n const registryEditorsInitCallbackID = window.requestIdleCallback(\n /* registryEditorsIdleInit */ () => {\n this.idleCallbacks.delete(registryEditorsInitCallbackID)\n // This will be called on the fly if needed, but needs to run on it's\n // own at some point or linting on open or on change will never trigger\n this.registryEditorsInit()\n },\n )\n this.idleCallbacks.add(registryEditorsInitCallbackID)\n }\n dispose() {\n this.idleCallbacks.forEach(callbackID => window.cancelIdleCallback(callbackID))\n this.idleCallbacks.clear()\n this.subscriptions.dispose()\n }\n\n registryEditorsInit() {\n if (this.registryEditors !== undefined) {\n return\n }\n this.registryEditors = new EditorsRegistry()\n this.subscriptions.add(this.registryEditors)\n this.registryEditors.observe(editorLinter => {\n editorLinter.onShouldLint(onChange => {\n this.registryLintersInit()\n // this.registryLinters becomes valid inside registryLintersInit\n this.registryLinters!.lint({ onChange, editor: editorLinter.getEditor() })\n })\n editorLinter.onDidDestroy(() => {\n this.registryMessagesInit()\n if (!this.registryEditors!.hasSibling(editorLinter)) {\n // this.registryMessages becomes valid inside registryMessagesInit\n this.registryMessages!.deleteByBuffer(editorLinter.getEditor().getBuffer())\n }\n })\n })\n this.registryEditors.activate()\n }\n registryLintersInit() {\n if (this.registryLinters !== undefined) {\n return\n }\n this.registryLinters = new LinterRegistry()\n this.subscriptions.add(this.registryLinters)\n this.registryLinters.onDidUpdateMessages(({ linter, messages, buffer }) => {\n this.registryMessagesInit()\n // this.registryMessages becomes valid inside registryMessagesInit\n this.registryMessages!.set({ linter, messages, buffer })\n })\n this.registryLinters.onDidBeginLinting(({ linter, filePath }) => {\n this.registryUIInit()\n // this.registryUI becomes valid inside registryUIInit\n this.registryUI!.didBeginLinting(linter, filePath)\n })\n this.registryLinters.onDidFinishLinting(({ linter, filePath }) => {\n this.registryUIInit()\n // this.registryUI becomes valid inside registryUIInit\n this.registryUI!.didFinishLinting(linter, filePath)\n })\n }\n registryIndieInit() {\n if (this.registryIndie !== undefined) {\n return\n }\n this.registryIndie = new IndieRegistry()\n this.subscriptions.add(this.registryIndie)\n this.registryIndie.observe(indieLinter => {\n indieLinter.onDidDestroy(() => {\n this.registryMessagesInit()\n // this.registryMessages becomes valid inside registryMessagesInit\n this.registryMessages!.deleteByLinter(indieLinter)\n })\n })\n this.registryIndie.onDidUpdate(({ linter, messages }) => {\n this.registryMessagesInit()\n // this.registryMessages becomes valid inside registryMessagesInit\n this.registryMessages!.set({ linter, messages, buffer: null })\n })\n }\n registryMessagesInit() {\n if (this.registryMessages) {\n return\n }\n this.registryMessages = new MessageRegistry()\n this.subscriptions.add(this.registryMessages)\n this.registryMessages.onDidUpdateMessages(difference => {\n this.registryUIInit()\n // this.registryUI becomes valid inside registryUIInit\n this.registryUI!.render(difference)\n })\n }\n registryUIInit() {\n if (this.registryUI !== undefined) {\n return\n }\n this.registryUI = new UIRegistry()\n this.subscriptions.add(this.registryUI)\n }\n\n // API methods for providing/consuming services\n // UI\n addUI(ui: UI) {\n this.registryUIInit()\n // this.registryUI becomes valid inside registryUIInit\n this.registryUI!.add(ui)\n this.registryMessagesInit()\n // this.registryMessages becomes valid inside registryMessagesInit\n const messages = this.registryMessages!.messages\n if (messages.length) {\n ui.render({ added: messages, messages, removed: [] })\n }\n }\n deleteUI(ui: UI) {\n this.registryUIInit()\n // this.registryUI becomes valid inside registryUIInit\n this.registryUI!.delete(ui)\n }\n // Standard Linter\n addLinter(linter: LinterProvider) {\n this.registryLintersInit()\n // this.registryLinters becomes valid inside registryLintersInit\n this.registryLinters!.addLinter(linter)\n }\n deleteLinter(linter: LinterProvider) {\n this.registryLintersInit()\n // this.registryLinters becomes valid inside registryLintersInit\n this.registryLinters!.deleteLinter(linter)\n this.registryMessagesInit()\n // this.registryMessages becomes valid inside registryMessagesInit\n this.registryMessages!.deleteByLinter(linter)\n }\n // Indie Linter\n addIndie(indie: Indie) {\n this.registryIndieInit()\n // this.registryIndie becomes valid inside registryIndieInit\n return this.registryIndie!.register(indie, 2)\n }\n}\n\nexport default Linter\n"],"names":["global","Object","freeSelf","self","freeGlobal","Function","root","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","value","isOwn","call","tag","unmasked","e","result","getRawTag","objectToString","type","uid","isObject","baseGetTag","maskSrcKey","exec","coreJsData","keys","IE_PROTO","func","funcToString","reIsHostCtor","funcProto","reIsNative","RegExp","replace","isMasked","isFunction","test","toSource","object","key","getValue","baseIsNative","getNative","this","__data__","nativeCreate","size","has","data","Hash","entries","index","length","clear","entry","set","hashClear","hashDelete","get","hashGet","hashHas","hashSet","other","array","eq","splice","Array","assocIndexOf","pop","push","ListCache","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","hash","map","Map","string","isKeyable","getMapData","MapCache","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","SetCache","values","add","setCacheAdd","setCacheHas","predicate","fromIndex","fromRight","strictIndexOf","baseFindIndex","baseIsNaN","baseIndexOf","comparator","cache","forEach","Set","setToArray","noop","iteratee","includes","arrayIncludes","isCommon","seen","arrayIncludesWith","createSet","cacheHas","outer","computed","seenIndex","baseUniq","showError","title","description","points","renderedPoints","item","atom","notifications","addWarning","dismissable","detail","join","VALID_SEVERITY","validateMessages","linterName","messages","isArray","invalidURL","invalidIcon","invalidExcerpt","invalidLocation","invalidSeverity","invalidSolution","invalidReference","invalidDescription","invalidLinterName","i","message","reference","icon","location","file","position","range","Range","fromObject","Number","isNaN","start","row","column","end","solutions","Point","excerpt","severity","url","UIRegistry","[object Object]","providers","subscriptions","CompositeDisposable","ui","name","didBeginLinting","didFinishLinting","render","dispose","validateUI","provider","delete","from","linter","filePath","$activated","$requestLastReceived","shouldTriggerLinter","wasTriggeredOnChange","scopes","lintsOnChange","some","scope","grammarScopes","getEditorCursorScopes","textEditor","arrayUnique","getCursors","reduce","cursor","concat","getScopeDescriptor","getScopesArray","minimatch","isPathIgnored","ignoredGlob","ignoredVCS","repository","projectPaths","project","getPaths","projectPath","indexOf","getRepositories","normalizedFilePath","process","platform","require","updateMessageKey","normalizeMessages","solution","j","_length","version","flagMessages","inputs","oldMessages","oldKept","oldRemoved","newAdded","keyMessageMap","createKeyMessageMap","iInput","len","input","cacheKeys","oldKeptKeys","oldRemovedKeys","filter","x","iRemoved","RemovedKeysLen","mergeArray","arr1","arr2","apply","IndieDelegate","indie","emitter","Emitter","out","m","disposed","emit","Error","Validate.messages","console","debug","getMessages","inDevMode","fileMessages","callback","on","IndieRegistry","delegates","config","validateIndie","indieLinter","onDidDestroy","onDidUpdate","Date","now","isObjectLike","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","isSymbol","valueOf","isBinary","slice","nativeMax","Math","max","nativeMin","min","wait","options","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","arguments","clearTimeout","toNumber","cancel","flush","MessageRegistry","messagesMap","debouncedUpdate","debounce","update","buffer","found","changed","deleted","added","removed","flaggedMessages","allThisEntry","LinterRegistry","linters","activeNotifications","observe","lintOnChange","ignoreVCS","ignoreGlob","lintPreviewTabs","disabledProviders","lint","Validate.linter","onChange","editor","getPath","Helpers.isPathIgnored","workspace","getActivePane","getPendingItem","Helpers.getEditorCursorScopes","promises","Helpers.shouldTriggerLinter","number","statusBuffer","getBuffer","statusFilePath","Promise","resolve","then","isAlive","validity","Helpers.normalizeMessages","error","notificationMessage","getOptions","notification","addError","buttons","text","onDidClick","openDevTools","dismiss","all","EditorLinter","isTextEditor","editorBuffer","debouncedLint","onDidSave","onDidReload","subscriptiveObserve","interval","onDidChange","eventName","subscription","eventSubscription","props","Disposable","EditorRegistry","editorLinters","lintOnOpen","observeTextEditors","createFromTextEditor","editorLinter","getEditor","manifest","SelectListView","instance","formatItem","itemName","sortByName","item1","item2","localeCompare","Commands","commands","linter:enable-linter","enableLinter","linter:disable-linter","disableLinter","linter:lint","linter:debug","linter:toggle-active-editor","toggleActiveEditor","standardLinters","indieLinters","uiProviders","getActiveTextEditor","textEditorScopes","sortedLinters","sort","sortedIndieLinters","sortedUIProviders","indieLinterNames","standardLinterNames","matchingStandardLinters","humanizedScopes","uiProviderNames","ignoreVCSIgnoredPaths","disabledLinters","filePathIgnored","addInfo","getVersion","ToggleProviders","action","selectListView","items","getItems","emptyMessage","elementForItem","li","document","createElement","textContent","didConfirmSelection","catch","didCancelSelection","didConfirmEmptySelection","panel","addModalPanel","focus","destroy","Linter","idleCallbacks","onShouldLint","registryEditorsInit","registryEditors","onShouldToggleActiveEditor","onShouldDebug","async","registryUIInit","registryIndieInit","registryLintersInit","showDebug","registryLinters","getProviders","registryIndie","registryUI","onShouldToggleLinter","toggleView","ToggleView","onDidDispose","remove","onDidDisable","find","registryMessagesInit","registryMessages","deleteByLinter","show","projectPathChangeCallbackID","window","requestIdleCallback","onDidChangePaths","registryEditorsInitCallbackID","callbackID","cancelIdleCallback","EditorsRegistry","hasSibling","deleteByBuffer","activate","onDidUpdateMessages","onDidBeginLinting","onDidFinishLinting","difference","addLinter","deleteLinter","register","packages","onDidActivateInitialPackages","inSpecMode","install","uis","addUI","deleteUI","addIndie"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sources":["../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_root.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/isObject.js","../node_modules/lodash/isFunction.js","../node_modules/lodash/_isMasked.js","../node_modules/lodash/_coreJsData.js","../node_modules/lodash/_toSource.js","../node_modules/lodash/_baseIsNative.js","../node_modules/lodash/_getValue.js","../node_modules/lodash/_getNative.js","../node_modules/lodash/_nativeCreate.js","../node_modules/lodash/_hashClear.js","../node_modules/lodash/_hashDelete.js","../node_modules/lodash/_hashGet.js","../node_modules/lodash/_hashHas.js","../node_modules/lodash/_hashSet.js","../node_modules/lodash/_Hash.js","../node_modules/lodash/_listCacheClear.js","../node_modules/lodash/eq.js","../node_modules/lodash/_assocIndexOf.js","../node_modules/lodash/_listCacheDelete.js","../node_modules/lodash/_listCacheGet.js","../node_modules/lodash/_listCacheHas.js","../node_modules/lodash/_listCacheSet.js","../node_modules/lodash/_ListCache.js","../node_modules/lodash/_Map.js","../node_modules/lodash/_mapCacheClear.js","../node_modules/lodash/_isKeyable.js","../node_modules/lodash/_getMapData.js","../node_modules/lodash/_mapCacheDelete.js","../node_modules/lodash/_mapCacheGet.js","../node_modules/lodash/_mapCacheHas.js","../node_modules/lodash/_mapCacheSet.js","../node_modules/lodash/_MapCache.js","../node_modules/lodash/_setCacheAdd.js","../node_modules/lodash/_setCacheHas.js","../node_modules/lodash/_SetCache.js","../node_modules/lodash/_baseFindIndex.js","../node_modules/lodash/_baseIsNaN.js","../node_modules/lodash/_strictIndexOf.js","../node_modules/lodash/_baseIndexOf.js","../node_modules/lodash/_arrayIncludes.js","../node_modules/lodash/_arrayIncludesWith.js","../node_modules/lodash/_cacheHas.js","../node_modules/lodash/_Set.js","../node_modules/lodash/noop.js","../node_modules/lodash/_setToArray.js","../node_modules/lodash/_createSet.js","../node_modules/lodash/_baseUniq.js","../node_modules/lodash/uniq.js","../lib/validate/helpers.ts","../lib/validate/index.ts","../lib/ui-registry.ts","../lib/helpers.ts","../lib/indie-delegate.ts","../lib/indie-registry.ts","../node_modules/lodash/now.js","../node_modules/lodash/isObjectLike.js","../node_modules/lodash/isSymbol.js","../node_modules/lodash/toNumber.js","../node_modules/lodash/debounce.js","../lib/message-registry.ts","../lib/linter-registry.ts","../lib/editor-linter.ts","../lib/editor-registry.ts","../lib/commands.ts","../lib/toggle-view.ts","../lib/index.ts","../lib/main.ts"],"sourcesContent":["/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nmodule.exports = setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = baseFindIndex;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\nmodule.exports = baseIsNaN;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = strictIndexOf;\n","var baseFindIndex = require('./_baseFindIndex'),\n baseIsNaN = require('./_baseIsNaN'),\n strictIndexOf = require('./_strictIndexOf');\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nmodule.exports = baseIndexOf;\n","var baseIndexOf = require('./_baseIndexOf');\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nmodule.exports = arrayIncludes;\n","/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arrayIncludesWith;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nmodule.exports = noop;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nmodule.exports = setToArray;\n","var Set = require('./_Set'),\n noop = require('./noop'),\n setToArray = require('./_setToArray');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\nmodule.exports = createSet;\n","var SetCache = require('./_SetCache'),\n arrayIncludes = require('./_arrayIncludes'),\n arrayIncludesWith = require('./_arrayIncludesWith'),\n cacheHas = require('./_cacheHas'),\n createSet = require('./_createSet'),\n setToArray = require('./_setToArray');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nmodule.exports = baseUniq;\n","var baseUniq = require('./_baseUniq');\n\n/**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\nfunction uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n}\n\nmodule.exports = uniq;\n","export function showError(title: string, description: string, points: Array) {\n const renderedPoints = points.map(item => ` • ${item}`)\n atom.notifications.addWarning(`[Linter] ${title}`, {\n dismissable: true,\n detail: `${description}\\n${renderedPoints.join('\\n')}`,\n })\n}\n","import { Range, Point } from 'atom'\nimport { showError } from './helpers'\nimport type { UI, Linter, Message, Indie } from '../types'\n\nconst VALID_SEVERITY = new Set(['error', 'warning', 'info'])\n\nfunction validateUI(ui: UI): boolean {\n const messages = []\n\n if (ui && typeof ui === 'object') {\n if (typeof ui.name !== 'string') {\n messages.push('UI.name must be a string')\n }\n if (typeof ui.didBeginLinting !== 'function') {\n messages.push('UI.didBeginLinting must be a function')\n }\n if (typeof ui.didFinishLinting !== 'function') {\n messages.push('UI.didFinishLinting must be a function')\n }\n if (typeof ui.render !== 'function') {\n messages.push('UI.render must be a function')\n }\n if (typeof ui.dispose !== 'function') {\n messages.push('UI.dispose must be a function')\n }\n } else {\n messages.push('UI must be an object')\n }\n\n if (messages.length) {\n showError(\n 'Invalid UI received',\n `These issues were encountered while registering the UI named '${ui && ui.name ? ui.name : 'Unknown'}'`,\n messages,\n )\n return false\n }\n\n return true\n}\n\nfunction validateLinter(linter: Linter): boolean {\n const messages = []\n\n if (linter && typeof linter === 'object') {\n if (typeof linter.name !== 'string') {\n messages.push('Linter.name must be a string')\n }\n if (typeof linter.scope !== 'string' || (linter.scope !== 'file' && linter.scope !== 'project')) {\n messages.push(\"Linter.scope must be either 'file' or 'project'\")\n }\n if (typeof linter.lintsOnChange !== 'boolean') {\n messages.push('Linter.lintsOnChange must be a boolean')\n }\n if (!Array.isArray(linter.grammarScopes)) {\n messages.push('Linter.grammarScopes must be an Array')\n }\n if (typeof linter.lint !== 'function') {\n messages.push('Linter.lint must be a function')\n }\n } else {\n messages.push('Linter must be an object')\n }\n\n if (messages.length) {\n showError(\n 'Invalid Linter received',\n `These issues were encountered while registering a Linter named '${linter && linter.name ? linter.name : 'Unknown'}'`,\n messages,\n )\n return false\n }\n\n return true\n}\n\nfunction validateIndie(indie: Indie): boolean {\n const messages = []\n\n if (indie && typeof indie === 'object') {\n if (typeof indie.name !== 'string') {\n messages.push('Indie.name must be a string')\n }\n } else {\n messages.push('Indie must be an object')\n }\n\n if (messages.length) {\n showError(\n 'Invalid Indie received',\n `These issues were encountered while registering an Indie Linter named '${\n indie && indie.name ? indie.name : 'Unknown'\n }'`,\n messages,\n )\n return false\n }\n\n return true\n}\n\nfunction validateMessages(linterName: string, entries: Array): boolean {\n const messages = []\n\n if (Array.isArray(entries)) {\n let invalidURL = false\n let invalidIcon = false\n let invalidExcerpt = false\n let invalidLocation = false\n let invalidSeverity = false\n let invalidSolution = false\n let invalidReference = false\n let invalidDescription = false\n let invalidLinterName = false\n\n for (let i = 0, { length } = entries; i < length; ++i) {\n const message = entries[i]\n const { reference } = message\n if (!invalidIcon && message.icon && typeof message.icon !== 'string') {\n invalidIcon = true\n messages.push('Message.icon must be a string')\n }\n if (\n !invalidLocation &&\n (!message.location ||\n typeof message.location !== 'object' ||\n typeof message.location.file !== 'string' ||\n typeof message.location.position !== 'object' ||\n !message.location.position)\n ) {\n invalidLocation = true\n messages.push('Message.location must be valid')\n } else if (!invalidLocation) {\n const range = Range.fromObject(message.location.position)\n if (\n Number.isNaN(range.start.row) ||\n Number.isNaN(range.start.column) ||\n Number.isNaN(range.end.row) ||\n Number.isNaN(range.end.column)\n ) {\n invalidLocation = true\n messages.push('Message.location.position should not contain NaN coordinates')\n }\n }\n if (!invalidSolution && message.solutions && !Array.isArray(message.solutions)) {\n invalidSolution = true\n messages.push('Message.solutions must be valid')\n }\n if (\n !invalidReference &&\n reference &&\n (typeof reference !== 'object' ||\n typeof reference.file !== 'string' ||\n typeof reference.position !== 'object' ||\n !reference.position)\n ) {\n invalidReference = true\n messages.push('Message.reference must be valid')\n } else if (!invalidReference && reference && reference.position !== undefined) {\n const position = Point.fromObject(reference.position)\n if (Number.isNaN(position.row) || Number.isNaN(position.column)) {\n invalidReference = true\n messages.push('Message.reference.position should not contain NaN coordinates')\n }\n }\n if (!invalidExcerpt && typeof message.excerpt !== 'string') {\n invalidExcerpt = true\n messages.push('Message.excerpt must be a string')\n }\n if (!invalidSeverity && !VALID_SEVERITY.has(message.severity)) {\n invalidSeverity = true\n messages.push(\"Message.severity must be 'error', 'warning' or 'info'\")\n }\n if (!invalidURL && message.url && typeof message.url !== 'string') {\n invalidURL = true\n messages.push('Message.url must be a string')\n }\n if (\n !invalidDescription &&\n message.description &&\n typeof message.description !== 'function' &&\n typeof message.description !== 'string'\n ) {\n invalidDescription = true\n messages.push('Message.description must be a function or string')\n }\n if (!invalidLinterName && message.linterName && typeof message.linterName !== 'string') {\n invalidLinterName = true\n messages.push('Message.linterName must be a string')\n }\n }\n } else {\n messages.push('Linter Result must be an Array')\n }\n\n if (messages.length) {\n showError(\n 'Invalid Linter Result received',\n `These issues were encountered while processing messages from a linter named '${linterName}'`,\n messages,\n )\n return false\n }\n\n return true\n}\n\nexport { validateUI as ui, validateLinter as linter, validateIndie as indie, validateMessages as messages }\n","import { CompositeDisposable } from 'atom'\nimport { ui as validateUI } from './validate'\nimport type { Linter, UI, MessagesPatch } from './types'\n\nexport default class UIRegistry {\n providers: Set = new Set()\n subscriptions: CompositeDisposable = new CompositeDisposable()\n\n add(ui: UI) {\n if (!this.providers.has(ui) && validateUI(ui)) {\n this.subscriptions.add(ui)\n this.providers.add(ui)\n }\n }\n delete(provider: UI) {\n if (this.providers.has(provider)) {\n provider.dispose()\n this.providers.delete(provider)\n }\n }\n getProviders(): Array {\n return Array.from(this.providers)\n }\n render(messages: MessagesPatch) {\n this.providers.forEach(function (provider) {\n provider.render(messages)\n })\n }\n didBeginLinting(linter: Linter, filePath: string | null | undefined = null) {\n this.providers.forEach(function (provider) {\n provider.didBeginLinting(linter, filePath)\n })\n }\n didFinishLinting(linter: Linter, filePath: string | null | undefined = null) {\n this.providers.forEach(function (provider) {\n provider.didFinishLinting(linter, filePath)\n })\n }\n dispose() {\n this.providers.clear()\n this.subscriptions.dispose()\n }\n}\n","import arrayUnique from 'lodash/uniq'\nimport { Range, Point } from 'atom'\nimport type { TextEditor } from 'atom'\nimport type { Linter, Message, MessageSolution } from './types'\n\nexport const $version = '__$sb_linter_version'\nexport const $activated = '__$sb_linter_activated'\nexport const $requestLatest = '__$sb_linter_request_latest'\nexport const $requestLastReceived = '__$sb_linter_request_last_received'\n\nexport function shouldTriggerLinter(linter: Linter, wasTriggeredOnChange: boolean, scopes: Array): boolean {\n if (wasTriggeredOnChange && !linter.lintsOnChange) {\n return false\n }\n return scopes.some(function (scope) {\n return linter.grammarScopes.includes(scope)\n })\n}\n\nexport function getEditorCursorScopes(textEditor: TextEditor): Array {\n return arrayUnique(\n textEditor.getCursors().reduce((scopes, cursor) => scopes.concat(cursor.getScopeDescriptor().getScopesArray()), ['*']),\n )\n}\n\nlet minimatch: typeof import('minimatch')\nexport function isPathIgnored(filePath: string | null | undefined, ignoredGlob: string, ignoredVCS: boolean): boolean {\n if (!filePath) {\n return true\n }\n\n if (ignoredVCS) {\n let repository = null\n const projectPaths = atom.project.getPaths()\n for (let i = 0, { length } = projectPaths; i < length; ++i) {\n const projectPath = projectPaths[i]\n if (filePath.indexOf(projectPath) === 0) {\n repository = atom.project.getRepositories()[i]\n break\n }\n }\n if (repository && repository.isPathIgnored(filePath)) {\n return true\n }\n }\n const normalizedFilePath = process.platform === 'win32' ? filePath.replace(/\\\\/g, '/') : filePath\n if (!minimatch) {\n minimatch = require('minimatch')\n }\n return minimatch(normalizedFilePath, ignoredGlob)\n}\n\nexport function updateMessageKey(message: Message) {\n const { reference, location } = message\n message.key = [\n `$LINTER:${message.linterName}`,\n `$LOCATION:${location.file}$${location.position.start.row}$${location.position.start.column}$${location.position.end.row}$${location.position.end.column}`,\n reference\n ? `$REFERENCE:${reference.file}$${reference.position ? `${reference.position.row}$${reference.position.column}` : ''}`\n : '$REFERENCE:null',\n `$EXCERPT:${message.excerpt}`,\n `$SEVERITY:${message.severity}`,\n message.icon ? `$ICON:${message.icon}` : '$ICON:null',\n message.url ? `$URL:${message.url}` : '$URL:null',\n typeof message.description === 'string' ? `$DESCRIPTION:${message.description}` : '$DESCRIPTION:null',\n ].join('')\n}\n\nexport function normalizeMessages(linterName: string, messages: Array) {\n for (let i = 0, { length } = messages; i < length; ++i) {\n const message = messages[i]\n const { reference } = message\n if (Array.isArray(message.location.position)) {\n message.location.position = Range.fromObject(message.location.position)\n }\n if (reference && Array.isArray(reference.position)) {\n reference.position = Point.fromObject(reference.position)\n }\n if (message.solutions && message.solutions.length) {\n for (let j = 0, _length = message.solutions.length, solution: MessageSolution; j < _length; j++) {\n solution = message.solutions[j]\n if (Array.isArray(solution.position)) {\n solution.position = Range.fromObject(solution.position)\n }\n }\n }\n message.version = 2\n if (!message.linterName) {\n message.linterName = linterName\n }\n updateMessageKey(message)\n }\n}\n\n// update the key of the given messages\nexport function updateKeys(messages: Array) {\n messages.forEach(m => {\n updateMessageKey(m)\n })\n}\n\n// create a map from keys to messages\nexport function createKeyMessageMap(messages: Array): Map {\n const keyMessageMap = new Map()\n for (let i = 0, { length } = messages; i < length; ++i) {\n const message = messages[i]\n keyMessageMap.set(message.key, message)\n }\n return keyMessageMap\n}\n\ninterface FlaggedMessages {\n oldKept: Array\n oldRemoved: Array\n newAdded: Array\n}\n\n// This fast function returns the new messages and old messages by comparing their key against the cache.\n// This prevents re-rendering the already rendered messages\nexport function flagMessages(inputs: Array, oldMessages: Array): FlaggedMessages | null {\n // inputs check\n if (inputs === undefined || oldMessages === undefined) {\n return null\n }\n\n // All the messages of the linter are new, no need to diff\n // tag the messages for adding and save them to linter's cache\n if (!oldMessages.length) {\n // NOTE: No need to add .key here because normalizeMessages already does that\n return { oldKept: [], oldRemoved: [], newAdded: inputs }\n }\n\n // The linter has no messages anymore\n // tag all of its messages from cache for removal and empty the cache\n if (!inputs.length) {\n return { oldKept: [], oldRemoved: oldMessages, newAdded: [] }\n }\n\n // In all the other situations:\n // perform diff checking between the linter's new messages and its cache\n\n // create a map from keys to oldMessages\n const cache = createKeyMessageMap(oldMessages)\n\n // Find old kept and new added\n const newAdded: Set = new Set()\n const oldKept: Map = new Map()\n for (let iInput = 0, len = inputs.length; iInput < len; iInput++) {\n const input = inputs[iInput]\n if (cache.has(input.key)) {\n oldKept.set(input.key, input)\n } else {\n newAdded.add(input)\n }\n }\n\n // Find old removed\n const cacheKeys = Array.from(cache.keys())\n const oldKeptKeys = Array.from(oldKept.keys())\n\n const oldRemovedKeys = cacheKeys.filter(x => !oldKeptKeys.includes(x))\n\n const oldRemoved: Set = new Set()\n for (let iRemoved = 0, RemovedKeysLen = oldRemovedKeys.length; iRemoved < RemovedKeysLen; iRemoved++) {\n // cache is created from oldMessages and oldRemovedKeys is a subset of oldMessages. So this will not be undefined\n oldRemoved.add(cache.get(oldRemovedKeys[iRemoved]) as Message)\n }\n\n return {\n oldKept: Array.from(oldKept.values()),\n oldRemoved: [...oldRemoved],\n newAdded: [...newAdded],\n }\n}\n\n// fast mergeArray function\n// https://uilicious.com/blog/javascript-array-push-is-945x-faster-than-array-concat/\nexport function mergeArray(arr1: Array, arr2: Array) {\n if (!arr2.length) {\n return\n }\n Array.prototype.push.apply(arr1, arr2)\n}\n","import { Emitter, CompositeDisposable } from 'atom'\nimport type { Disposable } from 'atom'\n\nimport * as Validate from './validate'\nimport { normalizeMessages, mergeArray } from './helpers'\nimport type { Indie, Message } from './types'\n\nexport default class IndieDelegate {\n indie: Indie\n scope: 'project' = 'project'\n emitter: Emitter = new Emitter()\n version: 2\n messages: Map> = new Map()\n subscriptions: CompositeDisposable = new CompositeDisposable()\n\n constructor(indie: Indie, version: 2) {\n this.indie = indie\n this.version = version\n this.subscriptions.add(this.emitter)\n }\n get name(): string {\n return this.indie.name\n }\n getMessages(): Array {\n const out: Array = []\n this.messages.forEach(m => {\n mergeArray(out, m)\n })\n return out\n }\n clearMessages(): void {\n if (!this.subscriptions.disposed) {\n this.emitter.emit('did-update', [])\n this.messages.clear()\n }\n }\n setMessages(filePath: string | Array>, messages: Array | null | undefined = null): void {\n // v2 Support from here on\n if (typeof filePath !== 'string' || !Array.isArray(messages)) {\n throw new Error('Invalid Parameters to setMessages()')\n }\n if (this.subscriptions.disposed || !Validate.messages(this.name, messages)) {\n return\n }\n messages.forEach(function (message) {\n if (message.location.file !== filePath) {\n console.debug('[Linter-UI-Default] Expected File', filePath, 'Message', message)\n throw new Error('message.location.file does not match the given filePath')\n }\n })\n\n normalizeMessages(this.name, messages)\n this.messages.set(filePath, messages)\n this.emitter.emit('did-update', this.getMessages())\n }\n setAllMessages(messages: Array): void {\n if (this.subscriptions.disposed) {\n return\n }\n\n if (!Array.isArray(messages) || atom.inDevMode()) {\n if (!Validate.messages(this.name, messages)) return\n }\n normalizeMessages(this.name, messages)\n\n this.messages.clear()\n for (let i = 0, { length } = messages; i < length; ++i) {\n const message: Message = messages[i]\n const filePath = message.location.file\n let fileMessages = this.messages.get(filePath)\n if (!fileMessages) {\n this.messages.set(filePath, (fileMessages = []))\n }\n fileMessages.push(message)\n }\n this.emitter.emit('did-update', this.getMessages())\n }\n onDidUpdate(callback: (...args: Array) => any): Disposable {\n return this.emitter.on('did-update', callback)\n }\n onDidDestroy(callback: (...args: Array) => any): Disposable {\n return this.emitter.on('did-destroy', callback)\n }\n dispose(): void {\n this.emitter.emit('did-destroy')\n this.subscriptions.dispose()\n this.messages.clear()\n }\n}\n","import { Emitter, CompositeDisposable } from 'atom'\nimport type { Disposable } from 'atom'\n\nimport IndieDelegate from './indie-delegate'\nimport { indie as validateIndie } from './validate'\nimport type { Indie } from './types'\n\nexport default class IndieRegistry {\n emitter: Emitter = new Emitter()\n delegates: Set = new Set()\n subscriptions: CompositeDisposable = new CompositeDisposable()\n\n constructor() {\n this.subscriptions.add(this.emitter)\n }\n // Public method\n register(config: Indie, version: 2): IndieDelegate {\n if (!validateIndie(config)) {\n throw new Error('Error registering Indie Linter')\n }\n const indieLinter = new IndieDelegate(config, version)\n this.delegates.add(indieLinter)\n indieLinter.onDidDestroy(() => {\n this.delegates.delete(indieLinter)\n })\n indieLinter.onDidUpdate(messages => {\n this.emitter.emit('did-update', { linter: indieLinter, messages })\n })\n this.emitter.emit('observe', indieLinter)\n\n return indieLinter\n }\n getProviders(): Array {\n return Array.from(this.delegates)\n }\n observe(callback: (...args: Array) => any): Disposable {\n this.delegates.forEach(callback)\n return this.emitter.on('observe', callback)\n }\n onDidUpdate(callback: (...args: Array) => any): Disposable {\n return this.emitter.on('did-update', callback)\n }\n dispose() {\n for (const entry of this.delegates) {\n entry.dispose()\n }\n this.subscriptions.dispose()\n }\n}\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","import { CompositeDisposable, Emitter } from 'atom'\nimport debounce from 'lodash/debounce'\nimport type { Disposable, TextBuffer } from 'atom'\nimport { flagMessages, mergeArray } from './helpers'\nimport type { MessagesPatch, Message, Linter } from './types'\n\ntype Linter$Message$Map = {\n buffer: TextBuffer | null | undefined\n linter: Linter\n changed: boolean\n deleted: boolean\n messages: Array\n oldMessages: Array\n}\n\nexport default class MessageRegistry {\n emitter: Emitter = new Emitter()\n messages: Array = []\n messagesMap: Set = new Set()\n subscriptions: CompositeDisposable = new CompositeDisposable()\n debouncedUpdate: () => void = debounce(this.update, 100, { leading: true })\n\n constructor() {\n this.subscriptions.add(this.emitter)\n }\n set({ messages, linter, buffer }: { messages: Array; linter: Linter; buffer: TextBuffer | null }) {\n // check if the linter has been already set\n let found = null\n for (const entry of this.messagesMap) {\n if (entry.buffer === buffer && entry.linter === linter) {\n found = entry\n break\n }\n }\n\n if (found) {\n // found linter\n found.messages = messages\n found.changed = true\n } else {\n // new linter\n this.messagesMap.add({ messages, linter, buffer, oldMessages: [], changed: true, deleted: false })\n }\n this.debouncedUpdate()\n }\n update() {\n // the final object sent to UI that contains the messages tagged for adding/removeal. messages is all the kept + added messages\n const result: { added: Array; removed: Array; messages: Array } = {\n added: [],\n removed: [],\n messages: [],\n }\n\n // looping over each linter\n for (const entry of this.messagesMap) {\n // if linter is deleted\n // tag the linter's cache for removal and delete it from the map\n if (entry.deleted) {\n mergeArray(result.removed, entry.oldMessages)\n this.messagesMap.delete(entry)\n continue\n }\n\n // if the linter is not changed\n // just use its cache (no added/removed and everything is kept) and skip the rest\n if (!entry.changed) {\n // TODO When this code acutally runs?!\n mergeArray(result.messages, entry.oldMessages)\n continue\n }\n\n // flag messages as oldKept, oldRemoved, newAdded\n const flaggedMessages = flagMessages(entry.messages, entry.oldMessages)\n\n // update the result and cache\n if (flaggedMessages !== null) {\n const { oldKept, oldRemoved, newAdded } = flaggedMessages\n mergeArray(result.added, newAdded)\n mergeArray(result.removed, oldRemoved)\n const allThisEntry = newAdded.concat(oldKept)\n mergeArray(result.messages, allThisEntry)\n entry.oldMessages = allThisEntry // update chache\n }\n }\n\n // if any messages is removed or added, then update the UI\n if (result.added.length || result.removed.length) {\n this.messages = result.messages\n this.emitter.emit('did-update-messages', result)\n }\n }\n onDidUpdateMessages(callback: (difference: MessagesPatch) => void): Disposable {\n return this.emitter.on('did-update-messages', callback)\n }\n deleteByBuffer(buffer: TextBuffer) {\n for (const entry of this.messagesMap) {\n if (entry.buffer === buffer) {\n entry.deleted = true\n }\n }\n this.debouncedUpdate()\n }\n deleteByLinter(linter: Linter) {\n for (const entry of this.messagesMap) {\n if (entry.linter === linter) {\n entry.deleted = true\n }\n }\n this.debouncedUpdate()\n }\n dispose() {\n this.subscriptions.dispose()\n }\n}\n","import { Emitter, CompositeDisposable } from 'atom'\nimport type { TextEditor, Disposable, Notification } from 'atom'\n\nimport * as Helpers from './helpers'\nimport * as Validate from './validate'\nimport { $version, $activated, $requestLatest, $requestLastReceived } from './helpers'\nimport type { Linter } from './types'\n\nexport default class LinterRegistry {\n emitter: Emitter = new Emitter()\n linters: Set = new Set()\n lintOnChange: boolean = true\n ignoreVCS: boolean = true\n ignoreGlob: string = '**/*.min.{js,css}'\n lintPreviewTabs: boolean = true\n subscriptions: CompositeDisposable = new CompositeDisposable()\n disabledProviders: Array = []\n activeNotifications: Set = new Set()\n\n constructor() {\n this.subscriptions.add(\n this.emitter,\n atom.config.observe('linter.lintOnChange', lintOnChange => {\n this.lintOnChange = lintOnChange\n }),\n atom.config.observe('core.excludeVcsIgnoredPaths', ignoreVCS => {\n this.ignoreVCS = ignoreVCS\n }),\n atom.config.observe('linter.ignoreGlob', ignoreGlob => {\n this.ignoreGlob = ignoreGlob\n }),\n atom.config.observe('linter.lintPreviewTabs', lintPreviewTabs => {\n this.lintPreviewTabs = lintPreviewTabs\n }),\n atom.config.observe('linter.disabledProviders', disabledProviders => {\n this.disabledProviders = disabledProviders\n }),\n )\n }\n hasLinter(linter: Linter): boolean {\n return this.linters.has(linter)\n }\n addLinter(linter: Linter) {\n if (!Validate.linter(linter)) {\n return\n }\n linter[$activated] = true\n if (typeof linter[$requestLatest] === 'undefined') {\n linter[$requestLatest] = 0\n }\n if (typeof linter[$requestLastReceived] === 'undefined') {\n linter[$requestLastReceived] = 0\n }\n linter[$version] = 2\n this.linters.add(linter)\n }\n getProviders(): Array {\n return Array.from(this.linters)\n }\n deleteLinter(linter: Linter) {\n if (!this.linters.has(linter)) {\n return\n }\n linter[$activated] = false\n this.linters.delete(linter)\n }\n async lint({ onChange, editor }: { onChange: boolean; editor: TextEditor }): Promise {\n const filePath = editor.getPath()\n\n if (\n (onChange && !this.lintOnChange) || // Lint-on-change mismatch\n // Ignored by VCS, Glob, or simply not saved anywhere yet\n Helpers.isPathIgnored(editor.getPath(), this.ignoreGlob, this.ignoreVCS) ||\n (!this.lintPreviewTabs && atom.workspace.getActivePane().getPendingItem() === editor) // Ignore Preview tabs\n ) {\n return false\n }\n\n const scopes = Helpers.getEditorCursorScopes(editor)\n\n const promises = []\n for (const linter of this.linters) {\n if (!Helpers.shouldTriggerLinter(linter, onChange, scopes)) {\n continue\n }\n if (this.disabledProviders.includes(linter.name)) {\n continue\n }\n const number = ++linter[$requestLatest]\n const statusBuffer = linter.scope === 'file' ? editor.getBuffer() : null\n const statusFilePath = linter.scope === 'file' ? filePath : null\n\n this.emitter.emit('did-begin-linting', { number, linter, filePath: statusFilePath })\n promises.push(\n new Promise(function (resolve: (editor: ReturnType) => void) {\n resolve(linter.lint(editor))\n }).then(\n messages => {\n this.emitter.emit('did-finish-linting', { number, linter, filePath: statusFilePath })\n if (linter[$requestLastReceived] >= number || !linter[$activated] || (statusBuffer && !statusBuffer.isAlive())) {\n return\n }\n linter[$requestLastReceived] = number\n if (statusBuffer && !statusBuffer.isAlive()) {\n return\n }\n\n if (messages === null) {\n // NOTE: Do NOT update the messages when providers return null\n return\n }\n\n let validity = true\n // NOTE: We are calling it when results are not an array to show a nice notification\n if (atom.inDevMode() || !Array.isArray(messages)) {\n validity = Validate.messages(linter.name, messages)\n }\n if (!validity) {\n return\n }\n\n Helpers.normalizeMessages(linter.name, messages)\n this.emitter.emit('did-update-messages', { messages, linter, buffer: statusBuffer })\n },\n error => {\n this.emitter.emit('did-finish-linting', { number, linter, filePath: statusFilePath })\n\n console.error(`[Linter] Error running ${linter.name}`, error)\n const notificationMessage = `[Linter] Error running ${linter.name}`\n if (Array.from(this.activeNotifications).some(item => item.getOptions().detail === notificationMessage)) {\n // This message is still showing to the user!\n return\n }\n\n const notification = atom.notifications.addError(notificationMessage, {\n detail: 'See Console for more info.',\n dismissable: true,\n buttons: [\n {\n text: 'Open Console',\n onDidClick: () => {\n atom.openDevTools()\n notification.dismiss()\n },\n },\n {\n text: 'Cancel',\n onDidClick: () => {\n notification.dismiss()\n },\n },\n ],\n })\n },\n ),\n )\n }\n\n await Promise.all(promises)\n return true\n }\n onDidUpdateMessages(callback: (...args: Array) => any): Disposable {\n return this.emitter.on('did-update-messages', callback)\n }\n onDidBeginLinting(callback: (...args: Array) => any): Disposable {\n return this.emitter.on('did-begin-linting', callback)\n }\n onDidFinishLinting(callback: (...args: Array) => any): Disposable {\n return this.emitter.on('did-finish-linting', callback)\n }\n dispose() {\n this.activeNotifications.forEach(notification => notification.dismiss())\n this.activeNotifications.clear()\n this.linters.clear()\n this.subscriptions.dispose()\n }\n}\n","import { Emitter, CompositeDisposable, Disposable } from 'atom'\nimport debounce from 'lodash/debounce'\nimport type { TextEditor } from 'atom'\n\nexport default class EditorLinter {\n editor: TextEditor\n emitter: Emitter = new Emitter()\n subscriptions: CompositeDisposable = new CompositeDisposable()\n\n constructor(editor: TextEditor) {\n if (!atom.workspace.isTextEditor(editor)) {\n throw new Error('EditorLinter expects a valid TextEditor')\n }\n const editorBuffer = editor.getBuffer()\n const debouncedLint = debounce(\n () => {\n this.emitter.emit('should-lint', false)\n },\n 50,\n { leading: true },\n )\n\n this.editor = editor\n\n this.subscriptions.add(\n this.editor.onDidDestroy(() => this.dispose()),\n\n // This debouncing is for beautifiers, if they change contents of the editor and save\n // Linter should count that group of events as one.\n this.editor.onDidSave(debouncedLint),\n\n // This is to relint in case of external changes to the opened file\n editorBuffer.onDidReload(debouncedLint),\n\n // NOTE: TextEditor::onDidChange immediately invokes the callback if the text editor was *just* created\n // Using TextBuffer::onDidChange doesn't have the same behavior so using it instead.\n this.subscriptiveObserve(atom.config, 'linter.lintOnChangeInterval', interval =>\n editorBuffer.onDidChange(\n debounce(() => {\n this.emitter.emit('should-lint', true)\n }, interval),\n ),\n ),\n )\n }\n getEditor(): TextEditor {\n return this.editor\n }\n lint(onChange: boolean = false) {\n this.emitter.emit('should-lint', onChange)\n }\n onShouldLint(callback: (...args: Array) => any): Disposable {\n return this.emitter.on('should-lint', callback)\n }\n onDidDestroy(callback: (...args: Array) => any): Disposable {\n return this.emitter.on('did-destroy', callback)\n }\n dispose() {\n this.emitter.emit('did-destroy')\n this.subscriptions.dispose()\n this.emitter.dispose()\n }\n\n subscriptiveObserve(object: Record, eventName: string, callback: (...args: Array) => any): Disposable {\n let subscription: Disposable | null = null\n const eventSubscription = object.observe(eventName, (props: Record) => {\n if (subscription) {\n subscription.dispose()\n }\n subscription = callback.call(this, props)\n })\n\n return new Disposable(function () {\n eventSubscription.dispose()\n if (subscription) {\n subscription.dispose()\n }\n })\n }\n}\n","import { Emitter, CompositeDisposable } from 'atom'\nimport type { Disposable, TextEditor } from 'atom'\nimport EditorLinter from './editor-linter'\n\nexport default class EditorRegistry {\n emitter: Emitter = new Emitter()\n lintOnOpen: boolean = true\n subscriptions: CompositeDisposable = new CompositeDisposable()\n editorLinters: Map = new Map()\n\n constructor() {\n this.subscriptions.add(\n this.emitter,\n atom.config.observe('linter.lintOnOpen', lintOnOpen => {\n this.lintOnOpen = lintOnOpen\n }),\n )\n }\n activate() {\n this.subscriptions.add(\n atom.workspace.observeTextEditors(textEditor => {\n this.createFromTextEditor(textEditor)\n }),\n )\n }\n get(textEditor: TextEditor): EditorLinter | null | undefined {\n return this.editorLinters.get(textEditor)\n }\n createFromTextEditor(textEditor: TextEditor): EditorLinter {\n let editorLinter = this.editorLinters.get(textEditor)\n if (editorLinter) {\n return editorLinter\n }\n editorLinter = new EditorLinter(textEditor)\n editorLinter.onDidDestroy(() => {\n this.editorLinters.delete(textEditor)\n })\n this.editorLinters.set(textEditor, editorLinter)\n this.emitter.emit('observe', editorLinter)\n if (this.lintOnOpen) {\n editorLinter.lint()\n }\n return editorLinter\n }\n hasSibling(editorLinter: EditorLinter): boolean {\n const buffer = editorLinter.getEditor().getBuffer()\n\n return Array.from(this.editorLinters.keys()).some(item => item.getBuffer() === buffer)\n }\n observe(callback: (editorLinter: EditorLinter) => void): Disposable {\n this.editorLinters.forEach(callback)\n return this.emitter.on('observe', callback)\n }\n dispose() {\n for (const entry of this.editorLinters.values()) {\n entry.dispose()\n }\n this.subscriptions.dispose()\n }\n}\n","import { CompositeDisposable, Emitter } from 'atom'\nimport type { Disposable } from 'atom'\n\nimport * as Helpers from './helpers'\nimport type { Linter, UI } from './types'\nimport type IndieDelegate from './indie-delegate'\n\nlet manifest: { version: number }\n\nfunction formatItem(item: { name: string } | string) {\n let itemName: string\n if (item && typeof item === 'object' && typeof item.name === 'string') {\n itemName = item.name\n } else if (typeof item === 'string') {\n itemName = item\n } else {\n throw new Error('Unknown object passed to formatItem()')\n }\n return ` - ${itemName}`\n}\nfunction sortByName(item1: { name: string }, item2: { name: string }) {\n return item1.name.localeCompare(item2.name)\n}\n\nexport default class Commands {\n emitter: Emitter = new Emitter()\n subscriptions: CompositeDisposable = new CompositeDisposable()\n\n constructor() {\n this.subscriptions.add(\n this.emitter,\n atom.commands.add('atom-workspace', {\n 'linter:enable-linter': () => this.enableLinter(),\n 'linter:disable-linter': () => this.disableLinter(),\n }),\n atom.commands.add('atom-text-editor:not([mini])', {\n 'linter:lint': () => this.lint(),\n 'linter:debug': () => this.debug(),\n 'linter:toggle-active-editor': () => this.toggleActiveEditor(),\n }),\n )\n }\n lint() {\n this.emitter.emit('should-lint')\n }\n debug() {\n this.emitter.emit('should-debug')\n }\n enableLinter() {\n this.emitter.emit('should-toggle-linter', 'enable')\n }\n disableLinter() {\n this.emitter.emit('should-toggle-linter', 'disable')\n }\n toggleActiveEditor() {\n this.emitter.emit('should-toggle-active-editor')\n }\n showDebug(standardLinters: Array, indieLinters: Array, uiProviders: Array) {\n if (!manifest) {\n manifest = require('../package.json')\n }\n\n const textEditor = atom.workspace.getActiveTextEditor()\n if (textEditor === undefined) return\n const textEditorScopes = Helpers.getEditorCursorScopes(textEditor)\n const sortedLinters = standardLinters.slice().sort(sortByName)\n const sortedIndieLinters = indieLinters.slice().sort(sortByName)\n const sortedUIProviders = uiProviders.slice().sort(sortByName)\n\n const indieLinterNames = sortedIndieLinters.map(formatItem).join('\\n')\n const standardLinterNames = sortedLinters.map(formatItem).join('\\n')\n const matchingStandardLinters = sortedLinters\n .filter(linter => Helpers.shouldTriggerLinter(linter, false, textEditorScopes))\n .map(formatItem)\n .join('\\n')\n const humanizedScopes = textEditorScopes.map(formatItem).join('\\n')\n const uiProviderNames = sortedUIProviders.map(formatItem).join('\\n')\n\n const ignoreGlob = atom.config.get('linter.ignoreGlob')\n const ignoreVCSIgnoredPaths = atom.config.get('core.excludeVcsIgnoredPaths')\n const disabledLinters = atom.config.get('linter.disabledProviders').map(formatItem).join('\\n')\n const filePathIgnored = Helpers.isPathIgnored(textEditor.getPath(), ignoreGlob, ignoreVCSIgnoredPaths)\n\n atom.notifications.addInfo('Linter Debug Info', {\n detail: [\n `Platform: ${process.platform}`,\n `Atom Version: ${atom.getVersion()}`,\n `Linter Version: ${manifest.version}`,\n `Opened file is ignored: ${filePathIgnored ? 'Yes' : 'No'}`,\n `Matching Linter Providers: \\n${matchingStandardLinters}`,\n `Disabled Linter Providers: \\n${disabledLinters}`,\n `Standard Linter Providers: \\n${standardLinterNames}`,\n `Indie Linter Providers: \\n${indieLinterNames}`,\n `UI Providers: \\n${uiProviderNames}`,\n `Ignore Glob: ${ignoreGlob}`,\n `VCS Ignored Paths are excluded: ${ignoreVCSIgnoredPaths}`,\n `Current File Scopes: \\n${humanizedScopes}`,\n ].join('\\n'),\n dismissable: true,\n })\n }\n onShouldLint(callback: (...args: Array) => any): Disposable {\n return this.emitter.on('should-lint', callback)\n }\n onShouldDebug(callback: (...args: Array) => any): Disposable {\n return this.emitter.on('should-debug', callback)\n }\n onShouldToggleActiveEditor(callback: (...args: Array) => any): Disposable {\n return this.emitter.on('should-toggle-active-editor', callback)\n }\n onShouldToggleLinter(callback: (...args: Array) => any): Disposable {\n return this.emitter.on('should-toggle-linter', callback)\n }\n dispose() {\n this.subscriptions.dispose()\n }\n}\n","import { CompositeDisposable, Emitter, Disposable } from 'atom'\n\n// https://github.com/atom/atom-select-list/pull/28\nlet SelectListView: any\ntype ToggleAction = 'enable' | 'disable'\n\nexport default class ToggleProviders {\n action: ToggleAction\n emitter: Emitter = new Emitter()\n providers: Array\n subscriptions: CompositeDisposable = new CompositeDisposable()\n disabledProviders: Array = []\n\n constructor(action: ToggleAction, providers: Array) {\n this.action = action\n this.providers = providers\n\n this.subscriptions.add(\n this.emitter,\n atom.config.observe('linter.disabledProviders', disabledProviders => {\n this.disabledProviders = disabledProviders\n }),\n )\n }\n async getItems(): Promise> {\n if (this.action === 'disable') {\n return this.providers.filter(name => !this.disabledProviders.includes(name))\n }\n return this.disabledProviders\n }\n async process(name: string): Promise {\n if (this.action === 'disable') {\n this.disabledProviders.push(name)\n this.emitter.emit('did-disable', name)\n } else {\n const index = this.disabledProviders.indexOf(name)\n if (index !== -1) {\n this.disabledProviders.splice(index, 1)\n }\n }\n atom.config.set('linter.disabledProviders', this.disabledProviders)\n }\n async show() {\n if (!SelectListView) {\n SelectListView = require('atom-select-list')\n }\n const selectListView = new SelectListView({\n items: await this.getItems(),\n emptyMessage: 'No matches found',\n elementForItem: (item: any) => {\n const li = document.createElement('li')\n li.textContent = item\n return li\n },\n didConfirmSelection: (item: any) => {\n this.process(item)\n .catch(e => console.error('[Linter] Unable to process toggle:', e))\n .then(() => this.dispose())\n },\n didCancelSelection: () => {\n this.dispose()\n },\n didConfirmEmptySelection: () => {\n this.dispose()\n },\n })\n const panel = atom.workspace.addModalPanel({ item: selectListView })\n\n selectListView.focus()\n this.subscriptions.add(\n new Disposable(function () {\n panel.destroy()\n }),\n )\n }\n onDidDispose(callback: () => any): Disposable {\n return this.emitter.on('did-dispose', callback)\n }\n onDidDisable(callback: (name: string) => any): Disposable {\n return this.emitter.on('did-disable', callback)\n }\n dispose() {\n this.emitter.emit('did-dispose')\n this.subscriptions.dispose()\n }\n}\n","import { CompositeDisposable, Disposable } from 'atom'\n\nimport Linter from './main'\nimport type { UI, Linter as LinterProvider, Indie } from './types'\n\n// Internal variables\nlet instance: Linter\nlet subscriptions: CompositeDisposable\n\nexport function activate() {\n subscriptions = new CompositeDisposable()\n\n instance = new Linter()\n subscriptions.add(\n instance,\n atom.packages.onDidActivateInitialPackages(function () {\n if (!atom.inSpecMode()) {\n require('atom-package-deps').install('linter', true)\n }\n }),\n )\n}\nexport function consumeLinter(linter: LinterProvider | Array): Disposable {\n let linters: Array\n if (Array.isArray(linter)) {\n linters = linter\n } else {\n linters = [linter]\n }\n\n for (const entry of linters) {\n instance.addLinter(entry)\n }\n return new Disposable(() => {\n for (const entry of linters) {\n instance.deleteLinter(entry)\n }\n })\n}\nexport function consumeUI(ui: UI | Array): Disposable {\n let uis: Array\n if (Array.isArray(ui)) {\n uis = ui\n } else {\n uis = [ui]\n }\n\n for (const entry of uis) {\n instance.addUI(entry)\n }\n return new Disposable(() => {\n for (const entry of uis) {\n instance.deleteUI(entry)\n }\n })\n}\nexport function provideIndie() {\n return (indie: Indie) => instance.addIndie(indie)\n}\nexport function deactivate() {\n subscriptions.dispose()\n}\n","import arrayUnique from 'lodash/uniq'\nimport { CompositeDisposable } from 'atom'\n\nimport UIRegistry from './ui-registry'\nimport IndieRegistry from './indie-registry'\nimport MessageRegistry from './message-registry'\nimport LinterRegistry from './linter-registry'\nimport EditorsRegistry from './editor-registry'\nimport Commands from './commands'\nimport ToggleView from './toggle-view'\nimport type { UI, Linter as LinterProvider, Indie } from './types'\n\nclass Linter {\n commands: Commands = new Commands()\n registryUI?: UIRegistry\n registryIndie?: IndieRegistry\n registryEditors?: EditorsRegistry\n registryLinters?: LinterRegistry\n registryMessages?: MessageRegistry\n subscriptions: CompositeDisposable = new CompositeDisposable()\n idleCallbacks: Set = new Set()\n\n constructor() {\n this.subscriptions.add(this.commands)\n\n this.commands.onShouldLint(() => {\n this.registryEditorsInit()\n const textEditor = atom.workspace.getActiveTextEditor()\n if (textEditor === undefined) return\n // this.registryEditors becomes valid inside registryEditorsInit\n const editorLinter = this.registryEditors!.get(textEditor)\n if (editorLinter) {\n editorLinter.lint()\n }\n })\n this.commands.onShouldToggleActiveEditor(() => {\n const textEditor = atom.workspace.getActiveTextEditor()\n if (textEditor === undefined) return\n this.registryEditorsInit()\n // this.registryEditors becomes valid inside registryEditorsInit\n const editor = this.registryEditors!.get(textEditor)\n if (editor) {\n editor.dispose()\n } else if (textEditor) {\n // this.registryEditors becomes valid inside registryEditorsInit\n this.registryEditors!.createFromTextEditor(textEditor)\n }\n })\n this.commands.onShouldDebug(async () => {\n this.registryUIInit()\n this.registryIndieInit()\n this.registryLintersInit()\n this.commands.showDebug(\n // this.registryLinters becomes valid inside registryLintersInit\n this.registryLinters!.getProviders(),\n // this.registryIndie becomes valid inside registryIndieInit\n this.registryIndie!.getProviders(),\n // this.registryUI becomes valid inside registryUIInit\n this.registryUI!.getProviders(),\n )\n })\n this.commands.onShouldToggleLinter(action => {\n this.registryLintersInit()\n // this.registryLinters becomes valid inside registryLintersInit\n const toggleView = new ToggleView(action, arrayUnique(this.registryLinters!.getProviders().map(linter => linter.name)))\n toggleView.onDidDispose(() => {\n this.subscriptions.remove(toggleView)\n })\n toggleView.onDidDisable(name => {\n // this.registryLinters becomes valid inside registryLintersInit\n const linter = this.registryLinters!.getProviders().find(entry => entry.name === name)\n if (linter) {\n this.registryMessagesInit()\n // this.registryMessages becomes valid inside registryMessagesInit\n this.registryMessages!.deleteByLinter(linter)\n }\n })\n toggleView.show()\n this.subscriptions.add(toggleView)\n })\n\n const projectPathChangeCallbackID = window.requestIdleCallback(\n /* projectPathChange */ () => {\n this.idleCallbacks.delete(projectPathChangeCallbackID)\n // NOTE: Atom triggers this on boot so wait a while\n this.subscriptions.add(\n atom.project.onDidChangePaths(() => {\n this.commands.lint()\n }),\n )\n },\n )\n this.idleCallbacks.add(projectPathChangeCallbackID)\n\n const registryEditorsInitCallbackID = window.requestIdleCallback(\n /* registryEditorsIdleInit */ () => {\n this.idleCallbacks.delete(registryEditorsInitCallbackID)\n // This will be called on the fly if needed, but needs to run on it's\n // own at some point or linting on open or on change will never trigger\n this.registryEditorsInit()\n },\n )\n this.idleCallbacks.add(registryEditorsInitCallbackID)\n }\n dispose() {\n this.idleCallbacks.forEach(callbackID => window.cancelIdleCallback(callbackID))\n this.idleCallbacks.clear()\n this.subscriptions.dispose()\n }\n\n registryEditorsInit() {\n if (this.registryEditors !== undefined) {\n return\n }\n this.registryEditors = new EditorsRegistry()\n this.subscriptions.add(this.registryEditors)\n this.registryEditors.observe(editorLinter => {\n editorLinter.onShouldLint(onChange => {\n this.registryLintersInit()\n // this.registryLinters becomes valid inside registryLintersInit\n this.registryLinters!.lint({ onChange, editor: editorLinter.getEditor() })\n })\n editorLinter.onDidDestroy(() => {\n this.registryMessagesInit()\n if (!this.registryEditors!.hasSibling(editorLinter)) {\n // this.registryMessages becomes valid inside registryMessagesInit\n this.registryMessages!.deleteByBuffer(editorLinter.getEditor().getBuffer())\n }\n })\n })\n this.registryEditors.activate()\n }\n registryLintersInit() {\n if (this.registryLinters !== undefined) {\n return\n }\n this.registryLinters = new LinterRegistry()\n this.subscriptions.add(this.registryLinters)\n this.registryLinters.onDidUpdateMessages(({ linter, messages, buffer }) => {\n this.registryMessagesInit()\n // this.registryMessages becomes valid inside registryMessagesInit\n this.registryMessages!.set({ linter, messages, buffer })\n })\n this.registryLinters.onDidBeginLinting(({ linter, filePath }) => {\n this.registryUIInit()\n // this.registryUI becomes valid inside registryUIInit\n this.registryUI!.didBeginLinting(linter, filePath)\n })\n this.registryLinters.onDidFinishLinting(({ linter, filePath }) => {\n this.registryUIInit()\n // this.registryUI becomes valid inside registryUIInit\n this.registryUI!.didFinishLinting(linter, filePath)\n })\n }\n registryIndieInit() {\n if (this.registryIndie !== undefined) {\n return\n }\n this.registryIndie = new IndieRegistry()\n this.subscriptions.add(this.registryIndie)\n this.registryIndie.observe(indieLinter => {\n indieLinter.onDidDestroy(() => {\n this.registryMessagesInit()\n // this.registryMessages becomes valid inside registryMessagesInit\n this.registryMessages!.deleteByLinter(indieLinter)\n })\n })\n this.registryIndie.onDidUpdate(({ linter, messages }) => {\n this.registryMessagesInit()\n // this.registryMessages becomes valid inside registryMessagesInit\n this.registryMessages!.set({ linter, messages, buffer: null })\n })\n }\n registryMessagesInit() {\n if (this.registryMessages) {\n return\n }\n this.registryMessages = new MessageRegistry()\n this.subscriptions.add(this.registryMessages)\n this.registryMessages.onDidUpdateMessages(difference => {\n this.registryUIInit()\n // this.registryUI becomes valid inside registryUIInit\n this.registryUI!.render(difference)\n })\n }\n registryUIInit() {\n if (this.registryUI !== undefined) {\n return\n }\n this.registryUI = new UIRegistry()\n this.subscriptions.add(this.registryUI)\n }\n\n // API methods for providing/consuming services\n // UI\n addUI(ui: UI) {\n this.registryUIInit()\n // this.registryUI becomes valid inside registryUIInit\n this.registryUI!.add(ui)\n this.registryMessagesInit()\n // this.registryMessages becomes valid inside registryMessagesInit\n const messages = this.registryMessages!.messages\n if (messages.length) {\n ui.render({ added: messages, messages, removed: [] })\n }\n }\n deleteUI(ui: UI) {\n this.registryUIInit()\n // this.registryUI becomes valid inside registryUIInit\n this.registryUI!.delete(ui)\n }\n // Standard Linter\n addLinter(linter: LinterProvider) {\n this.registryLintersInit()\n // this.registryLinters becomes valid inside registryLintersInit\n this.registryLinters!.addLinter(linter)\n }\n deleteLinter(linter: LinterProvider) {\n this.registryLintersInit()\n // this.registryLinters becomes valid inside registryLintersInit\n this.registryLinters!.deleteLinter(linter)\n this.registryMessagesInit()\n // this.registryMessages becomes valid inside registryMessagesInit\n this.registryMessages!.deleteByLinter(linter)\n }\n // Indie Linter\n addIndie(indie: Indie) {\n this.registryIndieInit()\n // this.registryIndie becomes valid inside registryIndieInit\n return this.registryIndie!.register(indie, 2)\n }\n}\n\nexport default Linter\n"],"names":["global","Object","freeSelf","self","freeGlobal","Function","root","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","value","isOwn","call","tag","unmasked","e","result","getRawTag","objectToString","type","uid","isObject","baseGetTag","maskSrcKey","exec","coreJsData","keys","IE_PROTO","func","funcToString","reIsHostCtor","funcProto","reIsNative","RegExp","replace","isMasked","isFunction","test","toSource","object","key","getValue","baseIsNative","getNative","this","__data__","nativeCreate","size","has","data","Hash","entries","index","length","clear","entry","set","hashClear","hashDelete","get","hashGet","hashHas","hashSet","other","array","eq","splice","Array","assocIndexOf","pop","push","ListCache","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","hash","map","Map","string","isKeyable","getMapData","MapCache","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","SetCache","values","add","setCacheAdd","setCacheHas","predicate","fromIndex","fromRight","strictIndexOf","baseFindIndex","baseIsNaN","baseIndexOf","comparator","cache","forEach","Set","setToArray","noop","iteratee","includes","arrayIncludes","isCommon","seen","arrayIncludesWith","createSet","cacheHas","outer","computed","seenIndex","baseUniq","showError","title","description","points","renderedPoints","item","atom","notifications","addWarning","dismissable","detail","join","VALID_SEVERITY","validateMessages","linterName","messages","isArray","invalidURL","invalidIcon","invalidExcerpt","invalidLocation","invalidSeverity","invalidSolution","invalidReference","invalidDescription","invalidLinterName","i","message","reference","icon","location","file","position","range","Range","fromObject","Number","isNaN","start","row","column","end","solutions","Point","excerpt","severity","url","UIRegistry","[object Object]","CompositeDisposable","ui","providers","name","didBeginLinting","didFinishLinting","render","dispose","validateUI","subscriptions","provider","delete","from","linter","filePath","$activated","$requestLastReceived","shouldTriggerLinter","wasTriggeredOnChange","scopes","lintsOnChange","some","scope","grammarScopes","getEditorCursorScopes","textEditor","arrayUnique","getCursors","reduce","cursor","concat","getScopeDescriptor","getScopesArray","minimatch","isPathIgnored","ignoredGlob","ignoredVCS","repository","projectPaths","project","getPaths","projectPath","indexOf","getRepositories","normalizedFilePath","process","platform","require","updateMessageKey","normalizeMessages","solution","j","_length","version","flagMessages","inputs","oldMessages","oldKept","oldRemoved","newAdded","keyMessageMap","createKeyMessageMap","iInput","len","input","cacheKeys","oldKeptKeys","oldRemovedKeys","filter","x","iRemoved","RemovedKeysLen","mergeArray","arr1","arr2","apply","IndieDelegate","indie","Emitter","emitter","out","m","disposed","emit","Error","Validate.messages","console","debug","getMessages","inDevMode","fileMessages","callback","on","IndieRegistry","config","validateIndie","indieLinter","delegates","onDidDestroy","onDidUpdate","Date","now","isObjectLike","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","isSymbol","valueOf","isBinary","slice","nativeMax","Math","max","nativeMin","min","wait","options","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","arguments","clearTimeout","toNumber","cancel","flush","MessageRegistry","debounce","update","buffer","found","messagesMap","changed","deleted","debouncedUpdate","added","removed","flaggedMessages","allThisEntry","LinterRegistry","observe","lintOnChange","ignoreVCS","ignoreGlob","lintPreviewTabs","disabledProviders","linters","lint","Validate.linter","onChange","editor","getPath","Helpers.isPathIgnored","workspace","getActivePane","getPendingItem","Helpers.getEditorCursorScopes","promises","Helpers.shouldTriggerLinter","number","statusBuffer","getBuffer","statusFilePath","Promise","resolve","then","isAlive","validity","Helpers.normalizeMessages","error","notificationMessage","activeNotifications","getOptions","notification","addError","buttons","text","onDidClick","openDevTools","dismiss","all","EditorLinter","isTextEditor","editorBuffer","debouncedLint","onDidSave","onDidReload","subscriptiveObserve","interval","onDidChange","eventName","subscription","eventSubscription","props","Disposable","EditorRegistry","lintOnOpen","observeTextEditors","createFromTextEditor","editorLinters","editorLinter","getEditor","manifest","SelectListView","instance","formatItem","itemName","sortByName","item1","item2","localeCompare","Commands","commands","linter:enable-linter","enableLinter","linter:disable-linter","disableLinter","linter:lint","linter:debug","linter:toggle-active-editor","toggleActiveEditor","standardLinters","indieLinters","uiProviders","getActiveTextEditor","textEditorScopes","sortedLinters","sort","sortedIndieLinters","sortedUIProviders","indieLinterNames","standardLinterNames","matchingStandardLinters","humanizedScopes","uiProviderNames","ignoreVCSIgnoredPaths","disabledLinters","filePathIgnored","addInfo","getVersion","ToggleProviders","action","selectListView","items","getItems","emptyMessage","elementForItem","li","document","createElement","textContent","didConfirmSelection","catch","didCancelSelection","didConfirmEmptySelection","panel","addModalPanel","focus","destroy","Linter","onShouldLint","registryEditorsInit","registryEditors","onShouldToggleActiveEditor","onShouldDebug","async","registryUIInit","registryIndieInit","registryLintersInit","showDebug","registryLinters","getProviders","registryIndie","registryUI","onShouldToggleLinter","toggleView","ToggleView","onDidDispose","remove","onDidDisable","find","registryMessagesInit","registryMessages","deleteByLinter","show","projectPathChangeCallbackID","window","requestIdleCallback","idleCallbacks","onDidChangePaths","registryEditorsInitCallbackID","callbackID","cancelIdleCallback","EditorsRegistry","hasSibling","deleteByBuffer","activate","onDidUpdateMessages","onDidBeginLinting","onDidFinishLinting","difference","addLinter","deleteLinter","register","packages","onDidActivateInitialPackages","inSpecMode","install","uis","addUI","deleteUI","addIndie"],"mappings":"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"} \ No newline at end of file diff --git a/dist/indie-registry.d.ts b/dist/indie-registry.d.ts index 718d0b0d..9a2b39fb 100644 --- a/dist/indie-registry.d.ts +++ b/dist/indie-registry.d.ts @@ -2,7 +2,7 @@ import { Emitter, CompositeDisposable } from 'atom'; import type { Disposable } from 'atom'; import IndieDelegate from './indie-delegate'; import type { Indie } from './types'; -declare class IndieRegistry { +export default class IndieRegistry { emitter: Emitter; delegates: Set; subscriptions: CompositeDisposable; @@ -13,4 +13,3 @@ declare class IndieRegistry { onDidUpdate(callback: (...args: Array) => any): Disposable; dispose(): void; } -export default IndieRegistry; diff --git a/dist/linter-registry.d.ts b/dist/linter-registry.d.ts index 5aeb52c5..b5d6f316 100644 --- a/dist/linter-registry.d.ts +++ b/dist/linter-registry.d.ts @@ -1,7 +1,7 @@ import { Emitter, CompositeDisposable } from 'atom'; import type { TextEditor, Disposable, Notification } from 'atom'; import type { Linter } from './types'; -declare class LinterRegistry { +export default class LinterRegistry { emitter: Emitter; linters: Set; lintOnChange: boolean; @@ -25,4 +25,3 @@ declare class LinterRegistry { onDidFinishLinting(callback: (...args: Array) => any): Disposable; dispose(): void; } -export default LinterRegistry; diff --git a/dist/message-registry.d.ts b/dist/message-registry.d.ts index 1e2da903..c4c4272d 100644 --- a/dist/message-registry.d.ts +++ b/dist/message-registry.d.ts @@ -9,7 +9,7 @@ declare type Linter$Message$Map = { messages: Array; oldMessages: Array; }; -declare class MessageRegistry { +export default class MessageRegistry { emitter: Emitter; messages: Array; messagesMap: Set; @@ -27,4 +27,4 @@ declare class MessageRegistry { deleteByLinter(linter: Linter): void; dispose(): void; } -export default MessageRegistry; +export {}; diff --git a/dist/toggle-view.d.ts b/dist/toggle-view.d.ts index 81cc59e0..9a3d0b8a 100644 --- a/dist/toggle-view.d.ts +++ b/dist/toggle-view.d.ts @@ -1,6 +1,6 @@ import { CompositeDisposable, Emitter, Disposable } from 'atom'; declare type ToggleAction = 'enable' | 'disable'; -declare class ToggleProviders { +export default class ToggleProviders { action: ToggleAction; emitter: Emitter; providers: Array; @@ -14,4 +14,4 @@ declare class ToggleProviders { onDidDisable(callback: (name: string) => any): Disposable; dispose(): void; } -export default ToggleProviders; +export {}; diff --git a/dist/tsconfig.tsbuildinfo b/dist/tsconfig.tsbuildinfo index e23fd163..61f044a8 100644 --- a/dist/tsconfig.tsbuildinfo +++ b/dist/tsconfig.tsbuildinfo @@ -482,12 +482,12 @@ "affectsGlobalScope": false }, "../lib/indie-delegate.ts": { - "version": "cfbad9aaa8b3efe3527f2facb04123366fcb8f30bbc83581e4064f3678734910", + "version": "34abd0e8b51b42f2e4d36865af7fbf05f9a448c330fabafb1cc00bf8d7317b06", "signature": "91c82587a8f2a13d64ac4f62cfb9aa7979777dccd8761c48a2ddc98cc3e2f608", "affectsGlobalScope": false }, "../lib/commands.ts": { - "version": "1ad619c8c2b44795718b6b3b3f12e058cfc1abc54f8688c49348acaeea2a3b5f", + "version": "86389c7cc30f463f68adaf32da65f4d0eb564d45f1582be0204e5ae97482fa01", "signature": "90a942f5509659aa3292ae768cc1526afc7ce6ed2070f428e346d1457b885461", "affectsGlobalScope": false }, @@ -497,47 +497,47 @@ "affectsGlobalScope": false }, "../lib/editor-linter.ts": { - "version": "578f124e1b183948337c644e44c0ef968a3aa0ed3c09ae172c4833bb022dc2d8", + "version": "7ecdb204b8a1a334d1249175439962c8bf711734830966de787e0551aad11f03", "signature": "c63b1169335e397ad4d80eac61de027393ca1b23f155ddc008d649d2191fb2d5", "affectsGlobalScope": false }, "../lib/editor-registry.ts": { - "version": "5e954a45563f7ec3f065cb05ce1d3a361e1e24723ee3db7f35b0e800eece5969", - "signature": "9f99df3d734265f0c2cd70dc01621223e957e1d02a72de6f76342b800e5f670d", + "version": "30c94be88d7ec1e1f31ebb922575c68c82d8d039b9797bff00a6929a30f4d309", + "signature": "05e72532e12f2bbc07adf36ebba146f641be6c24b922755dca6b0252edcaca62", "affectsGlobalScope": false }, "../lib/ui-registry.ts": { - "version": "c499c142b7b72483e2d2a194d7e13639e7e79bbffb5c08e0cabab84744c132a1", - "signature": "bb70829cbb000600c41a7fd4aa4e9d889f9df91582c366b0255a1e18f4f541c0", + "version": "6c90e56964ffeb8bac3d2b85db985106ede9a9f878162cbe4d16fb7cde9b9d76", + "signature": "185e18df11979a2f0dbab355d92bba670bd8fdfc3d7940a7a7e8100829348998", "affectsGlobalScope": false }, "../lib/indie-registry.ts": { - "version": "a121f66475fad3ddde902090b1b7aec90b990e734e45fadf5fc4ce1d065adcef", - "signature": "c53aa048707ccc85b8a6079b672292c5888befac887e7e1d7f3f93409dd157bc", + "version": "2c9ee57582bcda6dc0019dcc536459f2c82124dad8b644511c42cd5f76b37f9e", + "signature": "15c4bdfeb7156f1ac4a00cbd6dfd48fecab332f55e44b8f1f339c5c4a7b04b5a", "affectsGlobalScope": false }, "../lib/message-registry.ts": { - "version": "0f63473efc25452719d75ad17b83bd647a1ff2ea2ef4c94b4be2e7614d0e5b06", - "signature": "16f557cbb7ce530e1dfa86c6cf88d509ce3f03773039351e4431bcfb2888f75b", + "version": "0bc244e902462fa6406b177ccaf67e0d440f0fbf121bead15c9ed1ea25b9387d", + "signature": "b35f256b69027188b5eb962ba41ff9cd11c8348276c8a2706eda459b4c7e7d50", "affectsGlobalScope": false }, "../lib/linter-registry.ts": { - "version": "f16513616178a9a79979442ed87ed09135611051f8285a6ac26e89c625943d4f", - "signature": "31a65e29c1ce1ee3b286c04e53164b87a3a5b03e121301897dea38f546e48722", + "version": "72f7d0ac15e1c61c81a473fd43021cbeb8d9c7f24de61f5813a02429d76aab8e", + "signature": "e96eb71560f7147761fe5c3ef5eb0f59b3902b9130f4cd9dc961dcc4487f3b1f", "affectsGlobalScope": false }, "../lib/toggle-view.ts": { - "version": "e749fa7a7947a83a41b5f5535000792d9ceda49ee0bd494b7e8a63a8f78ea78b", - "signature": "187b11645e6fa668aa067a7153a4ca345b11b62ac0d7ba3cdf6a9f24bd505fd4", + "version": "a488c3589f2256af7e7027db6fcee5a770bead7372a72590c1df268f9faeccb2", + "signature": "1132b55abe55a673ea128e3e741033461fe1db37704f751947d5e218583a9645", "affectsGlobalScope": false }, "../lib/main.ts": { - "version": "f5f2bc02ad49580b4260db9e52e679aace0136d75937146cbcec1a3c5bd4d6b6", + "version": "c92e46b00c550abe25c0215518860d477e97e3f05eb4ab1ff6dc3437d18d995e", "signature": "86acb08fa4354d4b1fb578fac888ed537eaf02e127b7427da5b910b8b0cf3876", "affectsGlobalScope": false }, "../lib/index.ts": { - "version": "96fd3228230358ffeff0695f5801fe8e27818fd3cdc4cf462618931896c361d4", + "version": "4bd1e5351bae5bbef4132f11cc34c2a6f65dbaed2b13734603551fcd7067d2dc", "signature": "d7627c79d7c45864ffee11b9c307cab882a2d1214758401aa79882173f76a5e5", "affectsGlobalScope": false }, diff --git a/dist/ui-registry.d.ts b/dist/ui-registry.d.ts index 91417d01..877e40f3 100644 --- a/dist/ui-registry.d.ts +++ b/dist/ui-registry.d.ts @@ -1,9 +1,8 @@ import { CompositeDisposable } from 'atom'; import type { Linter, UI, MessagesPatch } from './types'; -declare class UIRegistry { +export default class UIRegistry { providers: Set; subscriptions: CompositeDisposable; - constructor(); add(ui: UI): void; delete(provider: UI): void; getProviders(): Array; @@ -12,4 +11,3 @@ declare class UIRegistry { didFinishLinting(linter: Linter, filePath?: string | null | undefined): void; dispose(): void; } -export default UIRegistry;