From 152376c848da6b18739815b3ae780737d5da531c Mon Sep 17 00:00:00 2001
From: Amin Yahyaabadi <aminyahyaabadi74@gmail.com>
Date: Mon, 4 Jan 2021 17:35:08 -0600
Subject: [PATCH] chore: add built files

---
 dist/index.d.ts            |  4 ++--
 dist/index.js              |  2 +-
 dist/index.js.map          |  2 +-
 dist/main.d.ts             | 10 +++++-----
 dist/message-registry.d.ts |  2 +-
 dist/tsconfig.tsbuildinfo  | 30 +++++++++++++++---------------
 dist/types.d.ts            | 29 ++++++++++++++++-------------
 7 files changed, 41 insertions(+), 38 deletions(-)

diff --git a/dist/index.d.ts b/dist/index.d.ts
index f10f09e3..070f4d61 100644
--- a/dist/index.d.ts
+++ b/dist/index.d.ts
@@ -1,7 +1,7 @@
 import { Disposable } from 'atom';
 import type { UI, Linter as LinterProvider, Indie } from './types';
 export declare function activate(): void;
-export declare function consumeLinter(linter: LinterProvider): Disposable;
-export declare function consumeUI(ui: UI): Disposable;
+export declare function consumeLinter(linter: LinterProvider | Array<LinterProvider>): Disposable;
+export declare function consumeUI(ui: UI | Array<UI>): Disposable;
 export declare function provideIndie(): (indie: Indie) => import("./indie-delegate").default;
 export declare function deactivate(): void;
diff --git a/dist/index.js b/dist/index.js
index e59f90bf..bfc355a6 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},U=O(Object,"create");var S=function(){this.__data__=U?U(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 k=function(e){var t=this.__data__;if(U){var i=t[e];return"__lodash_hash_undefined__"===i?void 0:i}return N.call(t,e)?t[e]:void 0},T=Object.prototype.hasOwnProperty;var x=function(e){var t=this.__data__;return U?void 0!==t[e]:T.call(t,e)};var R=function(e,t){var i=this.__data__;return this.size+=this.has(e)?0:1,i[e]=U&&void 0===t?"__lodash_hash_undefined__":t,this};function F(e){var t=-1,i=null==e?0:e.length;for(this.clear();++t<i;){var s=e[t];this.set(s[0],s[1])}}F.prototype.clear=S,F.prototype.delete=$,F.prototype.get=k,F.prototype.has=x,F.prototype.set=R;var B=F;var z=function(){this.__data__=[],this.size=0};var q=function(e,t){return e===t||e!=e&&t!=t};var V=function(e,t){for(var i=e.length;i--;)if(q(e[i][0],t))return i;return-1},G=Array.prototype.splice;var K=function(e){var t=this.__data__,i=V(t,e);return!(i<0)&&(i==t.length-1?t.pop():G.call(t,i,1),--this.size,!0)};var W=function(e){var t=this.__data__,i=V(t,e);return i<0?void 0:t[i][1]};var Y=function(e){return V(this.__data__,e)>-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<i;){var s=e[t];this.set(s[0],s[1])}}H.prototype.clear=z,H.prototype.delete=K,H.prototype.get=W,H.prototype.has=Y,H.prototype.set=X;var J=H,Q=O(r,"Map");var Z=function(){this.size=0,this.__data__={hash:new B,map:new(Q||J),string:new B}};var ee=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e};var te=function(e,t){var i=e.__data__;return ee(t)?i["string"==typeof t?"string":"hash"]:i.map};var ie=function(e){var t=te(this,e).delete(e);return this.size-=t?1:0,t};var se=function(e){return te(this,e).get(e)};var re=function(e){return te(this,e).has(e)};var ne=function(e,t){var i=te(this,e),s=i.size;return i.set(e,t),this.size+=i.size==s?0:1,this};function oe(e){var t=-1,i=null==e?0:e.length;for(this.clear();++t<i;){var s=e[t];this.set(s[0],s[1])}}oe.prototype.clear=Z,oe.prototype.delete=ie,oe.prototype.get=se,oe.prototype.has=re,oe.prototype.set=ne;var ae=oe;var de=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this};var le=function(e){return this.__data__.has(e)};function ce(e){var t=-1,i=null==e?0:e.length;for(this.__data__=new ae;++t<i;)this.add(e[t])}ce.prototype.add=ce.prototype.push=de,ce.prototype.has=le;var he=ce;var ue=function(e,t,i,s){for(var r=e.length,n=i+(s?1:-1);s?n--:++n<r;)if(t(e[n],n,e))return n;return-1};var pe=function(e){return e!=e};var ge=function(e,t,i){for(var s=i-1,r=e.length;++s<r;)if(e[s]===t)return s;return-1};var fe=function(e,t,i){return t==t?ge(e,t,i):ue(e,pe,i)};var me=function(e,t){return!!(null==e?0:e.length)&&fe(e,t,0)>-1};var be=function(e,t,i){for(var s=-1,r=null==e?0:e.length;++s<r;)if(i(t,e[s]))return!0;return!1};var ve=function(e,t){return e.has(t)},ye=O(r,"Set");var we=function(){};var _e=function(e){var t=-1,i=Array(e.size);return e.forEach((function(e){i[++t]=e})),i},Ie=ye&&1/_e(new ye([,-0]))[1]==1/0?function(e){return new ye(e)}:we;var Le=function(e,t,i){var s=-1,r=me,n=e.length,o=!0,a=[],d=a;if(i)o=!1,r=be;else if(n>=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<n;){var c=e[s],h=t?t(c):c;if(c=i||0!==c?c:0,o&&h==h){for(var u=d.length;u--;)if(d[u]===h)continue e;t&&d.push(h),a.push(c)}else r(d,h,i)||(d!==a&&d.push(h),a.push(c))}return a};var Ee=function(e){return e&&e.length?Le(e):[]};function De(e,t,i){const s=i.map(e=>"  • "+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;u<p;++u){const p=i[u],{reference:g}=p;if(!r&&p.icon&&"string"!=typeof p.icon&&(r=!0,s.push("Message.icon must be a string")),o||p.location&&"object"==typeof p.location&&"string"==typeof p.location.file&&"object"==typeof p.location.position&&p.location.position){if(!o){const t=e.Range.fromObject(p.location.position);(Number.isNaN(t.start.row)||Number.isNaN(t.start.column)||Number.isNaN(t.end.row)||Number.isNaN(t.end.column))&&(o=!0,s.push("Message.location.position should not contain NaN coordinates"))}}else o=!0,s.push("Message.location must be valid");if(d||!p.solutions||Array.isArray(p.solutions)||(d=!0,s.push("Message.solutions must be valid")),l||!g||"object"==typeof g&&"string"==typeof g.file&&"object"==typeof g.position&&g.position){if(!l&&g){const t=e.Point.fromObject(g.position);(Number.isNaN(t.row)||Number.isNaN(t.column))&&(l=!0,s.push("Message.reference.position should not contain NaN coordinates"))}}else l=!0,s.push("Message.reference must be valid");n||"string"==typeof p.excerpt||(n=!0,s.push("Message.excerpt must be a string")),a||Me.has(p.severity)||(a=!0,s.push("Message.severity must be 'error', 'warning' or 'info'")),!t&&p.url&&"string"!=typeof p.url&&(t=!0,s.push("Message.url must be a string")),!c&&p.description&&"function"!=typeof p.description&&"string"!=typeof p.description&&(c=!0,s.push("Message.description must be a function or string")),!h&&p.linterName&&"string"!=typeof p.linterName&&(h=!0,s.push("Message.linterName must be a string"))}}else s.push("Linter Result must be an Array");return!s.length||(De("Invalid Linter Result received",`These issues were encountered while processing messages from a linter named '${t}'`,s),!1)}class je{constructor(){this.providers=new Set,this.subscriptions=new e.CompositeDisposable}add(e){!this.providers.has(e)&&function(e){const t=[];return e&&"object"==typeof e?("string"!=typeof e.name&&t.push("UI.name must be a string"),"function"!=typeof e.didBeginLinting&&t.push("UI.didBeginLinting must be a function"),"function"!=typeof e.didFinishLinting&&t.push("UI.didFinishLinting must be a function"),"function"!=typeof e.render&&t.push("UI.render must be a function"),"function"!=typeof e.dispose&&t.push("UI.dispose must be a function")):t.push("UI must be an object"),!t.length||(De("Invalid UI received",`These issues were encountered while registering the UI named '${e&&e.name?e.name:"Unknown"}'`,t),!1)}(e)&&(this.subscriptions.add(e),this.providers.add(e))}delete(e){this.providers.has(e)&&(e.dispose(),this.providers.delete(e))}getProviders(){return Array.from(this.providers)}render(e){this.providers.forEach((function(t){t.render(e)}))}didBeginLinting(e,t=null){this.providers.forEach((function(i){i.didBeginLinting(e,t)}))}didFinishLinting(e,t=null){this.providers.forEach((function(i){i.didFinishLinting(e,t)}))}dispose(){this.providers.clear(),this.subscriptions.dispose()}}const Ce="__$sb_linter_activated",Ae="__$sb_linter_request_last_received";function Oe(e,t,i){return!(t&&!e.lintsOnChange)&&i.some((function(t){return e.grammarScopes.includes(t)}))}function Ue(e){return Ee(e.getCursors().reduce((e,t)=>e.concat(t.getScopeDescriptor().getScopesArray()),["*"]))}let Se;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<r;++s){const r=i[s];if(0===e.indexOf(r)){t=atom.project.getRepositories()[s];break}}if(t&&t.isPathIgnored(e))return!0}const s="win32"===process.platform?e.replace(/\\/g,"/"):e;return Se||(Se=require("minimatch")),Se(s,t)}function Ne(e){const{reference:t,location:i}=e;e.key=["$LINTER:"+e.linterName,`$LOCATION:${i.file}$${i.position.start.row}$${i.position.start.column}$${i.position.end.row}$${i.position.end.column}`,t?`$REFERENCE:${t.file}$${t.position?`${t.position.row}$${t.position.column}`:""}`:"$REFERENCE:null","$EXCERPT:"+e.excerpt,"$SEVERITY:"+e.severity,e.icon?"$ICON:"+e.icon:"$ICON:null",e.url?"$URL:"+e.url:"$URL:null","string"==typeof e.description?"$DESCRIPTION:"+e.description:"$DESCRIPTION:null"].join("")}function ke(t,i){for(let s=0,{length:r}=i;s<r;++s){const r=i[s],{reference:n}=r;if(Array.isArray(r.location.position)&&(r.location.position=e.Range.fromObject(r.location.position)),n&&Array.isArray(n.position)&&(n.position=e.Point.fromObject(n.position)),r.solutions&&r.solutions.length)for(let t,i=0,s=r.solutions.length;i<s;i++)t=r.solutions[i],Array.isArray(t.position)&&(t.position=e.Range.fromObject(t.position));r.version=2,r.linterName||(r.linterName=t),Ne(r)}}function Te(e,t){if(void 0===e||void 0===t)return null;if(!t.length)return{oldKept:[],oldRemoved:[],newAdded:e};if(!e.length)return{oldKept:[],oldRemoved:t,newAdded:[]};const i=function(e){const t=new Map;for(let i=0,{length:s}=e;i<s;++i){const s=e[i];t.set(s.key,s)}return t}(t),s=new Set,r=new Map;for(let t=0,n=e.length;t<n;t++){const n=e[t];i.has(n.key)?r.set(n.key,n):s.add(n)}const n=Array.from(i.keys()),o=Array.from(r.keys()),a=n.filter(e=>!o.includes(e)),d=new Set;for(let e=0,t=a.length;e<t;e++)d.add(i.get(a[e]));return{oldKept:Array.from(r.values()),oldRemoved:d?Array.from(d):[],newAdded:Array.from(s)}}function xe(e,t){t.length&&Array.prototype.push.apply(e,t)}class Re{constructor(t,i){this.indie=t,this.scope="project",this.version=i,this.emitter=new e.Emitter,this.messages=new Map,this.subscriptions=new e.CompositeDisposable,this.subscriptions.add(this.emitter)}get name(){return this.indie.name}getMessages(){const e=[];return this.messages.forEach(t=>{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")})),ke(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))){ke(this.name,e),this.messages.clear();for(let t=0,{length:i}=e;t<i;++t){const i=e[t],s=i.location.file;let r=this.messages.get(s);r||this.messages.set(s,r=[]),r.push(i)}this.emitter.emit("did-update",this.getMessages())}}onDidUpdate(e){return this.emitter.on("did-update",e)}onDidDestroy(e){return this.emitter.on("did-destroy",e)}dispose(){this.emitter.emit("did-destroy"),this.subscriptions.dispose(),this.messages.clear()}}class Fe{constructor(){this.emitter=new e.Emitter,this.delegates=new Set,this.subscriptions=new e.CompositeDisposable,this.subscriptions.add(this.emitter)}register(e,t){if(!function(e){const t=[];return e&&"object"==typeof e?"string"!=typeof e.name&&t.push("Indie.name must be a string"):t.push("Indie must be an object"),!t.length||(De("Invalid Indie received",`These issues were encountered while registering an Indie Linter named '${e&&e.name?e.name:"Unknown"}'`,t),!1)}(e))throw new Error("Error registering Indie Linter");const i=new Re(e,t);return this.delegates.add(i),i.onDidDestroy(()=>{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=Te(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.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=Ue(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&&(ke(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.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(),r=Ue(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.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=this.registryEditors.get(atom.workspace.getActiveTextEditor());e&&e.lint()}),this.commands.onShouldToggleActiveEditor(()=>{const e=atom.workspace.getActiveTextEditor();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(){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(){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(){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(){this.registryUI||(this.registryUI=new je,this.subscriptions.add(this.registryUI))}addUI(e){this.registryUIInit(),this.registryUI.add(e),this.registryMessagesInit();const{messages:t}=this.registryMessages;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){const i=[].concat(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){const i=[].concat(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)},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<i;){var s=e[t];this.set(s[0],s[1])}}F.prototype.clear=U,F.prototype.delete=$,F.prototype.get=T,F.prototype.has=x,F.prototype.set=R;var B=F;var z=function(){this.__data__=[],this.size=0};var q=function(e,t){return e===t||e!=e&&t!=t};var V=function(e,t){for(var i=e.length;i--;)if(q(e[i][0],t))return i;return-1},G=Array.prototype.splice;var K=function(e){var t=this.__data__,i=V(t,e);return!(i<0)&&(i==t.length-1?t.pop():G.call(t,i,1),--this.size,!0)};var W=function(e){var t=this.__data__,i=V(t,e);return i<0?void 0:t[i][1]};var Y=function(e){return V(this.__data__,e)>-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<i;){var s=e[t];this.set(s[0],s[1])}}H.prototype.clear=z,H.prototype.delete=K,H.prototype.get=W,H.prototype.has=Y,H.prototype.set=X;var J=H,Q=O(r,"Map");var Z=function(){this.size=0,this.__data__={hash:new B,map:new(Q||J),string:new B}};var ee=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e};var te=function(e,t){var i=e.__data__;return ee(t)?i["string"==typeof t?"string":"hash"]:i.map};var ie=function(e){var t=te(this,e).delete(e);return this.size-=t?1:0,t};var se=function(e){return te(this,e).get(e)};var re=function(e){return te(this,e).has(e)};var ne=function(e,t){var i=te(this,e),s=i.size;return i.set(e,t),this.size+=i.size==s?0:1,this};function oe(e){var t=-1,i=null==e?0:e.length;for(this.clear();++t<i;){var s=e[t];this.set(s[0],s[1])}}oe.prototype.clear=Z,oe.prototype.delete=ie,oe.prototype.get=se,oe.prototype.has=re,oe.prototype.set=ne;var ae=oe;var de=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this};var le=function(e){return this.__data__.has(e)};function ce(e){var t=-1,i=null==e?0:e.length;for(this.__data__=new ae;++t<i;)this.add(e[t])}ce.prototype.add=ce.prototype.push=de,ce.prototype.has=le;var he=ce;var ue=function(e,t,i,s){for(var r=e.length,n=i+(s?1:-1);s?n--:++n<r;)if(t(e[n],n,e))return n;return-1};var pe=function(e){return e!=e};var ge=function(e,t,i){for(var s=i-1,r=e.length;++s<r;)if(e[s]===t)return s;return-1};var fe=function(e,t,i){return t==t?ge(e,t,i):ue(e,pe,i)};var me=function(e,t){return!!(null==e?0:e.length)&&fe(e,t,0)>-1};var be=function(e,t,i){for(var s=-1,r=null==e?0:e.length;++s<r;)if(i(t,e[s]))return!0;return!1};var ve=function(e,t){return e.has(t)},ye=O(r,"Set");var we=function(){};var _e=function(e){var t=-1,i=Array(e.size);return e.forEach((function(e){i[++t]=e})),i},Ie=ye&&1/_e(new ye([,-0]))[1]==1/0?function(e){return new ye(e)}:we;var Le=function(e,t,i){var s=-1,r=me,n=e.length,o=!0,a=[],d=a;if(i)o=!1,r=be;else if(n>=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<n;){var c=e[s],h=t?t(c):c;if(c=i||0!==c?c:0,o&&h==h){for(var u=d.length;u--;)if(d[u]===h)continue e;t&&d.push(h),a.push(c)}else r(d,h,i)||(d!==a&&d.push(h),a.push(c))}return a};var Ee=function(e){return e&&e.length?Le(e):[]};function De(e,t,i){const s=i.map(e=>"  • "+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;u<p;++u){const p=i[u],{reference:g}=p;if(!r&&p.icon&&"string"!=typeof p.icon&&(r=!0,s.push("Message.icon must be a string")),o||p.location&&"object"==typeof p.location&&"string"==typeof p.location.file&&"object"==typeof p.location.position&&p.location.position){if(!o){const t=e.Range.fromObject(p.location.position);(Number.isNaN(t.start.row)||Number.isNaN(t.start.column)||Number.isNaN(t.end.row)||Number.isNaN(t.end.column))&&(o=!0,s.push("Message.location.position should not contain NaN coordinates"))}}else o=!0,s.push("Message.location must be valid");if(d||!p.solutions||Array.isArray(p.solutions)||(d=!0,s.push("Message.solutions must be valid")),l||!g||"object"==typeof g&&"string"==typeof g.file&&"object"==typeof g.position&&g.position){if(!l&&g&&void 0!==g.position){const t=e.Point.fromObject(g.position);(Number.isNaN(t.row)||Number.isNaN(t.column))&&(l=!0,s.push("Message.reference.position should not contain NaN coordinates"))}}else l=!0,s.push("Message.reference must be valid");n||"string"==typeof p.excerpt||(n=!0,s.push("Message.excerpt must be a string")),a||Me.has(p.severity)||(a=!0,s.push("Message.severity must be 'error', 'warning' or 'info'")),!t&&p.url&&"string"!=typeof p.url&&(t=!0,s.push("Message.url must be a string")),!c&&p.description&&"function"!=typeof p.description&&"string"!=typeof p.description&&(c=!0,s.push("Message.description must be a function or string")),!h&&p.linterName&&"string"!=typeof p.linterName&&(h=!0,s.push("Message.linterName must be a string"))}}else s.push("Linter Result must be an Array");return!s.length||(De("Invalid Linter Result received",`These issues were encountered while processing messages from a linter named '${t}'`,s),!1)}class je{constructor(){this.providers=new Set,this.subscriptions=new e.CompositeDisposable}add(e){!this.providers.has(e)&&function(e){const t=[];return e&&"object"==typeof e?("string"!=typeof e.name&&t.push("UI.name must be a string"),"function"!=typeof e.didBeginLinting&&t.push("UI.didBeginLinting must be a function"),"function"!=typeof e.didFinishLinting&&t.push("UI.didFinishLinting must be a function"),"function"!=typeof e.render&&t.push("UI.render must be a function"),"function"!=typeof e.dispose&&t.push("UI.dispose must be a function")):t.push("UI must be an object"),!t.length||(De("Invalid UI received",`These issues were encountered while registering the UI named '${e&&e.name?e.name:"Unknown"}'`,t),!1)}(e)&&(this.subscriptions.add(e),this.providers.add(e))}delete(e){this.providers.has(e)&&(e.dispose(),this.providers.delete(e))}getProviders(){return Array.from(this.providers)}render(e){this.providers.forEach((function(t){t.render(e)}))}didBeginLinting(e,t=null){this.providers.forEach((function(i){i.didBeginLinting(e,t)}))}didFinishLinting(e,t=null){this.providers.forEach((function(i){i.didFinishLinting(e,t)}))}dispose(){this.providers.clear(),this.subscriptions.dispose()}}const Ce="__$sb_linter_activated",Ae="__$sb_linter_request_last_received";function Oe(e,t,i){return!(t&&!e.lintsOnChange)&&i.some((function(t){return e.grammarScopes.includes(t)}))}function Se(e){return Ee(e.getCursors().reduce((e,t)=>e.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<r;++s){const r=i[s];if(0===e.indexOf(r)){t=atom.project.getRepositories()[s];break}}if(t&&t.isPathIgnored(e))return!0}const s="win32"===process.platform?e.replace(/\\/g,"/"):e;return Ue||(Ue=require("minimatch")),Ue(s,t)}function Ne(e){const{reference:t,location:i}=e;e.key=["$LINTER:"+e.linterName,`$LOCATION:${i.file}$${i.position.start.row}$${i.position.start.column}$${i.position.end.row}$${i.position.end.column}`,t?`$REFERENCE:${t.file}$${t.position?`${t.position.row}$${t.position.column}`:""}`:"$REFERENCE:null","$EXCERPT:"+e.excerpt,"$SEVERITY:"+e.severity,e.icon?"$ICON:"+e.icon:"$ICON:null",e.url?"$URL:"+e.url:"$URL:null","string"==typeof e.description?"$DESCRIPTION:"+e.description:"$DESCRIPTION:null"].join("")}function Te(t,i){for(let s=0,{length:r}=i;s<r;++s){const r=i[s],{reference:n}=r;if(Array.isArray(r.location.position)&&(r.location.position=e.Range.fromObject(r.location.position)),n&&Array.isArray(n.position)&&(n.position=e.Point.fromObject(n.position)),r.solutions&&r.solutions.length)for(let t,i=0,s=r.solutions.length;i<s;i++)t=r.solutions[i],Array.isArray(t.position)&&(t.position=e.Range.fromObject(t.position));r.version=2,r.linterName||(r.linterName=t),Ne(r)}}function ke(e,t){if(void 0===e||void 0===t)return null;if(!t.length)return{oldKept:[],oldRemoved:[],newAdded:e};if(!e.length)return{oldKept:[],oldRemoved:t,newAdded:[]};const i=function(e){const t=new Map;for(let i=0,{length:s}=e;i<s;++i){const s=e[i];t.set(s.key,s)}return t}(t),s=new Set,r=new Map;for(let t=0,n=e.length;t<n;t++){const n=e[t];i.has(n.key)?r.set(n.key,n):s.add(n)}const n=Array.from(i.keys()),o=Array.from(r.keys()),a=n.filter(e=>!o.includes(e)),d=new Set;for(let e=0,t=a.length;e<t;e++)d.add(i.get(a[e]));return{oldKept:Array.from(r.values()),oldRemoved:[...d],newAdded:[...s]}}function xe(e,t){t.length&&Array.prototype.push.apply(e,t)}class Re{constructor(t,i){this.indie=t,this.scope="project",this.version=i,this.emitter=new e.Emitter,this.messages=new Map,this.subscriptions=new e.CompositeDisposable,this.subscriptions.add(this.emitter)}get name(){return this.indie.name}getMessages(){const e=[];return this.messages.forEach(t=>{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<i;++t){const i=e[t],s=i.location.file;let r=this.messages.get(s);r||this.messages.set(s,r=[]),r.push(i)}this.emitter.emit("did-update",this.getMessages())}}onDidUpdate(e){return this.emitter.on("did-update",e)}onDidDestroy(e){return this.emitter.on("did-destroy",e)}dispose(){this.emitter.emit("did-destroy"),this.subscriptions.dispose(),this.messages.clear()}}class Fe{constructor(){this.emitter=new e.Emitter,this.delegates=new Set,this.subscriptions=new e.CompositeDisposable,this.subscriptions.add(this.emitter)}register(e,t){if(!function(e){const t=[];return e&&"object"==typeof e?"string"!=typeof e.name&&t.push("Indie.name must be a string"):t.push("Indie must be an object"),!t.length||(De("Invalid Indie received",`These issues were encountered while registering an Indie Linter named '${e&&e.name?e.name:"Unknown"}'`,t),!1)}(e))throw new Error("Error registering Indie Linter");const i=new Re(e,t);return this.delegates.add(i),i.onDidDestroy(()=>{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)};
 //# sourceMappingURL=index.js.map
diff --git a/dist/index.js.map b/dist/index.js.map
index 74258110..04a4741c 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<string>) {\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<Message>): 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) {\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<UI>\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<UI> {\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 } 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<string>): 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<string> {\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<Message>) {\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: Message['solutions'][0]; 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<Message>) {\n  messages.forEach(m => {\n    updateMessageKey(m)\n  })\n}\n\n// create a map from keys to messages\nexport function createKeyMessageMap(messages: Array<Message>): Map<string, Message> {\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<Message>\n  oldRemoved: Array<Message>\n  newAdded: Array<Message>\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<Message>, oldMessages: Array<Message>): 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<Message> = new Set()\n  const oldKept: Map<string, Message> = 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<Message> = new Set()\n  for (let iRemoved = 0, RemovedKeysLen = oldRemovedKeys.length; iRemoved < RemovedKeysLen; iRemoved++) {\n    oldRemoved.add(cache.get(oldRemovedKeys[iRemoved]))\n  }\n\n  return {\n    oldKept: Array.from(oldKept.values()),\n    oldRemoved: oldRemoved ? Array.from(oldRemoved) : [],\n    newAdded: Array.from(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<any>, arr2: Array<any>) {\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<string | null | undefined, Array<Message>>\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<Message> {\n    const out: Array<Message> = []\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<Record<string, any>>, messages: Array<Message> | 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<Message>): 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>) => any): Disposable {\n    return this.emitter.on('did-update', callback)\n  }\n  onDidDestroy(callback: (...args: Array<any>) => 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<IndieDelegate>\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<IndieDelegate> {\n    return Array.from(this.delegates)\n  }\n  observe(callback: (...args: Array<any>) => any): Disposable {\n    this.delegates.forEach(callback)\n    return this.emitter.on('observe', callback)\n  }\n  onDidUpdate(callback: (...args: Array<any>) => 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<Message>\n  oldMessages: Array<Message>\n}\n\nclass MessageRegistry {\n  emitter: Emitter\n  messages: Array<Message>\n  messagesMap: Set<Linter$Message$Map>\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<Message>; linter: Linter; buffer: TextBuffer }) {\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<Message>; removed: Array<Message>; messages: Array<Message> } = {\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<Linter>\n  lintOnChange: boolean\n  ignoreVCS: boolean\n  ignoreGlob: string\n  lintPreviewTabs: boolean\n  subscriptions: CompositeDisposable\n  disabledProviders: Array<string>\n  activeNotifications: Set<Notification>\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<Linter> {\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<boolean> {\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<Linter['lint']>) => 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>) => any): Disposable {\n    return this.emitter.on('did-update-messages', callback)\n  }\n  onDidBeginLinting(callback: (...args: Array<any>) => any): Disposable {\n    return this.emitter.on('did-begin-linting', callback)\n  }\n  onDidFinishLinting(callback: (...args: Array<any>) => 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>) => any): Disposable {\n    return this.emitter.on('should-lint', callback)\n  }\n  onDidDestroy(callback: (...args: Array<any>) => 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<string, any>, eventName: string, callback: (...args: Array<any>) => any): Disposable {\n    let subscription: Disposable | null = null\n    const eventSubscription = object.observe(eventName, (props: Record<string, any>) => {\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\n  subscriptions: CompositeDisposable\n  editorLinters: Map<TextEditor, EditorLinter>\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<Linter>, indieLinters: Array<IndieDelegate>, uiProviders: Array<UI>) {\n    if (!manifest) {\n      manifest = require('../package.json')\n    }\n\n    const textEditor = atom.workspace.getActiveTextEditor()\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>) => any): Disposable {\n    return this.emitter.on('should-lint', callback)\n  }\n  onShouldDebug(callback: (...args: Array<any>) => any): Disposable {\n    return this.emitter.on('should-debug', callback)\n  }\n  onShouldToggleActiveEditor(callback: (...args: Array<any>) => any): Disposable {\n    return this.emitter.on('should-toggle-active-editor', callback)\n  }\n  onShouldToggleLinter(callback: (...args: Array<any>) => 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<string>\n  subscriptions: CompositeDisposable\n  disabledProviders: Array<string>\n\n  constructor(action: ToggleAction, providers: Array<string>) {\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<Array<string>> {\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<void> {\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): Disposable {\n  const linters = [].concat(linter)\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): Disposable {\n  const uis = [].concat(ui)\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<number>\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 editorLinter = this.registryEditors.get(atom.workspace.getActiveTextEditor())\n      if (editorLinter) {\n        editorLinter.lint()\n      }\n    })\n    this.commands.onShouldToggleActiveEditor(() => {\n      const textEditor = atom.workspace.getActiveTextEditor()\n      this.registryEditorsInit()\n      const editor = this.registryEditors.get(textEditor)\n      if (editor) {\n        editor.dispose()\n      } else if (textEditor) {\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.getProviders(),\n        this.registryIndie.getProviders(),\n        this.registryUI.getProviders(),\n      )\n    })\n    this.commands.onShouldToggleLinter(action => {\n      this.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        const linter = this.registryLinters.getProviders().find(entry => entry.name === name)\n        if (linter) {\n          this.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) {\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.lint({ onChange, editor: editorLinter.getEditor() })\n      })\n      editorLinter.onDidDestroy(() => {\n        this.registryMessagesInit()\n\n        if (!this.registryEditors.hasSibling(editorLinter)) {\n          this.registryMessages.deleteByBuffer(editorLinter.getEditor().getBuffer())\n        }\n      })\n    })\n    this.registryEditors.activate()\n  }\n  registryLintersInit() {\n    if (this.registryLinters) {\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.set({ linter, messages, buffer })\n    })\n    this.registryLinters.onDidBeginLinting(({ linter, filePath }) => {\n      this.registryUIInit()\n      this.registryUI.didBeginLinting(linter, filePath)\n    })\n    this.registryLinters.onDidFinishLinting(({ linter, filePath }) => {\n      this.registryUIInit()\n      this.registryUI.didFinishLinting(linter, filePath)\n    })\n  }\n  registryIndieInit() {\n    if (this.registryIndie) {\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.deleteByLinter(indieLinter)\n      })\n    })\n    this.registryIndie.onDidUpdate(({ linter, messages }) => {\n      this.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.render(difference)\n    })\n  }\n  registryUIInit() {\n    if (this.registryUI) {\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.add(ui)\n    this.registryMessagesInit()\n    const { messages } = this.registryMessages\n    if (messages.length) {\n      ui.render({ added: messages, messages, removed: [] })\n    }\n  }\n  deleteUI(ui: UI) {\n    this.registryUIInit()\n    this.registryUI.delete(ui)\n  }\n  // Standard Linter\n  addLinter(linter: LinterProvider) {\n    this.registryLintersInit()\n    this.registryLinters.addLinter(linter)\n  }\n  deleteLinter(linter: LinterProvider) {\n    this.registryLintersInit()\n    this.registryLinters.deleteLinter(linter)\n    this.registryMessagesInit()\n    this.registryMessages.deleteByLinter(linter)\n  }\n  // Indie Linter\n  addIndie(indie: Indie) {\n    this.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<string>) {\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<Message>): 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<UI>\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<UI> {\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<string>): 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<string> {\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<Message>) {\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<Message>) {\n  messages.forEach(m => {\n    updateMessageKey(m)\n  })\n}\n\n// create a map from keys to messages\nexport function createKeyMessageMap(messages: Array<Message>): Map<string, Message> {\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<Message>\n  oldRemoved: Array<Message>\n  newAdded: Array<Message>\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<Message>, oldMessages: Array<Message>): 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<Message> = new Set()\n  const oldKept: Map<string, Message> = 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<Message> = 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<any>, arr2: Array<any>) {\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<string | null | undefined, Array<Message>>\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<Message> {\n    const out: Array<Message> = []\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<Record<string, any>>, messages: Array<Message> | 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<Message>): 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>) => any): Disposable {\n    return this.emitter.on('did-update', callback)\n  }\n  onDidDestroy(callback: (...args: Array<any>) => 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<IndieDelegate>\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<IndieDelegate> {\n    return Array.from(this.delegates)\n  }\n  observe(callback: (...args: Array<any>) => any): Disposable {\n    this.delegates.forEach(callback)\n    return this.emitter.on('observe', callback)\n  }\n  onDidUpdate(callback: (...args: Array<any>) => 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<Message>\n  oldMessages: Array<Message>\n}\n\nclass MessageRegistry {\n  emitter: Emitter\n  messages: Array<Message>\n  messagesMap: Set<Linter$Message$Map>\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<Message>; 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<Message>; removed: Array<Message>; messages: Array<Message> } = {\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<Linter>\n  lintOnChange: boolean = true\n  ignoreVCS: boolean = true\n  ignoreGlob: string = '**/*.min.{js,css}'\n  lintPreviewTabs: boolean = true\n  subscriptions: CompositeDisposable\n  disabledProviders: Array<string> = []\n  activeNotifications: Set<Notification>\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<Linter> {\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<boolean> {\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<Linter['lint']>) => 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>) => any): Disposable {\n    return this.emitter.on('did-update-messages', callback)\n  }\n  onDidBeginLinting(callback: (...args: Array<any>) => any): Disposable {\n    return this.emitter.on('did-begin-linting', callback)\n  }\n  onDidFinishLinting(callback: (...args: Array<any>) => 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>) => any): Disposable {\n    return this.emitter.on('should-lint', callback)\n  }\n  onDidDestroy(callback: (...args: Array<any>) => 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<string, any>, eventName: string, callback: (...args: Array<any>) => any): Disposable {\n    let subscription: Disposable | null = null\n    const eventSubscription = object.observe(eventName, (props: Record<string, any>) => {\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<TextEditor, EditorLinter>\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<Linter>, indieLinters: Array<IndieDelegate>, uiProviders: Array<UI>) {\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>) => any): Disposable {\n    return this.emitter.on('should-lint', callback)\n  }\n  onShouldDebug(callback: (...args: Array<any>) => any): Disposable {\n    return this.emitter.on('should-debug', callback)\n  }\n  onShouldToggleActiveEditor(callback: (...args: Array<any>) => any): Disposable {\n    return this.emitter.on('should-toggle-active-editor', callback)\n  }\n  onShouldToggleLinter(callback: (...args: Array<any>) => 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<string>\n  subscriptions: CompositeDisposable\n  disabledProviders: Array<string> = []\n\n  constructor(action: ToggleAction, providers: Array<string>) {\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<Array<string>> {\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<void> {\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<LinterProvider>): Disposable {\n  let linters: Array<LinterProvider>\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<UI>): Disposable {\n  let uis: Array<UI>\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<number>\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
diff --git a/dist/main.d.ts b/dist/main.d.ts
index 10f1a00d..12c6134d 100644
--- a/dist/main.d.ts
+++ b/dist/main.d.ts
@@ -8,11 +8,11 @@ import Commands from './commands';
 import type { UI, Linter as LinterProvider, Indie } from './types';
 declare class Linter {
     commands: Commands;
-    registryUI: UIRegistry;
-    registryIndie: IndieRegistry;
-    registryEditors: EditorsRegistry;
-    registryLinters: LinterRegistry;
-    registryMessages: MessageRegistry;
+    registryUI?: UIRegistry;
+    registryIndie?: IndieRegistry;
+    registryEditors?: EditorsRegistry;
+    registryLinters?: LinterRegistry;
+    registryMessages?: MessageRegistry;
     subscriptions: CompositeDisposable;
     idleCallbacks: Set<number>;
     constructor();
diff --git a/dist/message-registry.d.ts b/dist/message-registry.d.ts
index 474d8e74..1e2da903 100644
--- a/dist/message-registry.d.ts
+++ b/dist/message-registry.d.ts
@@ -19,7 +19,7 @@ declare class MessageRegistry {
     set({ messages, linter, buffer }: {
         messages: Array<Message>;
         linter: Linter;
-        buffer: TextBuffer;
+        buffer: TextBuffer | null;
     }): void;
     update(): void;
     onDidUpdateMessages(callback: (difference: MessagesPatch) => void): Disposable;
diff --git a/dist/tsconfig.tsbuildinfo b/dist/tsconfig.tsbuildinfo
index b6a10232..e23fd163 100644
--- a/dist/tsconfig.tsbuildinfo
+++ b/dist/tsconfig.tsbuildinfo
@@ -457,8 +457,8 @@
         "affectsGlobalScope": false
       },
       "../lib/types.ts": {
-        "version": "e137727328ae358fb3c76a8b74426445de5019e79387aceb5869ed2ea0293793",
-        "signature": "e9203bbe87de7e5fa0ec7cc26307577e350b74a9168e2dd7e7e180cba75e80ce",
+        "version": "23abf10507540647947b0adc34e1bcab4ef7a39e537b9564f9a8a8a73294552e",
+        "signature": "144b1bcc64d94f22e29e2b17120d46451ef5576f47f117fbf46b44e9670796d0",
         "affectsGlobalScope": true
       },
       "../node_modules/@types/minimatch/index.d.ts": {
@@ -467,7 +467,7 @@
         "affectsGlobalScope": false
       },
       "../lib/helpers.ts": {
-        "version": "ec4c290283b53495be3b2416205529304173cd28dfb40ce68e388b31477405c4",
+        "version": "761749240e2df65dee27474e25916a4397012dc30a206bb33af115550044f25f",
         "signature": "7d5a9285c1bc0727f253471068001e60de47536cd3def6bed5b98786a1bd2816",
         "affectsGlobalScope": false
       },
@@ -477,7 +477,7 @@
         "affectsGlobalScope": false
       },
       "../lib/validate/index.ts": {
-        "version": "accb53ffda6247af4830953c09c8644bfa501e8f3c0238e64550e1dbdb5c3e5d",
+        "version": "4d01b93dbf3b5d3a9b90665209f9495bfb3f59f6f4d8a95de4a274905e6fc0ee",
         "signature": "778fca88a531fe304adca3712b75b721e5139086ee05d6caca5052f49085bdf2",
         "affectsGlobalScope": false
       },
@@ -487,7 +487,7 @@
         "affectsGlobalScope": false
       },
       "../lib/commands.ts": {
-        "version": "591c5c94e3de192991030584ca359ec82a8e5e61eeec4884c5fb426e75ea8e6e",
+        "version": "1ad619c8c2b44795718b6b3b3f12e058cfc1abc54f8688c49348acaeea2a3b5f",
         "signature": "90a942f5509659aa3292ae768cc1526afc7ce6ed2070f428e346d1457b885461",
         "affectsGlobalScope": false
       },
@@ -502,7 +502,7 @@
         "affectsGlobalScope": false
       },
       "../lib/editor-registry.ts": {
-        "version": "88c8af7f6c8f2d4463b57a2d857fec5a0b955aefd29771ead98220112c238ff6",
+        "version": "5e954a45563f7ec3f065cb05ce1d3a361e1e24723ee3db7f35b0e800eece5969",
         "signature": "9f99df3d734265f0c2cd70dc01621223e957e1d02a72de6f76342b800e5f670d",
         "affectsGlobalScope": false
       },
@@ -517,28 +517,28 @@
         "affectsGlobalScope": false
       },
       "../lib/message-registry.ts": {
-        "version": "b39389f25cd05ebd77627b9d616fa852485e1591abd0f4b90ed8519e310d3df9",
-        "signature": "ae000efd14fdd3c941ead7c898d3db7bfa527da22e8618ae63c4d5e0bc3e9d95",
+        "version": "0f63473efc25452719d75ad17b83bd647a1ff2ea2ef4c94b4be2e7614d0e5b06",
+        "signature": "16f557cbb7ce530e1dfa86c6cf88d509ce3f03773039351e4431bcfb2888f75b",
         "affectsGlobalScope": false
       },
       "../lib/linter-registry.ts": {
-        "version": "6b2d948a8b4cfa29a7aa53b684dd5fcd2f42065f53c8a2225bf35697eb0cdcbb",
+        "version": "f16513616178a9a79979442ed87ed09135611051f8285a6ac26e89c625943d4f",
         "signature": "31a65e29c1ce1ee3b286c04e53164b87a3a5b03e121301897dea38f546e48722",
         "affectsGlobalScope": false
       },
       "../lib/toggle-view.ts": {
-        "version": "c36a66e56714c583b97312dd7f9168c5dbe32abe9d8301264c23ffc97e0b0ecd",
+        "version": "e749fa7a7947a83a41b5f5535000792d9ceda49ee0bd494b7e8a63a8f78ea78b",
         "signature": "187b11645e6fa668aa067a7153a4ca345b11b62ac0d7ba3cdf6a9f24bd505fd4",
         "affectsGlobalScope": false
       },
       "../lib/main.ts": {
-        "version": "71ccf5916884ca67d0213cd1724d4fc4d33021bdd2ddbaa3d12577a57bd5fa6b",
-        "signature": "2c96c93216a6aa4a8f6030c96bebbdfa8762f3e927ea5f21637230321d8ac59a",
+        "version": "f5f2bc02ad49580b4260db9e52e679aace0136d75937146cbcec1a3c5bd4d6b6",
+        "signature": "86acb08fa4354d4b1fb578fac888ed537eaf02e127b7427da5b910b8b0cf3876",
         "affectsGlobalScope": false
       },
       "../lib/index.ts": {
-        "version": "1013e7048e04e7807cbdf38e6dc9f36b8ba9ae0ad2425a3ec4aa08f2d5af2ddf",
-        "signature": "1d0604ab5db6da8895f3953dc66bc7ede5ffac1101e4470640763ebec443658b",
+        "version": "96fd3228230358ffeff0695f5801fe8e27818fd3cdc4cf462618931896c361d4",
+        "signature": "d7627c79d7c45864ffee11b9c307cab882a2d1214758401aa79882173f76a5e5",
         "affectsGlobalScope": false
       },
       "../node_modules/@types/estree/index.d.ts": {
@@ -577,7 +577,7 @@
       "noEmitOnError": false,
       "skipLibCheck": true,
       "strict": true,
-      "strictNullChecks": false,
+      "strictNullChecks": true,
       "noUnusedLocals": true,
       "noUnusedParameters": true,
       "noImplicitReturns": true,
diff --git a/dist/types.d.ts b/dist/types.d.ts
index b1c3a2bf..9a503c6d 100644
--- a/dist/types.d.ts
+++ b/dist/types.d.ts
@@ -1,4 +1,16 @@
-import { Range, Point, TextEditor } from 'atom';
+import { Range, Point, TextEditor, CompositeDisposable } from 'atom';
+export declare type MessageSolution = {
+    title?: string;
+    position: Range;
+    priority?: number;
+    currentText?: string;
+    replaceWith: string;
+} | {
+    title?: string;
+    priority?: number;
+    position: Range;
+    apply: () => any;
+};
 export declare type Message = {
     key: string;
     version: 2;
@@ -15,18 +27,7 @@ export declare type Message = {
     icon?: string;
     excerpt: string;
     severity: 'error' | 'warning' | 'info';
-    solutions?: Array<{
-        title?: string;
-        position: Range;
-        priority?: number;
-        currentText?: string;
-        replaceWith: string;
-    } | {
-        title?: string;
-        priority?: number;
-        position: Range;
-        apply: () => any;
-    }>;
+    solutions?: Array<MessageSolution>;
     description?: string | (() => Promise<string> | string);
 };
 export declare type LinterResult = Array<Message> | null;
@@ -52,6 +53,8 @@ export declare type MessagesPatch = {
 };
 export declare type UI = {
     name: string;
+    subscriptions: CompositeDisposable;
+    idleCallbacks: Set<number>;
     didBeginLinting(linter: Linter, filePath: string | null | undefined): void;
     didFinishLinting(linter: Linter, filePath: string | null | undefined): void;
     render(patch: MessagesPatch): void;