diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ee4252..f3406a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,20 @@ +# [3.2.0](https://github.com/atom-ide-community/atom-ide-outline/compare/v3.1.0...v3.2.0) (2021-08-16) + + +### Bug Fixes + +* add padding for call hierarchy ([4ef8c4c](https://github.com/atom-ide-community/atom-ide-outline/commit/4ef8c4c7e8917244e7084a7655ec6ad66ffae57d)) +* catch promise failures in the service ([a2fd212](https://github.com/atom-ide-community/atom-ide-outline/commit/a2fd212424431becd375730a0e207539e3d4e249)) +* proider returns disposable ([226f0a2](https://github.com/atom-ide-community/atom-ide-outline/commit/226f0a256752bf93b0a8425f5c8ab98b52cf4629)) +* use the default color for call hierarchy ([5d83626](https://github.com/atom-ide-community/atom-ide-outline/commit/5d836263aebb32270489ef269a46a532db1041bc)) +* use the same fold width for call hierarchy ([9b4ad8d](https://github.com/atom-ide-community/atom-ide-outline/commit/9b4ad8ddfbafd02d8c4d0f88e4bb7e0879baeef2)) +* use the same text style as the outline for call hierarchy ([bba136a](https://github.com/atom-ide-community/atom-ide-outline/commit/bba136ab63d9cf7b2fb5c0a819f69b9e1ba9d5d3)) + + +### Features + +* add call hierarcy ([f145155](https://github.com/atom-ide-community/atom-ide-outline/commit/f14515558a97b6f150d3b52631272decb8ec066e)) + ## [3.1.0](https://github.com/atom-ide-community/atom-ide-outline/compare/v3.0.0...v3.1.0) (2021-6-27) - feat: support revealing the cursors that are between the symbols diff --git a/dist/call-hierarchy/call-hierarchy-view.d.ts b/dist/call-hierarchy/call-hierarchy-view.d.ts new file mode 100644 index 0000000..7afa2ce --- /dev/null +++ b/dist/call-hierarchy/call-hierarchy-view.d.ts @@ -0,0 +1,18 @@ +import type { Point, TextEditor } from "atom"; +import type { ProviderRegistry } from "atom-ide-base/commons-atom/ProviderRegistry"; +import type { CallHierarchy, CallHierarchyProvider, CallHierarchyType } from "atom-ide-base"; +import statuses from "./statuses.json"; +declare type statusKey = keyof typeof statuses; +export declare class CallHierarchyView extends HTMLElement { + #private; + destroyed: boolean; + getTitle: () => string; + getIconName: () => string; + static getStatus(data: CallHierarchy | statusKey | null | undefined): statusKey | "valid"; + constructor({ providerRegistry }: { + providerRegistry: ProviderRegistry; + }); + showCallHierarchy(editor?: TextEditor, point?: Point): Promise; + destroy(): void; +} +export {}; diff --git a/dist/call-hierarchy/main.d.ts b/dist/call-hierarchy/main.d.ts new file mode 100644 index 0000000..dffbb7c --- /dev/null +++ b/dist/call-hierarchy/main.d.ts @@ -0,0 +1,5 @@ +import type { Disposable } from "atom"; +import type { CallHierarchyProvider } from "atom-ide-base"; +export declare function activate(): void; +export declare function deactivate(): void; +export declare function consumeCallHierarchyProvider(provider: CallHierarchyProvider): Disposable; diff --git a/dist/call-hierarchy/tab-handler.d.ts b/dist/call-hierarchy/tab-handler.d.ts new file mode 100644 index 0000000..e728e5e --- /dev/null +++ b/dist/call-hierarchy/tab-handler.d.ts @@ -0,0 +1,10 @@ +export declare class TabHandler { + #private; + item: T | undefined; + constructor({ createItem, }: { + createItem: () => T; + }); + toggle(): void; + show(): void; + delete(): void; +} diff --git a/dist/main.d.ts b/dist/main.d.ts index cc311b7..1d29519 100644 --- a/dist/main.d.ts +++ b/dist/main.d.ts @@ -1,4 +1,5 @@ import { TextEditor } from "atom"; +import type { Disposable } from "atom"; import type { OutlineProvider } from "atom-ide-base"; import { ProviderRegistry } from "atom-ide-base/commons-atom/ProviderRegistry"; export { statuses } from "./statuses"; @@ -6,7 +7,7 @@ export { consumeCallHierarchyProvider } from "./call-hierarchy/main"; export declare const outlineProviderRegistry: ProviderRegistry; export declare function activate(): void; export declare function deactivate(): void; -export declare function consumeOutlineProvider(provider: OutlineProvider): Promise; +export declare function consumeOutlineProvider(provider: OutlineProvider): Disposable; export declare function revealCursor(): void; export declare function toggleOutlineView(): Promise; export declare function getOutline(editor?: TextEditor | undefined): Promise; diff --git a/dist/main.js b/dist/main.js index dfe2cdb..65093de 100644 --- a/dist/main.js +++ b/dist/main.js @@ -1,2 +1,2 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t=require("atom"),e=require("zadeh"),n=require("path"),i=require("util"),o=require("fs"),r=require("assert");function s(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var a=s(t),l=s(n),c=s(i),d=s(o),u=s(r),f="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},h={};Object.defineProperty(h,"__esModule",{value:!0}),h.scrollIntoView=function(t,e){const n=m(t);t.scrollIntoView(e),v(n)};var p=h.scrollIntoViewIfNeeded=function(t,e=!0){var n,i,o;const r=m(t);null!==(n=null===(i=(o=t).scrollIntoViewIfNeeded)||void 0===i?void 0:i.call(o,e))&&void 0!==n||t.scrollIntoView(e),v(r)};function m(t){let e=t;const n=new Map;for(;null!==e;)n.set(e,e.scrollTop),e=e.parentElement;return n}function v(t){t.forEach(((t,e)=>{e.scrollTop!==t&&g(e)&&(e.scrollTop=t)}))}function g(t){const e=null==t?void 0:t.style.overflow;return"hidden"===(null!=e?e:getComputedStyle(t).overflow)}h.isOverflowHidden=g;var y={};Object.defineProperty(y,"__esModule",{value:!0});var w=y.isItemVisible=function(t){if(null==t)return!1;const e=b(t);if(void 0!==e&&!E(e))return!1;const n=atom.workspace.paneContainerForItem(t);return void 0!==n&&("function"!=typeof n.isVisible||n.isVisible())};function E(t){return!(t instanceof HTMLElement)||"none"!==t.style.display&&!t.hidden&&0!==t.offsetHeight}function b(t){if(null!=t)return"function"==typeof t.getElement?t.getElement():t.element}y.isElementVisible=E,y.getItemElement=b;var P="function"==typeof WeakSet,C=Object.keys;function T(t,e){return t===e||t!=t&&e!=e}function L(t){return t.constructor===Object||null==t.constructor}function k(t){return!!t&&"function"==typeof t.then}function x(t){return!(!t||!t.$$typeof)}function M(){var t=[];return{add:function(e){t.push(e)},has:function(e){return-1!==t.indexOf(e)}}}var O=P?function(){return new WeakSet}:M;function I(t){return function(e){var n=t||e;return function(t,e,i){void 0===i&&(i=O());var o=!!t&&"object"==typeof t,r=!!e&&"object"==typeof e;if(o||r){var s=o&&i.has(t),a=r&&i.has(e);if(s||a)return s&&a;o&&i.add(t),r&&i.add(e)}return n(t,e,i)}}}var S=Function.prototype.bind.call(Function.prototype.call,Object.prototype.hasOwnProperty);function A(t,e,n,i){var o=C(t),r=o.length;if(C(e).length!==r)return!1;if(r)for(var s=void 0;r-- >0;){if("_owner"===(s=o[r])){var a=x(t),l=x(e);if((a||l)&&a!==l)return!1}if(!S(e,s)||!n(t[s],e[s],i))return!1}return!0}var j="function"==typeof Map,R="function"==typeof Set;function D(t){var e="function"==typeof t?t(n):n;function n(t,n,i){if(t===n)return!0;if(t&&n&&"object"==typeof t&&"object"==typeof n){if(L(t)&&L(n))return A(t,n,e,i);var o=Array.isArray(t),r=Array.isArray(n);return o||r?o===r&&function(t,e,n,i){var o=t.length;if(e.length!==o)return!1;for(;o-- >0;)if(!n(t[o],e[o],i))return!1;return!0}(t,n,e,i):(o=t instanceof Date,r=n instanceof Date,o||r?o===r&&T(t.getTime(),n.getTime()):(o=t instanceof RegExp,r=n instanceof RegExp,o||r?o===r&&function(t,e){return t.source===e.source&&t.global===e.global&&t.ignoreCase===e.ignoreCase&&t.multiline===e.multiline&&t.unicode===e.unicode&&t.sticky===e.sticky&&t.lastIndex===e.lastIndex}(t,n):k(t)||k(n)?t===n:j&&(o=t instanceof Map,r=n instanceof Map,o||r)?o===r&&function(t,e,n,i){var o=t.size===e.size;return o&&t.size&&t.forEach((function(t,r){o&&(o=!1,e.forEach((function(e,s){!o&&n(r,s,i)&&(o=n(t,e,i))})))})),o}(t,n,e,i):R&&(o=t instanceof Set,r=n instanceof Set,o||r)?o===r&&function(t,e,n,i){var o=t.size===e.size;return o&&t.size&&t.forEach((function(t){o&&(o=!1,e.forEach((function(e){o||(o=n(t,e,i))})))})),o}(t,n,e,i):A(t,n,e,i)))}return t!=t&&n!=n}return n}var F=D();function B(t,e){let n=e;const i=document.createElement("span");i.classList.add("outline-icon"),void 0===n&&void 0!==t&&(n=t);let o="🞇";if("string"==typeof n&&n.length>0){let t;0===n.indexOf("type-")?(t=`${n}`,o=n.replace("type-","")):(t=`type-${n}`,o=n),i.classList.add(t)}return i.innerHTML=`${o.substring(0,3)}`,i}D((function(){return T})),D(I()),D(I(T));class H{constructor(){this.outlineList=void 0,this.pointToElementsMap=new Map,this.treeFilterer=new e.TreeFilterer,this.element=document.createElement("div"),this.element.classList.add("atom-ide-outline"),this.element.appendChild(function(){const t=document.createElement("span");t.className="outline-toolbar";const e=document.createElement("button");e.innerHTML="Reveal Cursor",e.className="btn outline-btn",e.addEventListener("click",(()=>atom.commands.dispatch(atom.views.getView(atom.workspace),"outline:reveal-cursor"))),t.appendChild(e);const n=document.createElement("button");return n.innerHTML="Show Call Hierarchy",n.className="btn outline-btn",n.addEventListener("click",(()=>atom.commands.dispatch(atom.views.getView(atom.workspace),"outline:show-call-hierarchy"))),t.appendChild(n),t}()),this.element.appendChild(this.createSearchBar()),this.outlineContent=document.createElement("div"),this.element.appendChild(this.outlineContent),this.outlineContent.classList.add("outline-content")}reset(){var t,e,n;null===(t=this.searchBarEditorDisposable)||void 0===t||t.dispose(),null===(e=this.selectCursorDisposable)||void 0===e||e.dispose(),null===(n=this.searchBarEditor)||void 0===n||n.setText("")}destroy(){this.element.remove()}getElement(){return this.element}getTitle(){return"Outline"}getIconName(){return"list-unordered"}setOutline(t,e,n){if(void 0!==this.lastEntries&&W(t,this.lastEntries))return this.pointToElementsMap.clear(),void V(this.outlineList,t,e,this.pointToElementsMap);this.lastEntries=t,this.createOutlineList(t,e,n)}createOutlineList(t,e,n){this.clearContent(),n&&this.outlineContent.appendChild(function(){const t=document.createElement("div");return t.innerHTML='Large file mode',t}()),this.updateSearchBar(t,e,n),this.outlineList=_(t,e,n,this.pointToElementsMap),this.outlineContent.appendChild(this.outlineList)}clearContent(){this.outlineContent.innerHTML="",void 0!==this.outlineList&&(this.outlineList.dataset.editorRootScope=""),this.lastEntries=void 0}updateSearchBar(t,e,n){var i,o;null===(i=this.searchBarEditorDisposable)||void 0===i||i.dispose();const r=t[0],s=void 0!==(null==r?void 0:r.representativeName)?"representativeName":"plainText";this.treeFilterer.setCandidates(t,s,"children"),this.searchBarEditorDisposable=null===(o=this.searchBarEditor)||void 0===o?void 0:o.onDidStopChanging((()=>this.filterOutlineTree(e,n)))}createSearchBar(){this.searchBarEditor=new t.TextEditor({mini:!0,placeholderText:"Filter"});const e=document.createElement("div");return e.classList.add("outline-searchbar"),e.appendChild(atom.views.getView(this.searchBarEditor)),e}renderLastOutlienList(){void 0!==this.outlineList&&(this.clearContent(),this.outlineContent.appendChild(this.outlineList))}filterOutlineTree(t,n){var i,o;if(!t.isAlive()||!w(t))return;const r=null===(i=this.searchBarEditor)||void 0===i?void 0:i.getText();if("string"!=typeof r)return void this.renderLastOutlienList();const s=r.trim();if(0===s.length)return void this.renderLastOutlienList();let a;try{a=this.treeFilterer.filter(s,{maxResults:100,usePathScoring:!1})}catch(i){const r=i;r.message=`Filtering failed for unkown reasons.\n${r.message}`,console.error(r),this.reset();const a=this.treeFilterer.candidates;return this.treeFilterer=new e.TreeFilterer(a),this.updateSearchBar(a,t,n),null===(o=this.searchBarEditor)||void 0===o||o.setText(s),void this.filterOutlineTree(t,n)}const l=(c=a).filter(((t,e)=>c.findIndex((e=>F(e,t)))===e));var c;if(0===l.length)return _e("noResult");const d=_(l,t,n,this.pointToElementsMap);this.clearContent(),this.outlineContent.appendChild(d)}presentStatus(t){this.clearContent();const e=function(t){const e=document.createElement("div");e.className="status";const{title:n="",description:i=""}=t;return e.innerHTML=`

${n}

\n ${i}`,e}(t);this.outlineContent.appendChild(e)}selectAtCursorLine(t){const e=t.getLastCursor();if(!w(this))return;if(z)return void(z=!1);if(void 0!==this.focusedElms)for(const t of this.focusedElms)t.toggleAttribute("cursorOn",!1);const n=e.getBufferRow();if(this.focusedElms=this.pointToElementsMap.get(n),void 0===this.focusedElms){const t=this.pointToElementsMap.keys();let e=0;for(const i of t){if(i>=n){const t=this.pointToElementsMap.get(e);t[t.length-1].classList.add("after-border");const n=this.pointToElementsMap.get(i);this.focusedElms=[...n,...t];break}e=i}}if(void 0!==this.focusedElms){for(const t of this.focusedElms)p(t,!0),t.toggleAttribute("cursorOn",!0);this.selectCursorDisposable=t.onDidChangeCursorPosition((()=>{var t;if(void 0!==this.focusedElms)for(const t of this.focusedElms)t.toggleAttribute("cursorOn",!1);null===(t=this.selectCursorDisposable)||void 0===t||t.dispose()}))}atom.views.getView(t).focus()}}function _(t,e,n,i){const o=document.createElement("ul");o.dataset.editorRootScope=e.getRootScopeDescriptor().getScopesArray().join(" ");const r=e.getTabLength();return"number"==typeof r&&o.style.setProperty("--editor-tab-length",Math.max(r/2,2).toString(10)),$(o,t,e,n||atom.config.get("atom-ide-outline.foldInitially"),0),V(o,t,e,i),o}function W(t,e){if(t===e)return!0;{const n=t.length;if(n!==e.length)return!1;for(let i=0;i=1}function $(t,e,n,i,o){var r,s;!function(t){atom.config.get("atom-ide-outline.sortEntries")&&t.sort(((t,e)=>{const n=t.startPosition.row-e.startPosition.row;return 0===n?t.startPosition.column-t.startPosition.column:n}))}(e);for(const a of e){const e=document.createElement("li"),l=document.createElement("span");if(l.innerText=null!==(s=null!==(r=a.representativeName)&&void 0!==r?r:a.plainText)&&void 0!==s?s:"",l.prepend(B(a.icon,a.kind)),e.appendChild(l),N(a)){const t=document.createElement("ul");t.style.setProperty("--indent-level",(o+1).toString(10)),t.addEventListener("click",(t=>t.stopPropagation()),{passive:!0}),e.appendChild(t);const r=U(t,i);l.prepend(r),$(t,a.children,n,i,o+1)}t.appendChild(e)}}function V(t,e,n,i,o){const r=t.children;for(let t=0,o=e.length;tG(o.startPosition,n)),{passive:!0}),q(i,o.startPosition.row,s),N(o)){V(s.lastElementChild,o.children,n,i)}}}function q(t,e,n){const i=t.get(e);void 0!==i?(i.push(n),t.set(e,i)):t.set(e,[n])}let z=!1;function G(t,e){const n=atom.workspace.paneForItem(e);void 0!==n&&(n.activate(),e.getCursors()[0].setBufferPosition(t,{autoscroll:!0}),z=!0)}function U(t,e){const n=document.createElement("button");return e?(t.hidden=!0,n.classList.add("outline-fold-btn","collapsed")):n.classList.add("outline-fold-btn","expanded"),n.addEventListener("click",(e=>{t.hidden=!t.hidden,t.hidden?(n.classList.remove("expanded"),n.classList.add("collapsed")):(n.classList.remove("collapsed"),n.classList.add("expanded")),e.stopPropagation()}),{passive:!0}),n}var J={};Object.defineProperty(J,"__esModule",{value:!0});var K=J.ProviderRegistry=void 0;const Q=a.default;K=J.ProviderRegistry=class{constructor(){this.providers=[]}addProvider(t){const e=this.providers.findIndex((e=>t.priority>e.priority));return-1===e?this.providers.push(t):this.providers.splice(e,0,t),new Q.Disposable((()=>{this.removeProvider(t)}))}removeProvider(t){const e=this.providers.indexOf(t);-1!==e&&this.providers.splice(e,1)}getProviderForEditor(t){const e=t.getGrammar().scopeName;return this.findProvider(e)}getAllProvidersForEditor(t){const e=t.getGrammar().scopeName;return this.findAllProviders(e)}findProvider(t){for(const e of this.findAllProviders(t))return e;return null}*findAllProviders(t){for(const e of this.providers)null!=e.grammarScopes&&-1===e.grammarScopes.indexOf(t)||(yield e)}};var X={},Y={};Object.defineProperty(Y,"__esModule",{value:!0}),Y.getCwd=void 0;const Z=l.default,tt=c.default,et=d.default,nt=tt.promisify(et.stat);Y.getCwd=async function(t=""){var e;let n;if(t)n=t;else{const t=atom.workspace.getActivePaneItem();if(n=null===(e=null==t?void 0:t.getPath)||void 0===e?void 0:e.call(t),n){const t=atom.project.relativizePath(n)[0];if(t)return t}}try{if(n){if((await nt(n)).isDirectory())return n;n=Z.dirname(n);if((await nt(n)).isDirectory())return n}}catch(t){}return n=atom.project.getPaths()[0],n};var it={},ot=f&&f.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(it,"__esModule",{value:!0}),it.isPositionInRange=it.matchRegexEndingAt=it.wordAtPositionFromBuffer=it.getWordFromCursorOrSelection=it.getWordFromMouseEvent=it.trimRange=it.wordAtPosition=void 0;const rt=a.default,st=ot(u.default);function at(t,e,n){let i;if(n instanceof RegExp)i=n;else{const o=t.getNonWordCharacters(e).replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&");let r=`^[\t ]*$|[^\\s${o}]+`;(null==n||n.includeNonWordCharacters)&&(r+=`|[${o}]+`),i=new RegExp(r,"g")}return ct(t.getBuffer(),e,i)}function lt(t,e){const n=at(t,e);return null==n||1!==n.wordMatch.length?null:n.wordMatch[0]}function ct(t,e,n){const{row:i,column:o}=e,r=t.rangeForRow(i);let s;return t.scanInRange(n,r,(t=>{const{range:n}=t;n.start.isLessThanOrEqual(e)&&n.end.isGreaterThan(e)&&(s=t),n.end.column>o&&t.stop()})),s?{wordMatch:s.match,range:s.range}:null}it.wordAtPosition=at,it.trimRange=function(t,e,n=/\S/){const i=t.getBuffer();let{start:o,end:r}=e;return i.scanInRange(n,e,(({range:t,stop:e})=>{o=t.start,e()})),i.backwardsScanInRange(n,e,(({range:t,stop:e})=>{r=t.end,e()})),new rt.Range(o,r)},it.getWordFromMouseEvent=function(t,e){const n=t.getElement().component;return st.default(n),lt(t,n.screenPositionForMouseEvent(e))},it.getWordFromCursorOrSelection=function(t){const e=t.getSelectedText();if(e&&e.length>0)return e;const n=t.getCursorScreenPosition();return lt(t,n)},it.wordAtPositionFromBuffer=ct,it.matchRegexEndingAt=function(t,e,n){const i=t.getTextInRange([[e.row,0],e]),o=n.exec(i);return null==o?null:o[0]},it.isPositionInRange=function(t,e){return Array.isArray(e)?e.some((e=>e.containsPoint(t))):e.containsPoint(t)};var dt={};Object.defineProperty(dt,"__esModule",{value:!0}),dt.notifyError=void 0,dt.notifyError=function(t){atom.notifications.addError(t.name,{stack:t.stack,detail:t.message})};var ut={};function ft(t,e){if(t.largeFileMode)return 1e5;const n=t.getLineCount();return n>=e?n:0}function ht(t,e,n=t.getLineCount()){const i=t.getBuffer();for(let t=0,o=n;te)return n}return 0}Object.defineProperty(ut,"__esModule",{value:!0}),ut.lineLengthIfLong=ut.lineCountIfLarge=ut.largeness=void 0,ut.largeness=function(t,e=atom.config.get("atom-ide-base.largeLineCount")||4e3,n=atom.config.get("atom-ide-base.longLineLength")||4e3){const i=ft(t,e);if(0!==i)return i;const o=ht(t,n);return 0!==o?o:0},ut.lineCountIfLarge=ft,ut.lineLengthIfLong=ht,function(t){var e=f&&f.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n),Object.defineProperty(t,i,{enumerable:!0,get:function(){return e[n]}})}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),n=f&&f.__exportStar||function(t,n){for(var i in t)"default"===i||Object.prototype.hasOwnProperty.call(n,i)||e(n,t,i)};Object.defineProperty(t,"__esModule",{value:!0}),n(Y,t),n(J,t),n(it,t),n(dt,t),n(ut,t)}(X);const pt={noEditor:{title:"Outline is unavailable.",description:"Open a text editor."},noProvider:{title:"Provider is unavailable",description:"Looks like a provider for this type of file is not available. Check if a relevant IDE language package is installed and has outline support, or try adding one from Atom's package registry (e.g.: atom-ide-javascript, atom-typescript, ide-python, ide-rust, ide-css, ide-json)."},noResult:{title:"No result was found.",description:"The Outline could not found the text you entered in the filter bar."}};var mt=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)},vt="object"==typeof f&&f&&f.Object===Object&&f,gt="object"==typeof self&&self&&self.Object===Object&&self,yt=vt||gt||Function("return this")(),wt=yt,Et=function(){return wt.Date.now()},bt=/\s/;var Pt=function(t){for(var e=t.length;e--&&bt.test(t.charAt(e)););return e},Ct=/^\s+/;var Tt=function(t){return t?t.slice(0,Pt(t)+1).replace(Ct,""):t},Lt=yt.Symbol,kt=Lt,xt=Object.prototype,Mt=xt.hasOwnProperty,Ot=xt.toString,It=kt?kt.toStringTag:void 0;var St=function(t){var e=Mt.call(t,It),n=t[It];try{t[It]=void 0;var i=!0}catch(t){}var o=Ot.call(t);return i&&(e?t[It]=n:delete t[It]),o},At=Object.prototype.toString;var jt=St,Rt=function(t){return At.call(t)},Dt=Lt?Lt.toStringTag:void 0;var Ft=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":Dt&&Dt in Object(t)?jt(t):Rt(t)},Bt=function(t){return null!=t&&"object"==typeof t};var Ht=Tt,_t=mt,Wt=function(t){return"symbol"==typeof t||Bt(t)&&"[object Symbol]"==Ft(t)},Nt=/^[-+]0x[0-9a-f]+$/i,$t=/^0b[01]+$/i,Vt=/^0o[0-7]+$/i,qt=parseInt;var zt=mt,Gt=Et,Ut=function(t){if("number"==typeof t)return t;if(Wt(t))return NaN;if(_t(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=_t(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=Ht(t);var n=$t.test(t);return n||Vt.test(t)?qt(t.slice(2),n?2:8):Nt.test(t)?NaN:+t},Jt=Math.max,Kt=Math.min;var Qt=function(t,e,n){var i,o,r,s,a,l,c=0,d=!1,u=!1,f=!0;if("function"!=typeof t)throw new TypeError("Expected a function");function h(e){var n=i,r=o;return i=o=void 0,c=e,s=t.apply(r,n)}function p(t){return c=t,a=setTimeout(v,e),d?h(t):s}function m(t){var n=t-l;return void 0===l||n>=e||n<0||u&&t-c>=r}function v(){var t=Gt();if(m(t))return g(t);a=setTimeout(v,function(t){var n=e-(t-l);return u?Kt(n,r-(t-c)):n}(t))}function g(t){return a=void 0,f&&i?h(t):(i=o=void 0,s)}function y(){var t=Gt(),n=m(t);if(i=arguments,o=this,l=t,n){if(void 0===a)return p(l);if(u)return clearTimeout(a),a=setTimeout(v,e),h(l)}return void 0===a&&(a=setTimeout(v,e)),s}return e=Ut(e)||0,zt(n)&&(d=!!n.leading,r=(u="maxWait"in n)?Jt(Ut(n.maxWait)||0,e):r,f="trailing"in n?!!n.trailing:f),y.cancel=function(){void 0!==a&&clearTimeout(a),c=0,i=l=o=a=void 0},y.flush=function(){return void 0===a?s:g(Gt())},y};function Xt(t,e,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!i:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(t):i?i.value:e.get(t)}function Yt(t,e,n,i,o){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!o)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!o:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?o.call(t,n):o?o.value=n:e.set(t,n),n}var Zt,te,ee,ne,ie,oe,re,se,ae,le,ce,de,ue,fe,he,pe,me,ve,ge,ye,we,Ee={noEditor:{title:"Call Hierarchy is unavailable.",description:"Open a text editor."},noProvider:{title:"Provider is unavailable.",description:"Looks like a provider for this type of file is not available. Check if a relevant IDE language package is installed and has call hierarchy support, or try adding one from Atom's package registry (e.g.: atom-ide-javascript, atom-typescript, ide-python, ide-rust, ide-css, ide-json)."},noResult:{title:"No result was found.",description:"Move the cursor over the function name."}};class be extends HTMLElement{constructor({providerRegistry:e}){super(),Zt.set(this,new t.CompositeDisposable),te.set(this,void 0),ee.set(this,void 0),ne.set(this,void 0),ie.set(this,void 0),oe.set(this,300),re.set(this,void 0),this.destroyed=!1,this.getTitle=()=>"Call Hierarchy",this.getIconName=()=>"link",se.set(this,(()=>{Yt(this,ie,"incoming"===Xt(this,ie,"f")?"outgoing":"incoming","f"),this.setAttribute("current-type",Xt(this,ie,"f")),this.showCallHierarchy()})),ae.set(this,(async t=>{const e=Xt(this,re,"f"),n=Yt(this,re,be.getStatus(t),"f");if("valid"===n){Xt(this,ne,"f").innerHTML="";const e=new Pe(t);return Xt(this,ne,"f").appendChild(e),void await e.toggleAllItem()}if(e===n)return;Xt(this,ne,"f").innerHTML="";const i=new Ce(Ee[n]);Xt(this,ne,"f").appendChild(i)})),Yt(this,ee,e,"f");const n=this.appendChild(document.createElement("div"));n.innerHTML='\n
Incoming
\n
Outgoing
\n ',n.addEventListener("click",(()=>Xt(this,se,"f").call(this))),Yt(this,ne,this.appendChild(document.createElement("div")),"f"),Yt(this,ie,"incoming","f"),this.setAttribute("current-type","incoming");const i=Qt(this.showCallHierarchy.bind(this),Xt(this,oe,"f"));Xt(this,Zt,"f").add(atom.workspace.observeActiveTextEditor((t=>{var e;null===(e=Xt(this,te,"f"))||void 0===e||e.dispose(),Yt(this,te,null==t?void 0:t.onDidChangeCursorPosition((e=>{i(t,e.newBufferPosition)})),"f"),this.showCallHierarchy(t)})))}static getStatus(t){return"string"==typeof t?t:t&&0!==t.data.length?"valid":"noResult"}async showCallHierarchy(t,e){if(this.destroyed)return;const n=null!=t?t:atom.workspace.getActiveTextEditor();if(!n)return void await Xt(this,ae,"f").call(this,"noEditor");const i=null!=e?e:n.getCursorBufferPosition(),o=Xt(this,ee,"f").getProviderForEditor(n);o?await Xt(this,ae,"f").call(this,await("incoming"===Xt(this,ie,"f")?o.getIncomingCallHierarchy(n,i):o.getOutgoingCallHierarchy(n,i))):await Xt(this,ae,"f").call(this,"noProvider")}destroy(){var t;this.innerHTML="",null===(t=Xt(this,te,"f"))||void 0===t||t.dispose(),Xt(this,Zt,"f").dispose(),this.destroyed=!0}}Zt=new WeakMap,te=new WeakMap,ee=new WeakMap,ne=new WeakMap,ie=new WeakMap,oe=new WeakMap,re=new WeakMap,se=new WeakMap,ae=new WeakMap,customElements.define("atom-ide-outline-call-hierarchy-view",be);class Pe extends HTMLElement{constructor(t){super(),le.set(this,void 0),ce.set(this,void 0),de.set(this,300),ue.set(this,(({path:t,range:{start:{row:e,column:n}},selectionRange:i})=>{const o=atom.workspace.getActiveTextEditor();(null==o?void 0:o.getPath())===t?(o.setCursorBufferPosition([e,n]),o.scrollToBufferPosition([e,n],{center:!0}),o.setSelectedBufferRange(i)):atom.workspace.open(t,{initialLine:e,initialColumn:n,searchAllPanes:!0,activatePane:!0,activateItem:!0}).then((t=>null==t?void 0:t.setSelectedBufferRange(i)))})),Yt(this,le,t,"f"),Yt(this,ce,Xt(this,le,"f").data.map(((e,n)=>t.itemAt(n))),"f"),this.append(...Xt(this,le,"f").data.map(((t,e)=>{var n,i,o;const r=document.createElement("div");r.setAttribute("title",t.path),r.innerHTML=`\n
\n
\n ${Te(t.name)}\n ${Te(t.detail?` - ${t.detail}`:"")}\n ${t.tags.map((t=>`${Te(t)}`)).join("")}\n
\n
\n `,null===(n=r.querySelector(":scope>div>div"))||void 0===n||n.insertAdjacentElement("afterbegin",B(null!==(i=t.icon)&&void 0!==i?i:void 0,void 0));let s=!1;return null===(o=r.querySelector(":scope>div"))||void 0===o||o.addEventListener("click",(t=>{t.stopPropagation(),s&&Xt(this,le,"f")?Xt(this,ue,"f").call(this,Xt(this,le,"f").data[e]):(this.toggleItemAt(e),window.setTimeout((()=>s=!1),Xt(this,de,"f")),s=!0)}),!1),Xt(this,ce,"f")[e].then((t=>{Pe.isEmpty(t)||r.classList.add("call-hierarchy-exist-child-data")})),r})))}static isEmpty(t){return!t||0===t.data.length}async toggleItemAt(t){const e=this.querySelectorAll(":scope>div")[t],n=e.querySelector(":scope>div"),i=e.querySelector("atom-ide-outline-call-hierarchy-item");if(i)"none"!==i.style.display?(i.style.display="none",null==n||n.classList.replace("icon-chevron-down","icon-chevron-right")):(i.style.display="",null==n||n.classList.replace("icon-chevron-right","icon-chevron-down"));else{const i=await Xt(this,ce,"f")[t];Pe.isEmpty(i)||(e.appendChild(new Pe(i)),null==n||n.classList.replace("icon-chevron-right","icon-chevron-down"))}}async toggleAllItem(){var t,e;const n=null!==(e=null===(t=Xt(this,le,"f"))||void 0===t?void 0:t.data.length)&&void 0!==e?e:0;await Promise.all([...Array(n).keys()].map((t=>this.toggleItemAt(t))))}}le=new WeakMap,ce=new WeakMap,de=new WeakMap,ue=new WeakMap,customElements.define("atom-ide-outline-call-hierarchy-item",Pe);class Ce extends HTMLElement{constructor({title:t,description:e}){super(),this.innerHTML=`\n

${Te(t)}

\n ${Te(e)}\n `}}function Te(t){return t.replace(/["&'<>`]/g,(t=>({"&":"&","'":"'","`":"`",'"':""","<":"<",">":">"}[t])))}customElements.define("atom-ide-outline-call-hierarchy-status-item",Ce);class Le{constructor({createItem:t}){fe.add(this),me.set(this,void 0),Yt(this,me,t,"f")}toggle(){const{state:t,targetPane:e}=Xt(this,fe,"m",we).call(this);"hidden"===t?Xt(this,fe,"m",ve).call(this,{targetPane:e}):"noItem"===t?Xt(this,fe,"m",ge).call(this,{targetPane:e}):Xt(this,fe,"m",ye).call(this,{targetPane:e})}show(){const{state:t,targetPane:e}=Xt(this,fe,"m",we).call(this);"hidden"===t?Xt(this,fe,"m",ve).call(this,{targetPane:e}):"noItem"===t&&Xt(this,fe,"m",ge).call(this,{targetPane:e})}delete(){const t=this.item&&atom.workspace.paneForItem(this.item);t&&Xt(this,fe,"m",ye).call(this,{targetPane:t})}}he=Le,me=new WeakMap,fe=new WeakSet,pe=function(){return atom.workspace.getRightDock()},ve=function({targetPane:t}){this.item&&t.activateItem(this.item);const e=atom.workspace.getPaneContainers().find((e=>e.getPanes().includes(t)));e&&"show"in e&&e.show()},ge=function({targetPane:t}){this.item=Xt(this,me,"f").call(this),t.addItem(this.item),t.activateItem(this.item),Xt(Le,he,"m",pe).call(Le).show()},ye=function({targetPane:t}){this.item&&t.destroyItem(this.item)},we=function(){const t=this.item&&atom.workspace.paneForItem(this.item);return t?t.getActiveItem()===this.item&&atom.workspace.getVisiblePanes().includes(t)?{state:"visible",targetPane:t}:{state:"hidden",targetPane:t}:{state:"noItem",targetPane:Xt(Le,he,"m",pe).call(Le).getActivePane()}};const ke=new K,xe=new t.CompositeDisposable,Me=new Le({createItem:()=>new be({providerRegistry:ke})});var Oe={initialDisplay:{title:"Initial Outline Display",description:"Show outline initially aftern atom loads",type:"boolean",default:!0},sortEntries:{title:"Sort entries based on the line number",description:"This option sorts the entries based on where they appear in the code.",type:"boolean",default:!0},foldInitially:{title:"Fold the entries initially",description:"If enabled, the outline entries are folded initially. This is enabled automatically in large file mode.",type:"boolean",default:!1}};const Ie=new t.CompositeDisposable;let Se;const Ae=new K;let je;async function Re(e){if(void 0===e)return;null==je||je.dispose(),je=new t.CompositeDisposable,await He(e);const n=X.largeness(e),i=Math.max(n/4,300),o=Qt(Be,i);je.add(e.onDidStopChanging((async()=>{await o(e)})),e.onDidDestroy((()=>{_e("noEditor")})))}function De(){const t=atom.workspace.getActiveTextEditor();void 0!==t&&void 0!==Se&&Se.selectAtCursorLine(t)}async function Fe(){void 0===Se&&(Se=new H);const t=atom.workspace.paneForItem(Se);if(t)return void await t.destroyItem(Se);const e=atom.workspace.getRightDock(),[n]=e.getPanes();n.addItem(Se),n.activateItem(Se),e.show();try{await Re(atom.workspace.getActiveTextEditor())}catch(t){X.notifyError(t)}}function Be(t=atom.workspace.getActiveTextEditor()){if(w(Se))return He(t)}async function He(t=atom.workspace.getActiveTextEditor()){var e;if(void 0===Se?Se=new H:Se.reset(),void 0===t)return _e("noEditor");const n=Ae.getProviderForEditor(t);if(!n)return _e("noProvider");const i=await n.getOutline(t);Se.setOutline(null!==(e=null==i?void 0:i.outlineTrees)&&void 0!==e?e:[],t,Boolean(X.largeness(t)))}function _e(t){null==Se||Se.presentStatus(pt[t])}exports.activate=function(){xe.add(atom.commands.add("atom-workspace","outline:toggle-call-hierarchy",(()=>Me.toggle())),atom.commands.add("atom-workspace","outline:show-call-hierarchy",(()=>Me.show()))),Ie.add(atom.commands.add("atom-workspace","outline:toggle",Fe),atom.commands.add("atom-workspace","outline:reveal-cursor",De)),Ie.add(atom.workspace.onDidChangeActiveTextEditor(Re)),atom.config.get("atom-ide-outline.initialDisplay")&&Fe().catch((t=>{X.notifyError(t)}))},exports.config=Oe,exports.consumeCallHierarchyProvider=function(t){var e;const n=ke.addProvider(t);return xe.add(n),null===(e=Me.item)||void 0===e||e.showCallHierarchy(),n},exports.consumeOutlineProvider=async function(t){Ie.add(Ae.addProvider(t)),await He()},exports.deactivate=function(){xe.dispose(),Me.delete(),null==je||je.dispose(),Ie.dispose(),null==Se||Se.destroy(),Se=void 0},exports.getOutline=He,exports.outlineProviderRegistry=Ae,exports.revealCursor=De,exports.setStatus=_e,exports.statuses=pt,exports.toggleOutlineView=Fe; +"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t=require("atom"),e=require("zadeh"),n=require("path"),i=require("util"),o=require("fs"),r=require("assert");function s(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var a=s(t),l=s(n),c=s(i),d=s(o),u=s(r),f="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},h={};Object.defineProperty(h,"__esModule",{value:!0}),h.scrollIntoView=function(t,e){const n=m(t);t.scrollIntoView(e),v(n)};var p=h.scrollIntoViewIfNeeded=function(t,e=!0){var n,i,o;const r=m(t);null!==(n=null===(i=(o=t).scrollIntoViewIfNeeded)||void 0===i?void 0:i.call(o,e))&&void 0!==n||t.scrollIntoView(e),v(r)};function m(t){let e=t;const n=new Map;for(;null!==e;)n.set(e,e.scrollTop),e=e.parentElement;return n}function v(t){t.forEach(((t,e)=>{e.scrollTop!==t&&g(e)&&(e.scrollTop=t)}))}function g(t){const e=null==t?void 0:t.style.overflow;return"hidden"===(null!=e?e:getComputedStyle(t).overflow)}h.isOverflowHidden=g;var y={};Object.defineProperty(y,"__esModule",{value:!0});var w=y.isItemVisible=function(t){if(null==t)return!1;const e=b(t);if(void 0!==e&&!E(e))return!1;const n=atom.workspace.paneContainerForItem(t);return void 0!==n&&("function"!=typeof n.isVisible||n.isVisible())};function E(t){return!(t instanceof HTMLElement)||"none"!==t.style.display&&!t.hidden&&0!==t.offsetHeight}function b(t){if(null!=t)return"function"==typeof t.getElement?t.getElement():t.element}y.isElementVisible=E,y.getItemElement=b;var P="function"==typeof WeakSet,C=Object.keys;function T(t,e){return t===e||t!=t&&e!=e}function L(t){return t.constructor===Object||null==t.constructor}function k(t){return!!t&&"function"==typeof t.then}function x(t){return!(!t||!t.$$typeof)}function M(){var t=[];return{add:function(e){t.push(e)},has:function(e){return-1!==t.indexOf(e)}}}var O=P?function(){return new WeakSet}:M;function I(t){return function(e){var n=t||e;return function(t,e,i){void 0===i&&(i=O());var o=!!t&&"object"==typeof t,r=!!e&&"object"==typeof e;if(o||r){var s=o&&i.has(t),a=r&&i.has(e);if(s||a)return s&&a;o&&i.add(t),r&&i.add(e)}return n(t,e,i)}}}var S=Function.prototype.bind.call(Function.prototype.call,Object.prototype.hasOwnProperty);function A(t,e,n,i){var o=C(t),r=o.length;if(C(e).length!==r)return!1;if(r)for(var s=void 0;r-- >0;){if("_owner"===(s=o[r])){var a=x(t),l=x(e);if((a||l)&&a!==l)return!1}if(!S(e,s)||!n(t[s],e[s],i))return!1}return!0}var j="function"==typeof Map,R="function"==typeof Set;function D(t){var e="function"==typeof t?t(n):n;function n(t,n,i){if(t===n)return!0;if(t&&n&&"object"==typeof t&&"object"==typeof n){if(L(t)&&L(n))return A(t,n,e,i);var o=Array.isArray(t),r=Array.isArray(n);return o||r?o===r&&function(t,e,n,i){var o=t.length;if(e.length!==o)return!1;for(;o-- >0;)if(!n(t[o],e[o],i))return!1;return!0}(t,n,e,i):(o=t instanceof Date,r=n instanceof Date,o||r?o===r&&T(t.getTime(),n.getTime()):(o=t instanceof RegExp,r=n instanceof RegExp,o||r?o===r&&function(t,e){return t.source===e.source&&t.global===e.global&&t.ignoreCase===e.ignoreCase&&t.multiline===e.multiline&&t.unicode===e.unicode&&t.sticky===e.sticky&&t.lastIndex===e.lastIndex}(t,n):k(t)||k(n)?t===n:j&&(o=t instanceof Map,r=n instanceof Map,o||r)?o===r&&function(t,e,n,i){var o=t.size===e.size;return o&&t.size&&t.forEach((function(t,r){o&&(o=!1,e.forEach((function(e,s){!o&&n(r,s,i)&&(o=n(t,e,i))})))})),o}(t,n,e,i):R&&(o=t instanceof Set,r=n instanceof Set,o||r)?o===r&&function(t,e,n,i){var o=t.size===e.size;return o&&t.size&&t.forEach((function(t){o&&(o=!1,e.forEach((function(e){o||(o=n(t,e,i))})))})),o}(t,n,e,i):A(t,n,e,i)))}return t!=t&&n!=n}return n}var F=D();function B(t,e){let n=e;const i=document.createElement("span");i.classList.add("outline-icon"),void 0===n&&void 0!==t&&(n=t);let o="🞇";if("string"==typeof n&&n.length>0){let t;0===n.indexOf("type-")?(t=`${n}`,o=n.replace("type-","")):(t=`type-${n}`,o=n),i.classList.add(t)}return i.innerHTML=`${o.substring(0,3)}`,i}D((function(){return T})),D(I()),D(I(T));class H{constructor(){this.outlineList=void 0,this.pointToElementsMap=new Map,this.treeFilterer=new e.TreeFilterer,this.element=document.createElement("div"),this.element.classList.add("atom-ide-outline"),this.element.appendChild(function(){const t=document.createElement("span");t.className="outline-toolbar";const e=document.createElement("button");e.innerHTML="Reveal Cursor",e.className="btn outline-btn",e.addEventListener("click",(()=>atom.commands.dispatch(atom.views.getView(atom.workspace),"outline:reveal-cursor"))),t.appendChild(e);const n=document.createElement("button");return n.innerHTML="Show Call Hierarchy",n.className="btn outline-btn",n.addEventListener("click",(()=>atom.commands.dispatch(atom.views.getView(atom.workspace),"outline:show-call-hierarchy"))),t.appendChild(n),t}()),this.element.appendChild(this.createSearchBar()),this.outlineContent=document.createElement("div"),this.element.appendChild(this.outlineContent),this.outlineContent.classList.add("outline-content")}reset(){var t,e,n;null===(t=this.searchBarEditorDisposable)||void 0===t||t.dispose(),null===(e=this.selectCursorDisposable)||void 0===e||e.dispose(),null===(n=this.searchBarEditor)||void 0===n||n.setText("")}destroy(){this.element.remove()}getElement(){return this.element}getTitle(){return"Outline"}getIconName(){return"list-unordered"}setOutline(t,e,n){if(void 0!==this.lastEntries&&W(t,this.lastEntries))return this.pointToElementsMap.clear(),void V(this.outlineList,t,e,this.pointToElementsMap);this.lastEntries=t,this.createOutlineList(t,e,n)}createOutlineList(t,e,n){this.clearContent(),n&&this.outlineContent.appendChild(function(){const t=document.createElement("div");return t.innerHTML='Large file mode',t}()),this.updateSearchBar(t,e,n),this.outlineList=_(t,e,n,this.pointToElementsMap),this.outlineContent.appendChild(this.outlineList)}clearContent(){this.outlineContent.innerHTML="",void 0!==this.outlineList&&(this.outlineList.dataset.editorRootScope=""),this.lastEntries=void 0}updateSearchBar(t,e,n){var i,o;null===(i=this.searchBarEditorDisposable)||void 0===i||i.dispose();const r=t[0],s=void 0!==(null==r?void 0:r.representativeName)?"representativeName":"plainText";this.treeFilterer.setCandidates(t,s,"children"),this.searchBarEditorDisposable=null===(o=this.searchBarEditor)||void 0===o?void 0:o.onDidStopChanging((()=>this.filterOutlineTree(e,n)))}createSearchBar(){this.searchBarEditor=new t.TextEditor({mini:!0,placeholderText:"Filter"});const e=document.createElement("div");return e.classList.add("outline-searchbar"),e.appendChild(atom.views.getView(this.searchBarEditor)),e}renderLastOutlienList(){void 0!==this.outlineList&&(this.clearContent(),this.outlineContent.appendChild(this.outlineList))}filterOutlineTree(t,n){var i,o;if(!t.isAlive()||!w(t))return;const r=null===(i=this.searchBarEditor)||void 0===i?void 0:i.getText();if("string"!=typeof r)return void this.renderLastOutlienList();const s=r.trim();if(0===s.length)return void this.renderLastOutlienList();let a;try{a=this.treeFilterer.filter(s,{maxResults:100,usePathScoring:!1})}catch(i){const r=i;r.message=`Filtering failed for unkown reasons.\n${r.message}`,console.error(r),this.reset();const a=this.treeFilterer.candidates;return this.treeFilterer=new e.TreeFilterer(a),this.updateSearchBar(a,t,n),null===(o=this.searchBarEditor)||void 0===o||o.setText(s),void this.filterOutlineTree(t,n)}const l=(c=a).filter(((t,e)=>c.findIndex((e=>F(e,t)))===e));var c;if(0===l.length)return _e("noResult");const d=_(l,t,n,this.pointToElementsMap);this.clearContent(),this.outlineContent.appendChild(d)}presentStatus(t){this.clearContent();const e=function(t){const e=document.createElement("div");e.className="status";const{title:n="",description:i=""}=t;return e.innerHTML=`

${n}

\n ${i}`,e}(t);this.outlineContent.appendChild(e)}selectAtCursorLine(t){const e=t.getLastCursor();if(!w(this))return;if(z)return void(z=!1);if(void 0!==this.focusedElms)for(const t of this.focusedElms)t.toggleAttribute("cursorOn",!1);const n=e.getBufferRow();if(this.focusedElms=this.pointToElementsMap.get(n),void 0===this.focusedElms){const t=this.pointToElementsMap.keys();let e=0;for(const i of t){if(i>=n){const t=this.pointToElementsMap.get(e);t[t.length-1].classList.add("after-border");const n=this.pointToElementsMap.get(i);this.focusedElms=[...n,...t];break}e=i}}if(void 0!==this.focusedElms){for(const t of this.focusedElms)p(t,!0),t.toggleAttribute("cursorOn",!0);this.selectCursorDisposable=t.onDidChangeCursorPosition((()=>{var t;if(void 0!==this.focusedElms)for(const t of this.focusedElms)t.toggleAttribute("cursorOn",!1);null===(t=this.selectCursorDisposable)||void 0===t||t.dispose()}))}atom.views.getView(t).focus()}}function _(t,e,n,i){const o=document.createElement("ul");o.dataset.editorRootScope=e.getRootScopeDescriptor().getScopesArray().join(" ");const r=e.getTabLength();return"number"==typeof r&&o.style.setProperty("--editor-tab-length",Math.max(r/2,2).toString(10)),$(o,t,e,n||atom.config.get("atom-ide-outline.foldInitially"),0),V(o,t,e,i),o}function W(t,e){if(t===e)return!0;{const n=t.length;if(n!==e.length)return!1;for(let i=0;i=1}function $(t,e,n,i,o){var r,s;!function(t){atom.config.get("atom-ide-outline.sortEntries")&&t.sort(((t,e)=>{const n=t.startPosition.row-e.startPosition.row;return 0===n?t.startPosition.column-t.startPosition.column:n}))}(e);for(const a of e){const e=document.createElement("li"),l=document.createElement("span");if(l.innerText=null!==(s=null!==(r=a.representativeName)&&void 0!==r?r:a.plainText)&&void 0!==s?s:"",l.prepend(B(a.icon,a.kind)),e.appendChild(l),N(a)){const t=document.createElement("ul");t.style.setProperty("--indent-level",(o+1).toString(10)),t.addEventListener("click",(t=>t.stopPropagation()),{passive:!0}),e.appendChild(t);const r=U(t,i);l.prepend(r),$(t,a.children,n,i,o+1)}t.appendChild(e)}}function V(t,e,n,i,o){const r=t.children;for(let t=0,o=e.length;tG(o.startPosition,n)),{passive:!0}),q(i,o.startPosition.row,s),N(o)){V(s.lastElementChild,o.children,n,i)}}}function q(t,e,n){const i=t.get(e);void 0!==i?(i.push(n),t.set(e,i)):t.set(e,[n])}let z=!1;function G(t,e){const n=atom.workspace.paneForItem(e);void 0!==n&&(n.activate(),e.getCursors()[0].setBufferPosition(t,{autoscroll:!0}),z=!0)}function U(t,e){const n=document.createElement("button");return e?(t.hidden=!0,n.classList.add("outline-fold-btn","collapsed")):n.classList.add("outline-fold-btn","expanded"),n.addEventListener("click",(e=>{t.hidden=!t.hidden,t.hidden?(n.classList.remove("expanded"),n.classList.add("collapsed")):(n.classList.remove("collapsed"),n.classList.add("expanded")),e.stopPropagation()}),{passive:!0}),n}var J={};Object.defineProperty(J,"__esModule",{value:!0});var K=J.ProviderRegistry=void 0;const Q=a.default;K=J.ProviderRegistry=class{constructor(){this.providers=[]}addProvider(t){const e=this.providers.findIndex((e=>t.priority>e.priority));return-1===e?this.providers.push(t):this.providers.splice(e,0,t),new Q.Disposable((()=>{this.removeProvider(t)}))}removeProvider(t){const e=this.providers.indexOf(t);-1!==e&&this.providers.splice(e,1)}getProviderForEditor(t){const e=t.getGrammar().scopeName;return this.findProvider(e)}getAllProvidersForEditor(t){const e=t.getGrammar().scopeName;return this.findAllProviders(e)}findProvider(t){for(const e of this.findAllProviders(t))return e;return null}*findAllProviders(t){for(const e of this.providers)null!=e.grammarScopes&&-1===e.grammarScopes.indexOf(t)||(yield e)}};var X={},Y={};Object.defineProperty(Y,"__esModule",{value:!0}),Y.getCwd=void 0;const Z=l.default,tt=c.default,et=d.default,nt=tt.promisify(et.stat);Y.getCwd=async function(t=""){var e;let n;if(t)n=t;else{const t=atom.workspace.getActivePaneItem();if(n=null===(e=null==t?void 0:t.getPath)||void 0===e?void 0:e.call(t),n){const t=atom.project.relativizePath(n)[0];if(t)return t}}try{if(n){if((await nt(n)).isDirectory())return n;n=Z.dirname(n);if((await nt(n)).isDirectory())return n}}catch(t){}return n=atom.project.getPaths()[0],n};var it={},ot=f&&f.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(it,"__esModule",{value:!0}),it.isPositionInRange=it.matchRegexEndingAt=it.wordAtPositionFromBuffer=it.getWordFromCursorOrSelection=it.getWordFromMouseEvent=it.trimRange=it.wordAtPosition=void 0;const rt=a.default,st=ot(u.default);function at(t,e,n){let i;if(n instanceof RegExp)i=n;else{const o=t.getNonWordCharacters(e).replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&");let r=`^[\t ]*$|[^\\s${o}]+`;(null==n||n.includeNonWordCharacters)&&(r+=`|[${o}]+`),i=new RegExp(r,"g")}return ct(t.getBuffer(),e,i)}function lt(t,e){const n=at(t,e);return null==n||1!==n.wordMatch.length?null:n.wordMatch[0]}function ct(t,e,n){const{row:i,column:o}=e,r=t.rangeForRow(i);let s;return t.scanInRange(n,r,(t=>{const{range:n}=t;n.start.isLessThanOrEqual(e)&&n.end.isGreaterThan(e)&&(s=t),n.end.column>o&&t.stop()})),s?{wordMatch:s.match,range:s.range}:null}it.wordAtPosition=at,it.trimRange=function(t,e,n=/\S/){const i=t.getBuffer();let{start:o,end:r}=e;return i.scanInRange(n,e,(({range:t,stop:e})=>{o=t.start,e()})),i.backwardsScanInRange(n,e,(({range:t,stop:e})=>{r=t.end,e()})),new rt.Range(o,r)},it.getWordFromMouseEvent=function(t,e){const n=t.getElement().component;return st.default(n),lt(t,n.screenPositionForMouseEvent(e))},it.getWordFromCursorOrSelection=function(t){const e=t.getSelectedText();if(e&&e.length>0)return e;const n=t.getCursorScreenPosition();return lt(t,n)},it.wordAtPositionFromBuffer=ct,it.matchRegexEndingAt=function(t,e,n){const i=t.getTextInRange([[e.row,0],e]),o=n.exec(i);return null==o?null:o[0]},it.isPositionInRange=function(t,e){return Array.isArray(e)?e.some((e=>e.containsPoint(t))):e.containsPoint(t)};var dt={};Object.defineProperty(dt,"__esModule",{value:!0}),dt.notifyError=void 0,dt.notifyError=function(t){atom.notifications.addError(t.name,{stack:t.stack,detail:t.message})};var ut={};function ft(t,e){if(t.largeFileMode)return 1e5;const n=t.getLineCount();return n>=e?n:0}function ht(t,e,n=t.getLineCount()){const i=t.getBuffer();for(let t=0,o=n;te)return n}return 0}Object.defineProperty(ut,"__esModule",{value:!0}),ut.lineLengthIfLong=ut.lineCountIfLarge=ut.largeness=void 0,ut.largeness=function(t,e=atom.config.get("atom-ide-base.largeLineCount")||4e3,n=atom.config.get("atom-ide-base.longLineLength")||4e3){const i=ft(t,e);if(0!==i)return i;const o=ht(t,n);return 0!==o?o:0},ut.lineCountIfLarge=ft,ut.lineLengthIfLong=ht,function(t){var e=f&&f.__createBinding||(Object.create?function(t,e,n,i){void 0===i&&(i=n),Object.defineProperty(t,i,{enumerable:!0,get:function(){return e[n]}})}:function(t,e,n,i){void 0===i&&(i=n),t[i]=e[n]}),n=f&&f.__exportStar||function(t,n){for(var i in t)"default"===i||Object.prototype.hasOwnProperty.call(n,i)||e(n,t,i)};Object.defineProperty(t,"__esModule",{value:!0}),n(Y,t),n(J,t),n(it,t),n(dt,t),n(ut,t)}(X);const pt={noEditor:{title:"Outline is unavailable.",description:"Open a text editor."},noProvider:{title:"Provider is unavailable",description:"Looks like a provider for this type of file is not available. Check if a relevant IDE language package is installed and has outline support, or try adding one from Atom's package registry (e.g.: atom-ide-javascript, atom-typescript, ide-python, ide-rust, ide-css, ide-json)."},noResult:{title:"No result was found.",description:"The Outline could not found the text you entered in the filter bar."}};var mt=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)},vt="object"==typeof f&&f&&f.Object===Object&&f,gt="object"==typeof self&&self&&self.Object===Object&&self,yt=vt||gt||Function("return this")(),wt=yt,Et=function(){return wt.Date.now()},bt=/\s/;var Pt=function(t){for(var e=t.length;e--&&bt.test(t.charAt(e)););return e},Ct=/^\s+/;var Tt=function(t){return t?t.slice(0,Pt(t)+1).replace(Ct,""):t},Lt=yt.Symbol,kt=Lt,xt=Object.prototype,Mt=xt.hasOwnProperty,Ot=xt.toString,It=kt?kt.toStringTag:void 0;var St=function(t){var e=Mt.call(t,It),n=t[It];try{t[It]=void 0;var i=!0}catch(t){}var o=Ot.call(t);return i&&(e?t[It]=n:delete t[It]),o},At=Object.prototype.toString;var jt=St,Rt=function(t){return At.call(t)},Dt=Lt?Lt.toStringTag:void 0;var Ft=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":Dt&&Dt in Object(t)?jt(t):Rt(t)},Bt=function(t){return null!=t&&"object"==typeof t};var Ht=Tt,_t=mt,Wt=function(t){return"symbol"==typeof t||Bt(t)&&"[object Symbol]"==Ft(t)},Nt=/^[-+]0x[0-9a-f]+$/i,$t=/^0b[01]+$/i,Vt=/^0o[0-7]+$/i,qt=parseInt;var zt=mt,Gt=Et,Ut=function(t){if("number"==typeof t)return t;if(Wt(t))return NaN;if(_t(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=_t(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=Ht(t);var n=$t.test(t);return n||Vt.test(t)?qt(t.slice(2),n?2:8):Nt.test(t)?NaN:+t},Jt=Math.max,Kt=Math.min;var Qt=function(t,e,n){var i,o,r,s,a,l,c=0,d=!1,u=!1,f=!0;if("function"!=typeof t)throw new TypeError("Expected a function");function h(e){var n=i,r=o;return i=o=void 0,c=e,s=t.apply(r,n)}function p(t){return c=t,a=setTimeout(v,e),d?h(t):s}function m(t){var n=t-l;return void 0===l||n>=e||n<0||u&&t-c>=r}function v(){var t=Gt();if(m(t))return g(t);a=setTimeout(v,function(t){var n=e-(t-l);return u?Kt(n,r-(t-c)):n}(t))}function g(t){return a=void 0,f&&i?h(t):(i=o=void 0,s)}function y(){var t=Gt(),n=m(t);if(i=arguments,o=this,l=t,n){if(void 0===a)return p(l);if(u)return clearTimeout(a),a=setTimeout(v,e),h(l)}return void 0===a&&(a=setTimeout(v,e)),s}return e=Ut(e)||0,zt(n)&&(d=!!n.leading,r=(u="maxWait"in n)?Jt(Ut(n.maxWait)||0,e):r,f="trailing"in n?!!n.trailing:f),y.cancel=function(){void 0!==a&&clearTimeout(a),c=0,i=l=o=a=void 0},y.flush=function(){return void 0===a?s:g(Gt())},y};function Xt(t,e,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!i:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(t):i?i.value:e.get(t)}function Yt(t,e,n,i,o){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!o)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!o:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?o.call(t,n):o?o.value=n:e.set(t,n),n}var Zt,te,ee,ne,ie,oe,re,se,ae,le,ce,de,ue,fe,he,pe,me,ve,ge,ye,we,Ee={noEditor:{title:"Call Hierarchy is unavailable.",description:"Open a text editor."},noProvider:{title:"Provider is unavailable.",description:"Looks like a provider for this type of file is not available. Check if a relevant IDE language package is installed and has call hierarchy support, or try adding one from Atom's package registry (e.g.: atom-ide-deno)."},noResult:{title:"No result was found.",description:"Move the cursor over the function name."}};class be extends HTMLElement{constructor({providerRegistry:e}){super(),Zt.set(this,new t.CompositeDisposable),te.set(this,void 0),ee.set(this,void 0),ne.set(this,void 0),ie.set(this,void 0),oe.set(this,300),re.set(this,void 0),this.destroyed=!1,this.getTitle=()=>"Call Hierarchy",this.getIconName=()=>"link",se.set(this,(()=>{Yt(this,ie,"incoming"===Xt(this,ie,"f")?"outgoing":"incoming","f"),this.setAttribute("current-type",Xt(this,ie,"f")),this.showCallHierarchy()})),ae.set(this,(async t=>{const e=Xt(this,re,"f"),n=Yt(this,re,be.getStatus(t),"f");if("valid"===n){Xt(this,ne,"f").innerHTML="";const e=new Pe(t);return Xt(this,ne,"f").appendChild(e),void await e.toggleAllItem()}if(e===n)return;Xt(this,ne,"f").innerHTML="";const i=new Ce(Ee[n]);Xt(this,ne,"f").appendChild(i)})),Yt(this,ee,e,"f");const n=this.appendChild(document.createElement("div"));n.innerHTML='\n
Incoming
\n
Outgoing
\n ',n.addEventListener("click",(()=>Xt(this,se,"f").call(this))),Yt(this,ne,this.appendChild(document.createElement("div")),"f"),Yt(this,ie,"incoming","f"),this.setAttribute("current-type","incoming");const i=Qt(this.showCallHierarchy.bind(this),Xt(this,oe,"f"));Xt(this,Zt,"f").add(atom.workspace.observeActiveTextEditor((t=>{var e;null===(e=Xt(this,te,"f"))||void 0===e||e.dispose(),Yt(this,te,null==t?void 0:t.onDidChangeCursorPosition((e=>{i(t,e.newBufferPosition)})),"f"),this.showCallHierarchy(t)})))}static getStatus(t){return"string"==typeof t?t:t&&0!==t.data.length?"valid":"noResult"}async showCallHierarchy(t,e){if(this.destroyed)return;const n=null!=t?t:atom.workspace.getActiveTextEditor();if(!n)return void await Xt(this,ae,"f").call(this,"noEditor");const i=null!=e?e:n.getCursorBufferPosition(),o=Xt(this,ee,"f").getProviderForEditor(n);o?await Xt(this,ae,"f").call(this,await("incoming"===Xt(this,ie,"f")?o.getIncomingCallHierarchy(n,i):o.getOutgoingCallHierarchy(n,i))):await Xt(this,ae,"f").call(this,"noProvider")}destroy(){var t;this.innerHTML="",null===(t=Xt(this,te,"f"))||void 0===t||t.dispose(),Xt(this,Zt,"f").dispose(),this.destroyed=!0}}Zt=new WeakMap,te=new WeakMap,ee=new WeakMap,ne=new WeakMap,ie=new WeakMap,oe=new WeakMap,re=new WeakMap,se=new WeakMap,ae=new WeakMap,customElements.define("atom-ide-outline-call-hierarchy-view",be);class Pe extends HTMLElement{constructor(t){super(),le.set(this,void 0),ce.set(this,void 0),de.set(this,300),ue.set(this,(({path:t,range:{start:{row:e,column:n}},selectionRange:i})=>{const o=atom.workspace.getActiveTextEditor();(null==o?void 0:o.getPath())===t?(o.setCursorBufferPosition([e,n]),o.scrollToBufferPosition([e,n],{center:!0}),o.setSelectedBufferRange(i)):atom.workspace.open(t,{initialLine:e,initialColumn:n,searchAllPanes:!0,activatePane:!0,activateItem:!0}).then((t=>null==t?void 0:t.setSelectedBufferRange(i)))})),Yt(this,le,t,"f"),Yt(this,ce,Xt(this,le,"f").data.map(((e,n)=>t.itemAt(n))),"f"),this.append(...Xt(this,le,"f").data.map(((t,e)=>{var n,i,o;const r=document.createElement("div");r.setAttribute("title",t.path),r.innerHTML=`\n
\n
\n ${Te(t.name)}\n ${Te(t.detail?` - ${t.detail}`:"")}\n ${t.tags.map((t=>`${Te(t)}`)).join("")}\n
\n
\n `,null===(n=r.querySelector(":scope>div>div"))||void 0===n||n.insertAdjacentElement("afterbegin",B(null!==(i=t.icon)&&void 0!==i?i:void 0,void 0));let s=!1;return null===(o=r.querySelector(":scope>div"))||void 0===o||o.addEventListener("click",(t=>{t.stopPropagation(),s&&Xt(this,le,"f")?Xt(this,ue,"f").call(this,Xt(this,le,"f").data[e]):(this.toggleItemAt(e),window.setTimeout((()=>s=!1),Xt(this,de,"f")),s=!0)}),!1),Xt(this,ce,"f")[e].then((t=>{Pe.isEmpty(t)||r.classList.add("call-hierarchy-exist-child-data")})),r})))}static isEmpty(t){return!t||0===t.data.length}async toggleItemAt(t){const e=this.querySelectorAll(":scope>div")[t],n=e.querySelector(":scope>div"),i=e.querySelector("atom-ide-outline-call-hierarchy-item");if(i)"none"!==i.style.display?(i.style.display="none",null==n||n.classList.replace("icon-chevron-down","icon-chevron-right")):(i.style.display="",null==n||n.classList.replace("icon-chevron-right","icon-chevron-down"));else{const i=await Xt(this,ce,"f")[t];Pe.isEmpty(i)||(e.appendChild(new Pe(i)),null==n||n.classList.replace("icon-chevron-right","icon-chevron-down"))}}async toggleAllItem(){var t,e;const n=null!==(e=null===(t=Xt(this,le,"f"))||void 0===t?void 0:t.data.length)&&void 0!==e?e:0;await Promise.all([...Array(n).keys()].map((t=>this.toggleItemAt(t))))}}le=new WeakMap,ce=new WeakMap,de=new WeakMap,ue=new WeakMap,customElements.define("atom-ide-outline-call-hierarchy-item",Pe);class Ce extends HTMLElement{constructor({title:t,description:e}){super(),this.innerHTML=`\n

${Te(t)}

\n ${Te(e)}\n `}}function Te(t){return t.replace(/["&'<>`]/g,(t=>({"&":"&","'":"'","`":"`",'"':""","<":"<",">":">"}[t])))}customElements.define("atom-ide-outline-call-hierarchy-status-item",Ce);class Le{constructor({createItem:t}){fe.add(this),me.set(this,void 0),Yt(this,me,t,"f")}toggle(){const{state:t,targetPane:e}=Xt(this,fe,"m",we).call(this);"hidden"===t?Xt(this,fe,"m",ve).call(this,{targetPane:e}):"noItem"===t?Xt(this,fe,"m",ge).call(this,{targetPane:e}):Xt(this,fe,"m",ye).call(this,{targetPane:e})}show(){const{state:t,targetPane:e}=Xt(this,fe,"m",we).call(this);"hidden"===t?Xt(this,fe,"m",ve).call(this,{targetPane:e}):"noItem"===t&&Xt(this,fe,"m",ge).call(this,{targetPane:e})}delete(){const t=this.item&&atom.workspace.paneForItem(this.item);t&&Xt(this,fe,"m",ye).call(this,{targetPane:t})}}he=Le,me=new WeakMap,fe=new WeakSet,pe=function(){return atom.workspace.getRightDock()},ve=function({targetPane:t}){this.item&&t.activateItem(this.item);const e=atom.workspace.getPaneContainers().find((e=>e.getPanes().includes(t)));e&&"show"in e&&e.show()},ge=function({targetPane:t}){this.item=Xt(this,me,"f").call(this),t.addItem(this.item),t.activateItem(this.item),Xt(Le,he,"m",pe).call(Le).show()},ye=function({targetPane:t}){this.item&&t.destroyItem(this.item)},we=function(){const t=this.item&&atom.workspace.paneForItem(this.item);return t?t.getActiveItem()===this.item&&atom.workspace.getVisiblePanes().includes(t)?{state:"visible",targetPane:t}:{state:"hidden",targetPane:t}:{state:"noItem",targetPane:Xt(Le,he,"m",pe).call(Le).getActivePane()}};const ke=new K,xe=new t.CompositeDisposable,Me=new Le({createItem:()=>new be({providerRegistry:ke})});var Oe={initialDisplay:{title:"Initial Outline Display",description:"Show outline initially aftern atom loads",type:"boolean",default:!0},sortEntries:{title:"Sort entries based on the line number",description:"This option sorts the entries based on where they appear in the code.",type:"boolean",default:!0},foldInitially:{title:"Fold the entries initially",description:"If enabled, the outline entries are folded initially. This is enabled automatically in large file mode.",type:"boolean",default:!1}};const Ie=new t.CompositeDisposable;let Se;const Ae=new K;let je;async function Re(e){if(void 0===e)return;null==je||je.dispose(),je=new t.CompositeDisposable,await He(e);const n=function(t){const e=X.largeness(t);return Math.max(e/4,300)}(e),i=Qt(Be,n);je.add(e.onDidStopChanging((async()=>{await i(e)})),e.onDidDestroy((()=>{_e("noEditor")})))}function De(){const t=atom.workspace.getActiveTextEditor();void 0!==t&&void 0!==Se&&Se.selectAtCursorLine(t)}async function Fe(){void 0===Se&&(Se=new H);const t=atom.workspace.paneForItem(Se);if(t)return void await t.destroyItem(Se);const e=atom.workspace.getRightDock(),[n]=e.getPanes();n.addItem(Se),n.activateItem(Se),e.show();try{await Re(atom.workspace.getActiveTextEditor())}catch(t){X.notifyError(t)}}function Be(t=atom.workspace.getActiveTextEditor()){if(w(Se))return He(t)}async function He(t=atom.workspace.getActiveTextEditor()){var e;if(void 0===Se?Se=new H:Se.reset(),void 0===t)return _e("noEditor");const n=Ae.getProviderForEditor(t);if(!n)return _e("noProvider");const i=await n.getOutline(t);Se.setOutline(null!==(e=null==i?void 0:i.outlineTrees)&&void 0!==e?e:[],t,Boolean(X.largeness(t)))}function _e(t){null==Se||Se.presentStatus(pt[t])}exports.activate=function(){xe.add(atom.commands.add("atom-workspace","outline:toggle-call-hierarchy",(()=>Me.toggle())),atom.commands.add("atom-workspace","outline:show-call-hierarchy",(()=>Me.show()))),Ie.add(atom.commands.add("atom-workspace","outline:toggle",Fe),atom.commands.add("atom-workspace","outline:reveal-cursor",De)),Ie.add(atom.workspace.onDidChangeActiveTextEditor(Re)),atom.config.get("atom-ide-outline.initialDisplay")&&Fe().catch((t=>{X.notifyError(t)}))},exports.config=Oe,exports.consumeCallHierarchyProvider=function(t){var e;const n=ke.addProvider(t);return xe.add(n),null===(e=Me.item)||void 0===e||e.showCallHierarchy(),n},exports.consumeOutlineProvider=function(t){const e=Ae.addProvider(t);return Ie.add(e),He().catch((t=>{throw t})),e},exports.deactivate=function(){xe.dispose(),Me.delete(),null==je||je.dispose(),Ie.dispose(),null==Se||Se.destroy(),Se=void 0},exports.getOutline=He,exports.outlineProviderRegistry=Ae,exports.revealCursor=De,exports.setStatus=_e,exports.statuses=pt,exports.toggleOutlineView=Fe; //# sourceMappingURL=main.js.map diff --git a/dist/main.js.map b/dist/main.js.map index 7848aa1..c7e36ee 100644 --- a/dist/main.js.map +++ b/dist/main.js.map @@ -1 +1 @@ -{"version":3,"file":"main.js","sources":["../node_modules/atom-ide-base/src-commons-ui/scrollIntoView.ts","../node_modules/atom-ide-base/src-commons-ui/items.ts","../node_modules/fast-equals/src/utils.ts","../node_modules/fast-equals/src/comparator.ts","../node_modules/fast-equals/src/index.ts","../src/utils.ts","../src/outlineView.ts","../node_modules/atom-ide-base/src-commons-atom/ProviderRegistry.ts","../node_modules/atom-ide-base/src-commons-atom/getCwd.ts","../node_modules/atom-ide-base/src-commons-atom/range.ts","../node_modules/atom-ide-base/src-commons-atom/errors.ts","../node_modules/atom-ide-base/src-commons-atom/editor-largeness.ts","../node_modules/atom-ide-base/src-commons-atom/index.ts","../src/statuses.ts","../node_modules/lodash/isObject.js","../node_modules/lodash/_root.js","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/now.js","../node_modules/lodash/_trimmedEndIndex.js","../node_modules/lodash/_baseTrim.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/isSymbol.js","../node_modules/lodash/isObjectLike.js","../node_modules/lodash/toNumber.js","../node_modules/lodash/debounce.js","../node_modules/tslib/tslib.es6.js","../src/call-hierarchy/call-hierarchy-view.ts","../src/call-hierarchy/tab-handler.ts","../src/call-hierarchy/main.ts","../src/main.ts"],"sourcesContent":["/* globals getComputedStyle */\n\n/**\n * Use these functions instead of `Element::scrollIntoView()` and `Element::scrollIntoViewIfNeeded()`!\n *\n * We've had a recurring issue in Nuclide (e.g. T20028138) where the UI would shift, leaving part of the workspace\n * element offscreen and a blank area in the window. This was caused by called to the native `scrollIntoView()` and\n * `scrollIntoViewIfNeeded()` which, according to the spec, has two potentially surprising behaviors:\n *\n * 1. It scrolls every scrollable ancestor (not just the closest), where\n * 2. \"scrollable\" is explicitly defined to include elements with `overflow: hidden`\n *\n * This is surprising because `overflow: hidden` is typically used to make elements *not scrollable*.\n *\n * Once the `overflow: hidden` element is scrolled, the user has no way to return it to its original position (as it has\n * no scrollbars).\n *\n * Note that this API doesn't support smooth scrolling. If that becomes necessary, we'll need to come up with a better fix.\n *\n * It's tempting to assume that using `scrollIntoViewIfNeeded()` would fix this issue, however, if the window is small\n * enough so that no amount of scrolling the desired scrollable element would ever reveal the element you're trying to,\n * the browser will keep scrolling ancestors.\n */\n\nexport function scrollIntoView(el: Element, alignToTop?: boolean): void {\n const scrollTops = getScrollTops(el)\n el.scrollIntoView(alignToTop)\n restoreOverflowHiddenScrollTops(scrollTops)\n}\n\nexport type ElementExtended = Element & { scrollIntoViewIfNeeded?: (shouldCenter: boolean) => void }\n\nexport function scrollIntoViewIfNeeded(el: Element, center: boolean = true): void {\n const scrollTops = getScrollTops(el)\n // eslint-disable-next-line no-unused-expressions\n ;(el as ElementExtended).scrollIntoViewIfNeeded?.(center) ?? el.scrollIntoView(center)\n restoreOverflowHiddenScrollTops(scrollTops)\n}\n\nfunction getScrollTops(el_: Element): Map {\n let el: Element | null = el_\n const scrollTops = new Map()\n while (el !== null) {\n scrollTops.set(el, el.scrollTop)\n el = el.parentElement\n }\n return scrollTops\n}\n\nfunction restoreOverflowHiddenScrollTops(scrollTops: Map): void {\n scrollTops.forEach((scrollTop, el) => {\n if (el.scrollTop !== scrollTop && isOverflowHidden(el)) {\n el.scrollTop = scrollTop\n }\n })\n}\n\nexport function isOverflowHidden(el: HTMLElement | SVGElement | Element): boolean {\n const overflowStyle = (el as HTMLElement)?.style.overflow\n const overflow = overflowStyle ?? getComputedStyle(el).overflow\n return overflow === \"hidden\"\n}\n","import type { Dock, ViewRegistry } from \"atom\"\n\n/**\n * A function to detect if an item (view) is visible in Atom. This is useful to skip code excecution or updating when\n * the item is not visible.\n *\n * @param item This is an item that is stored in {ViewRegistry}. It has the same type of the argument that you pass to\n * `atom.view.getView(item)`.\n */\nexport function isItemVisible(item: Parameters[0] | undefined | null) {\n if (item === undefined || item === null) {\n return false\n }\n // check the HTMLElement itself (important for when the dock/container is visible but the tab is not selected)\n // try getting the element\n const element = getItemElement(item)\n if (element !== undefined && !isElementVisible(element)) {\n return false\n // if it we can't detect the invisiblity using HTML we need to consider Atom's context so we continue\n }\n // etch component\n // if (item?.component?.visible === false) {\n // return false\n // }\n const paneContainer = atom.workspace.paneContainerForItem(item)\n // if no container it is not visible\n if (paneContainer === undefined) {\n return false\n } else if (typeof (paneContainer as any).isVisible === \"function\") {\n // use Dock.isVisible()\n return (paneContainer as Dock).isVisible()\n } else {\n // it is visible (when paneContainer is not a dock like TextEditor)\n return true\n }\n}\n\n/**\n * A function to detect if an HTMLElement is visible. It doesn't consider the Atom context. To detect if an item is\n * visible in Atom use {isItemVisible} instead This is useful to skip code excecution or updating when the element is\n * not visible.\n *\n * @param element\n */\nexport function isElementVisible(element: HTMLElement) {\n if (\n element instanceof HTMLElement &&\n (element.style.display === \"none\" || element.hidden || element.offsetHeight === 0)\n ) {\n return false\n }\n return true\n}\n\n/** Get the HTMLElement of an item using `.getElement()` or `.element` */\nexport function getItemElement(item: object | undefined | null) {\n if (item === undefined || item === null) {\n return undefined\n }\n return typeof (item as any).getElement === \"function\"\n ? (item as { getElement: () => HTMLElement }).getElement()\n : (item as { element: HTMLElement | undefined }).element\n}\n","const HAS_WEAKSET_SUPPORT = typeof WeakSet === 'function';\n\nconst { keys } = Object;\n\ntype Cache = {\n add: (value: any) => void;\n has: (value: any) => boolean;\n};\n\nexport type EqualityComparator = (a: any, b: any, meta?: any) => boolean;\n\n/**\n * are the values passed strictly equal or both NaN\n *\n * @param a the value to compare against\n * @param b the value to test\n * @returns are the values equal by the SameValueZero principle\n */\nexport function sameValueZeroEqual(a: any, b: any) {\n return a === b || (a !== a && b !== b);\n}\n\n/**\n * is the value a plain object\n *\n * @param value the value to test\n * @returns is the value a plain object\n */\nexport function isPlainObject(value: any) {\n return value.constructor === Object || value.constructor == null;\n}\n\n/**\n * is the value promise-like (meaning it is thenable)\n *\n * @param value the value to test\n * @returns is the value promise-like\n */\nexport function isPromiseLike(value: any) {\n return !!value && typeof value.then === 'function';\n}\n\n/**\n * is the value passed a react element\n *\n * @param value the value to test\n * @returns is the value a react element\n */\nexport function isReactElement(value: any) {\n return !!(value && value.$$typeof);\n}\n\n/**\n * in cases where WeakSet is not supported, creates a new custom\n * object that mimics the necessary API aspects for cache purposes\n *\n * @returns the new cache object\n */\nexport function getNewCacheFallback(): Cache {\n const values: any[] = [];\n\n return {\n add(value: any) {\n values.push(value);\n },\n\n has(value: any) {\n return values.indexOf(value) !== -1;\n },\n };\n}\n\n/**\n * get a new cache object to prevent circular references\n *\n * @returns the new cache object\n */\nexport const getNewCache = ((canUseWeakMap: boolean) => {\n if (canUseWeakMap) {\n return function _getNewCache(): Cache {\n return new WeakSet();\n };\n }\n\n return getNewCacheFallback;\n})(HAS_WEAKSET_SUPPORT);\n\n/**\n * create a custom isEqual handler specific to circular objects\n *\n * @param [isEqual] the isEqual comparator to use instead of isDeepEqual\n * @returns the method to create the `isEqual` function\n */\nexport function createCircularEqualCreator(isEqual?: EqualityComparator) {\n return function createCircularEqual(comparator: EqualityComparator) {\n const _comparator = isEqual || comparator;\n\n return function circularEqual(\n a: any,\n b: any,\n cache: Cache = getNewCache(),\n ) {\n const isCacheableA = !!a && typeof a === 'object';\n const isCacheableB = !!b && typeof b === 'object';\n\n if (isCacheableA || isCacheableB) {\n const hasA = isCacheableA && cache.has(a);\n const hasB = isCacheableB && cache.has(b);\n\n if (hasA || hasB) {\n return hasA && hasB;\n }\n\n if (isCacheableA) {\n cache.add(a);\n }\n\n if (isCacheableB) {\n cache.add(b);\n }\n }\n\n return _comparator(a, b, cache);\n };\n };\n}\n\n/**\n * are the arrays equal in value\n *\n * @param a the array to test\n * @param b the array to test against\n * @param isEqual the comparator to determine equality\n * @param meta the meta object to pass through\n * @returns are the arrays equal\n */\nexport function areArraysEqual(\n a: any[],\n b: any[],\n isEqual: EqualityComparator,\n meta: any,\n) {\n let index = a.length;\n\n if (b.length !== index) {\n return false;\n }\n\n while (index-- > 0) {\n if (!isEqual(a[index], b[index], meta)) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * are the maps equal in value\n *\n * @param a the map to test\n * @param b the map to test against\n * @param isEqual the comparator to determine equality\n * @param meta the meta map to pass through\n * @returns are the maps equal\n */\nexport function areMapsEqual(\n a: Map,\n b: Map,\n isEqual: EqualityComparator,\n meta: any,\n) {\n let isValueEqual = a.size === b.size;\n\n if (isValueEqual && a.size) {\n a.forEach((aValue, aKey) => {\n if (isValueEqual) {\n isValueEqual = false;\n\n b.forEach((bValue, bKey) => {\n if (!isValueEqual && isEqual(aKey, bKey, meta)) {\n isValueEqual = isEqual(aValue, bValue, meta);\n }\n });\n }\n });\n }\n\n return isValueEqual;\n}\n\ntype Dictionary = {\n [key: string]: Type;\n [index: number]: Type;\n};\n\nconst OWNER = '_owner';\n\nconst hasOwnProperty = Function.prototype.bind.call(\n Function.prototype.call,\n Object.prototype.hasOwnProperty,\n);\n\n/**\n * are the objects equal in value\n *\n * @param a the object to test\n * @param b the object to test against\n * @param isEqual the comparator to determine equality\n * @param meta the meta object to pass through\n * @returns are the objects equal\n */\nexport function areObjectsEqual(\n a: Dictionary,\n b: Dictionary,\n isEqual: EqualityComparator,\n meta: any,\n) {\n const keysA = keys(a);\n\n let index = keysA.length;\n\n if (keys(b).length !== index) {\n return false;\n }\n\n if (index) {\n let key: string;\n\n while (index-- > 0) {\n key = keysA[index];\n\n if (key === OWNER) {\n const reactElementA = isReactElement(a);\n const reactElementB = isReactElement(b);\n\n if (\n (reactElementA || reactElementB) &&\n reactElementA !== reactElementB\n ) {\n return false;\n }\n }\n\n if (!hasOwnProperty(b, key) || !isEqual(a[key], b[key], meta)) {\n return false;\n }\n }\n }\n\n return true;\n}\n\n/**\n * are the regExps equal in value\n *\n * @param a the regExp to test\n * @param b the regExp to test agains\n * @returns are the regExps equal\n */\nexport function areRegExpsEqual(a: RegExp, b: RegExp) {\n return (\n a.source === b.source &&\n a.global === b.global &&\n a.ignoreCase === b.ignoreCase &&\n a.multiline === b.multiline &&\n a.unicode === b.unicode &&\n a.sticky === b.sticky &&\n a.lastIndex === b.lastIndex\n );\n}\n\n/**\n * are the sets equal in value\n *\n * @param a the set to test\n * @param b the set to test against\n * @param isEqual the comparator to determine equality\n * @param meta the meta set to pass through\n * @returns are the sets equal\n */\nexport function areSetsEqual(\n a: Set,\n b: Set,\n isEqual: EqualityComparator,\n meta: any,\n) {\n let isValueEqual = a.size === b.size;\n\n if (isValueEqual && a.size) {\n a.forEach((aValue) => {\n if (isValueEqual) {\n isValueEqual = false;\n\n b.forEach((bValue) => {\n if (!isValueEqual) {\n isValueEqual = isEqual(aValue, bValue, meta);\n }\n });\n }\n });\n }\n\n return isValueEqual;\n}\n","import {\n EqualityComparator,\n areArraysEqual,\n areMapsEqual,\n areObjectsEqual,\n areRegExpsEqual,\n areSetsEqual,\n isPlainObject,\n isPromiseLike,\n sameValueZeroEqual,\n} from './utils';\n\nconst HAS_MAP_SUPPORT = typeof Map === 'function';\nconst HAS_SET_SUPPORT = typeof Set === 'function';\n\ntype EqualityComparatorCreator = (fn: EqualityComparator) => EqualityComparator;\n\nexport function createComparator(createIsEqual?: EqualityComparatorCreator) {\n const isEqual: EqualityComparator =\n /* eslint-disable no-use-before-define */\n typeof createIsEqual === 'function'\n ? createIsEqual(comparator)\n : comparator;\n /* eslint-enable */\n\n /**\n * compare the value of the two objects and return true if they are equivalent in values\n *\n * @param a the value to test against\n * @param b the value to test\n * @param [meta] an optional meta object that is passed through to all equality test calls\n * @returns are a and b equivalent in value\n */\n function comparator(a: any, b: any, meta?: any) {\n if (a === b) {\n return true;\n }\n\n if (a && b && typeof a === 'object' && typeof b === 'object') {\n if (isPlainObject(a) && isPlainObject(b)) {\n return areObjectsEqual(a, b, isEqual, meta);\n }\n\n let aShape = Array.isArray(a);\n let bShape = Array.isArray(b);\n\n if (aShape || bShape) {\n return aShape === bShape && areArraysEqual(a, b, isEqual, meta);\n }\n\n aShape = a instanceof Date;\n bShape = b instanceof Date;\n\n if (aShape || bShape) {\n return (\n aShape === bShape && sameValueZeroEqual(a.getTime(), b.getTime())\n );\n }\n\n aShape = a instanceof RegExp;\n bShape = b instanceof RegExp;\n\n if (aShape || bShape) {\n return aShape === bShape && areRegExpsEqual(a, b);\n }\n\n if (isPromiseLike(a) || isPromiseLike(b)) {\n return a === b;\n }\n\n if (HAS_MAP_SUPPORT) {\n aShape = a instanceof Map;\n bShape = b instanceof Map;\n\n if (aShape || bShape) {\n return aShape === bShape && areMapsEqual(a, b, isEqual, meta);\n }\n }\n\n if (HAS_SET_SUPPORT) {\n aShape = a instanceof Set;\n bShape = b instanceof Set;\n\n if (aShape || bShape) {\n return aShape === bShape && areSetsEqual(a, b, isEqual, meta);\n }\n }\n\n return areObjectsEqual(a, b, isEqual, meta);\n }\n\n return a !== a && b !== b;\n }\n\n return comparator;\n}\n","import { createComparator } from './comparator';\nimport { createCircularEqualCreator, sameValueZeroEqual } from './utils';\n\nexport { createComparator as createCustomEqual, sameValueZeroEqual };\n\nexport const deepEqual = createComparator();\nexport const shallowEqual = createComparator(() => sameValueZeroEqual);\n\nexport const circularDeepEqual = createComparator(createCircularEqualCreator());\nexport const circularShallowEqual = createComparator(\n createCircularEqualCreator(sameValueZeroEqual),\n);\n","import { deepEqual } from \"fast-equals\"\n\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nexport function unique>(array: T[]) {\n return array.filter((elm2, index) => array.findIndex((elm1) => deepEqual(elm1, elm2)) === index)\n}\n\nexport function getIcon(iconType: string | undefined, kindTypeGiven: string | undefined) {\n let kindType = kindTypeGiven\n // LSP specification: https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_documentSymbol\n // atom-languageclient mapping: https://github.com/atom/atom-languageclient/blob/485bb9d706b422456640c9070eee456ef2cf09c0/lib/adapters/outline-view-adapter.ts#L270\n\n const iconElement = document.createElement(\"span\")\n iconElement.classList.add(\"outline-icon\")\n\n // if iconType given instead\n if (kindType === undefined && iconType !== undefined) {\n kindType = iconType\n }\n\n let type: string = \"🞇\"\n if (typeof kindType === \"string\" && kindType.length > 0) {\n let kindClass: string\n // hasKind\n if (kindType.indexOf(\"type-\") === 0) {\n // supplied with type-...\n kindClass = `${kindType}`\n type = kindType.replace(\"type-\", \"\")\n } else {\n // supplied without type-\n kindClass = `type-${kindType}`\n type = kindType\n }\n iconElement.classList.add(kindClass)\n }\n\n iconElement.innerHTML = `${type.substring(0, 3)}`\n\n return iconElement\n}\n","import { TextEditor, Point, Disposable } from \"atom\"\nimport type { OutlineTree } from \"atom-ide-base\"\nimport { scrollIntoViewIfNeeded } from \"atom-ide-base/commons-ui/scrollIntoView\"\nimport { isItemVisible } from \"atom-ide-base/commons-ui/items\"\nimport { TreeFilterer, Tree } from \"zadeh\"\nimport { unique, getIcon } from \"./utils\"\nimport { setStatus } from \"./main\"\n\nexport class OutlineView {\n public element: HTMLDivElement\n\n /** Contains the content of the outline which is either the status element or the list element */\n public outlineContent: HTMLDivElement\n /** The actual outline list element */\n private outlineList: HTMLUListElement | undefined = undefined\n\n /** Cache for reveal corsur */\n private pointToElementsMap = new Map>() // TODO Point to element\n /** Cache for focused elements */\n private focusedElms: HTMLElement[] | undefined\n /** Cache of last rendered list used to avoid rerendering */\n lastEntries: OutlineTree[] | undefined\n\n private treeFilterer = new TreeFilterer<\"representativeName\" | \"plainText\", \"children\">()\n public searchBarEditor: TextEditor | undefined\n private searchBarEditorDisposable: Disposable | undefined\n private selectCursorDisposable: Disposable | undefined\n\n constructor() {\n this.element = document.createElement(\"div\")\n this.element.classList.add(\"atom-ide-outline\")\n\n this.element.appendChild(makeOutlineToolbar())\n this.element.appendChild(this.createSearchBar())\n\n this.outlineContent = document.createElement(\"div\")\n this.element.appendChild(this.outlineContent)\n\n this.outlineContent.classList.add(\"outline-content\")\n }\n\n reset() {\n this.searchBarEditorDisposable?.dispose()\n this.selectCursorDisposable?.dispose()\n this.searchBarEditor?.setText(\"\")\n }\n\n destroy() {\n this.element.remove()\n }\n\n getElement() {\n return this.element\n }\n\n // needed for Atom\n /* eslint-disable class-methods-use-this */\n getTitle() {\n return \"Outline\"\n }\n\n getIconName() {\n return \"list-unordered\"\n }\n /* eslint-enable class-methods-use-this */\n\n /**\n * The main function of {OutlineView} which renders the content in the outline or only update the event listeners if\n * the outline tree hasn't changed\n */\n setOutline(outlineTree: OutlineTree[], editor: TextEditor, isLarge: boolean) {\n // skip rendering if it is the same\n // TIME 0.2-1.2ms // the check itself takes ~0.2-0.5ms, so it is better than rerendering\n if (this.lastEntries !== undefined && hasEqualContent(outlineTree, this.lastEntries)) {\n this.pointToElementsMap.clear() // empty revealCorsur cache\n addEntriesOnClick(\n this.outlineList! /* because this.lastEntries is not undefined */,\n outlineTree,\n editor,\n this.pointToElementsMap,\n 0\n )\n return\n } else {\n this.lastEntries = outlineTree\n }\n\n this.createOutlineList(outlineTree, editor, isLarge)\n }\n\n /** The function to render the content in the outline */\n createOutlineList(outlineTree: OutlineTree[], editor: TextEditor, isLarge: boolean) {\n this.clearContent()\n\n if (isLarge) {\n this.outlineContent.appendChild(createLargeFileElement())\n }\n this.updateSearchBar(outlineTree, editor, isLarge)\n\n this.outlineList = createOutlineList(outlineTree, editor, isLarge, this.pointToElementsMap)\n this.outlineContent.appendChild(this.outlineList)\n }\n\n clearContent() {\n this.outlineContent.innerHTML = \"\"\n if (this.outlineList !== undefined) {\n this.outlineList.dataset.editorRootScope = \"\"\n }\n this.lastEntries = undefined\n }\n\n updateSearchBar(outlineTree: OutlineTree[], editor: TextEditor, isLarge: boolean) {\n this.searchBarEditorDisposable?.dispose()\n\n // detect if representativeName exists on an entry of the tree, if it doesn't, then we use plainText\n const firstOutlineTree = outlineTree[0]\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const dataKey = firstOutlineTree?.representativeName !== undefined ? \"representativeName\" : \"plainText\"\n\n // @ts-ignore we check if representitiveName is undefined, and if it is, we will use plainText instead\n this.treeFilterer.setCandidates(outlineTree, dataKey, \"children\")\n\n this.searchBarEditorDisposable = this.searchBarEditor?.onDidStopChanging(() =>\n this.filterOutlineTree(editor, isLarge)\n )\n }\n\n createSearchBar() {\n this.searchBarEditor = new TextEditor({ mini: true, placeholderText: \"Filter\" })\n\n const searchBar = document.createElement(\"div\")\n searchBar.classList.add(\"outline-searchbar\")\n\n searchBar.appendChild(atom.views.getView(this.searchBarEditor))\n\n return searchBar\n }\n\n renderLastOutlienList() {\n if (this.outlineList !== undefined) {\n this.clearContent()\n this.outlineContent.appendChild(this.outlineList)\n }\n }\n\n filterOutlineTree(editor: TextEditor, isLarge: boolean) {\n // @ts-ignore\n if (!(editor.isAlive() as boolean) || !isItemVisible(editor)) {\n return\n }\n\n const text = this.searchBarEditor?.getText()\n if (typeof text !== \"string\") {\n this.renderLastOutlienList()\n return\n }\n const query = text.trim()\n if (query.length === 0) {\n this.renderLastOutlienList()\n return\n }\n let filterResults: Tree<\"representativeName\" | \"plainText\", \"children\">[]\n try {\n filterResults = this.treeFilterer.filter(query, { maxResults: 100, usePathScoring: false })\n } catch (err) {\n const error = err as Error\n error.message = `Filtering failed for unkown reasons.\\n${error.message}`\n console.error(error)\n this.reset()\n // Retry:\n // @ts-ignore internal api\n const candidates = this.treeFilterer.candidates as Tree<\"representativeName\" | \"plainText\", \"children\">[]\n this.treeFilterer = new TreeFilterer(candidates)\n this.updateSearchBar(candidates as unknown as OutlineTree[], editor, isLarge)\n this.searchBarEditor?.setText(query)\n this.filterOutlineTree(editor, isLarge)\n return\n }\n\n // TODO why returns duplicates? ~0-0.2s\n const filteredTree = unique(filterResults)\n if (filteredTree.length === 0) {\n return setStatus(\"noResult\")\n }\n const filteredOutlineList = createOutlineList(\n filteredTree as unknown as OutlineTree[],\n editor,\n isLarge,\n this.pointToElementsMap\n )\n this.clearContent()\n this.outlineContent.appendChild(filteredOutlineList)\n }\n\n presentStatus(status: { title: string; description: string }) {\n this.clearContent()\n\n const statusElement = generateStatusElement(status)\n\n this.outlineContent.appendChild(statusElement)\n }\n\n // callback for scrolling and highlighting the element that the cursor is on\n selectAtCursorLine(editor: TextEditor) {\n const cursor = editor.getLastCursor()\n\n // skip if not visible\n if (!isItemVisible(this)) {\n return\n }\n\n if (clicked) {\n // HACK do not scroll when the cursor has moved to a click on the outline entry\n clicked = false\n return\n }\n\n // TIME: ~0.2-0.3ms\n // TODO use range of start and end instead of just the line number\n\n // remove old cursorOn attribue\n if (this.focusedElms !== undefined) {\n for (const elm of this.focusedElms) {\n elm.toggleAttribute(\"cursorOn\", false)\n }\n }\n\n // add new cursorOn attribue\n const cursorPoint = cursor.getBufferRow()\n this.focusedElms = this.pointToElementsMap.get(cursorPoint)\n\n // search in between the points\n if (this.focusedElms === undefined) {\n const points = this.pointToElementsMap.keys()\n let previousPoint: number = 0\n for (const point of points) {\n // find the first point which has a larger point\n if (point >= cursorPoint) {\n const previousElms = this.pointToElementsMap.get(previousPoint)!\n previousElms[previousElms.length - 1].classList.add(\"after-border\")\n const currentElms = this.pointToElementsMap.get(point)!\n this.focusedElms = [...currentElms, ...previousElms] // in reverse so the previous elms are scrolled into in the end\n break\n } else {\n // update previous point for the next iteration\n previousPoint = point\n }\n }\n }\n\n // add cursorOn and scrollInto\n if (this.focusedElms !== undefined) {\n for (const elm of this.focusedElms) {\n scrollIntoViewIfNeeded(elm, true)\n elm.toggleAttribute(\"cursorOn\", true)\n }\n // remove focus once cursor moved\n this.selectCursorDisposable = editor.onDidChangeCursorPosition(() => {\n if (this.focusedElms !== undefined) {\n for (const elm of this.focusedElms) {\n elm.toggleAttribute(\"cursorOn\", false)\n }\n }\n this.selectCursorDisposable?.dispose()\n })\n }\n // focus on the editor after finding\n atom.views.getView(editor).focus()\n }\n}\n\n/** Create the main outline list */\nfunction createOutlineList(\n outlineTree: OutlineTree[],\n editor: TextEditor,\n isLarge: boolean,\n pointToElementsMap: Map>\n) {\n const outlineList = document.createElement(\"ul\")\n outlineList.dataset.editorRootScope = editor.getRootScopeDescriptor().getScopesArray().join(\" \")\n\n const tabLength = editor.getTabLength()\n if (typeof tabLength === \"number\") {\n outlineList.style.setProperty(\"--editor-tab-length\", Math.max(tabLength / 2, 2).toString(10))\n }\n addOutlineEntries(\n outlineList,\n outlineTree,\n editor,\n /* foldInItially */ isLarge || (atom.config.get(\"atom-ide-outline.foldInitially\") as boolean),\n 0\n )\n // TIME 0.2-0.5m\n addEntriesOnClick(outlineList, outlineTree, editor, pointToElementsMap, 0)\n return outlineList\n}\n\n/** Compares the content of the two given {OutlineTree[]} It only compares the content that affects rendering */\nfunction hasEqualContent(ot1: OutlineTree[], ot2: OutlineTree[]) {\n // simple compare\n if (ot1 === ot2) {\n return true\n } else {\n // compare length\n const ot1Len = ot1.length\n const ot2Len = ot2.length\n if (ot1Len !== ot2Len) {\n return false\n }\n // compare the content\n for (let iEntry = 0; iEntry < ot1Len; iEntry++) {\n const e1 = ot1[iEntry]\n const e2 = ot2[iEntry]\n if (\n e1.representativeName !== e2.representativeName ||\n e1.plainText !== e2.plainText ||\n e1.kind !== e2.kind ||\n e1.icon !== e2.icon ||\n !hasEqualContent(e1.children, e2.children)\n ) {\n return false\n }\n }\n }\n return true\n}\n\nfunction makeOutlineToolbar() {\n const toolbar = document.createElement(\"span\")\n toolbar.className = \"outline-toolbar\"\n\n const revealCursorButton = document.createElement(\"button\")\n revealCursorButton.innerHTML = \"Reveal Cursor\"\n revealCursorButton.className = \"btn outline-btn\"\n\n revealCursorButton.addEventListener(\"click\", () =>\n atom.commands.dispatch(atom.views.getView(atom.workspace), \"outline:reveal-cursor\")\n )\n\n toolbar.appendChild(revealCursorButton)\n\n const showCallHierarchyButton = document.createElement(\"button\")\n showCallHierarchyButton.innerHTML = \"Show Call Hierarchy\"\n showCallHierarchyButton.className = \"btn outline-btn\"\n\n showCallHierarchyButton.addEventListener(\"click\", () =>\n atom.commands.dispatch(atom.views.getView(atom.workspace), \"outline:show-call-hierarchy\")\n )\n\n toolbar.appendChild(showCallHierarchyButton)\n return toolbar\n}\n\nfunction createLargeFileElement() {\n const largeFileElement = document.createElement(\"div\")\n largeFileElement.innerHTML = `Large file mode`\n return largeFileElement\n}\n\nfunction generateStatusElement(status: { title: string; description: string }) {\n const element = document.createElement(\"div\")\n element.className = \"status\"\n\n const { title = \"\", description = \"\" } = status\n element.innerHTML = `

${title}

\n ${description}`\n\n return element\n}\n\nfunction hasChildren(entry: OutlineTree) {\n return entry.children.length >= 1\n}\n\nfunction sortEntries(entries: OutlineTree[]) {\n if (atom.config.get(\"atom-ide-outline.sortEntries\") as boolean) {\n entries.sort((e1: OutlineTree, e2: OutlineTree) => {\n const rowCompare = e1.startPosition.row - e2.startPosition.row\n if (rowCompare === 0) {\n // compare based on column if on the same row\n return e1.startPosition.column - e1.startPosition.column\n }\n return rowCompare\n })\n }\n}\n\nfunction addOutlineEntries(\n parent: HTMLUListElement,\n entries: OutlineTree[],\n editor: TextEditor,\n isLarge: boolean,\n level: number\n) {\n // NOTE: this function is called multiple times with each update in an editor!\n // a few of the calls is slow ~1-100ms\n\n // TIME 0.1ms\n sortEntries(entries)\n\n for (const item of entries) {\n const symbol = document.createElement(\"li\")\n\n // symbol.setAttribute(\"level\", `${level}`); // store level in the element\n\n // Hold an entry in a dedicated element to prevent hover conflicts - hover over an
  • tag would be cought by a parent
  • \n // TIME: ~0-0.1ms\n const labelElement = document.createElement(\"span\")\n\n // TODO support item.tokenizedText\n labelElement.innerText = item.representativeName ?? item.plainText ?? \"\"\n\n labelElement.prepend(/* iconElement */ getIcon(item.icon, item.kind))\n\n symbol.appendChild(labelElement)\n\n if (hasChildren(item)) {\n // create Child elements\n // TIME 0-0.2ms\n const childrenList = document.createElement(\"ul\")\n childrenList.style.setProperty(\"--indent-level\", (level + 1).toString(10))\n childrenList.addEventListener(\"click\", (event) => event.stopPropagation(), { passive: true })\n symbol.appendChild(childrenList)\n\n // fold Button\n const foldButton = createFoldButton(childrenList, isLarge)\n labelElement.prepend(foldButton)\n\n // add children to outline\n // TIME: last one of each batch is slower 0-20ms\n addOutlineEntries(childrenList, item.children, editor, isLarge, level + 1)\n }\n\n // TIME: <0.1ms\n parent.appendChild(symbol)\n }\n}\n\n/**\n * Adds onClick to the outline entries.\n *\n * @attention The assumption about the type of Elements are added using `as HTML...`. After editing code, make sure that the types are correct\n */\nfunction addEntriesOnClick(\n parent: HTMLUListElement,\n entries: OutlineTree[],\n editor: TextEditor,\n pointToElementsMap: Map>,\n level: number\n) {\n const entriesElements = parent.children\n for (let iEntry = 0, len = entries.length; iEntry < len; iEntry++) {\n const item = entries[iEntry]\n const element = entriesElements[iEntry] as HTMLLIElement\n\n // Cursor reposition on click\n element.addEventListener(\"click\", () => onClickEntry(item.startPosition, editor), { passive: true })\n\n // update the cache for selectAtCursorLine\n addToPointToElementsMap(pointToElementsMap, item.startPosition.row, element)\n\n if (hasChildren(item)) {\n const chilrenRootElement = element.lastElementChild as HTMLUListElement\n addEntriesOnClick(chilrenRootElement, item.children, editor, pointToElementsMap, level + 1)\n }\n }\n}\n\n/** Update start position => elements map used in `selectAtCursorLine` */\nfunction addToPointToElementsMap(\n pointToElementsMap: Map>,\n pointStartPositionRow: number,\n element: HTMLLIElement\n) {\n // TIME: 0-0.2ms\n const elms = pointToElementsMap.get(pointStartPositionRow)\n if (elms !== undefined) {\n elms.push(element)\n pointToElementsMap.set(pointStartPositionRow, elms)\n } else {\n pointToElementsMap.set(pointStartPositionRow, [element])\n }\n}\n\nlet clicked: boolean = false // HACK used to prevent scrolling in the outline list when an entry is clicked\n\nfunction onClickEntry(itemStartPosition: Point, editor: TextEditor) {\n // only uses a reference to the editor and the pane and corsur are calculated on the fly\n const editorPane = atom.workspace.paneForItem(editor)\n if (editorPane === undefined) {\n return\n }\n editorPane.activate()\n\n editor.getCursors()[0].setBufferPosition(itemStartPosition, {\n autoscroll: true,\n })\n // HACK\n clicked = true\n}\n\nfunction createFoldButton(childrenList: HTMLUListElement, foldInitially: boolean) {\n // TIME: ~0.1-0.5ms\n // fold button\n const foldButton = document.createElement(\"button\")\n\n if (foldInitially) {\n // collapse in large files by default\n childrenList.hidden = true\n foldButton.classList.add(\"outline-fold-btn\", \"collapsed\")\n } else {\n foldButton.classList.add(\"outline-fold-btn\", \"expanded\")\n }\n\n // fold listener\n foldButton.addEventListener(\n \"click\",\n (event) => {\n childrenList.hidden = !childrenList.hidden\n if (childrenList.hidden) {\n foldButton.classList.remove(\"expanded\")\n foldButton.classList.add(\"collapsed\")\n } else {\n foldButton.classList.remove(\"collapsed\")\n foldButton.classList.add(\"expanded\")\n }\n event.stopPropagation()\n },\n { passive: true }\n )\n return foldButton\n}\n","import { Disposable, TextEditor } from \"atom\"\nimport { Provider as ProviderTypes, BusySignalProvider, FindReferencesProvider } from \"../types-packages/main.d\"\n\nexport class ProviderRegistry> {\n private providers: Array\n\n constructor() {\n this.providers = []\n }\n\n addProvider(provider: Provider): Disposable {\n const index = this.providers.findIndex((p) => provider.priority > p.priority)\n if (index === -1) {\n this.providers.push(provider)\n } else {\n this.providers.splice(index, 0, provider)\n }\n return new Disposable(() => {\n this.removeProvider(provider)\n })\n }\n\n removeProvider(provider: Provider): void {\n const index = this.providers.indexOf(provider)\n if (index !== -1) {\n this.providers.splice(index, 1)\n }\n }\n\n // TODO deprecate since there can be N providers.\n getProviderForEditor(editor: TextEditor): Provider | null {\n const grammar = editor.getGrammar().scopeName\n return this.findProvider(grammar)\n }\n\n // TODO create an ordering or priority aware util to prefer instead.\n getAllProvidersForEditor(editor: TextEditor): Iterable {\n const grammar = editor.getGrammar().scopeName\n return this.findAllProviders(grammar)\n }\n\n findProvider(grammar: string): Provider | null {\n for (const provider of this.findAllProviders(grammar)) {\n return provider\n }\n return null\n }\n\n /** Iterates over all providers matching the grammar, in priority order. */\n *findAllProviders(grammar: string): Iterable {\n for (const provider of this.providers) {\n if (provider.grammarScopes == null || provider.grammarScopes.indexOf(grammar) !== -1) {\n yield provider\n }\n }\n }\n}\n","import { dirname } from \"path\"\nimport { promisify } from \"util\"\nimport { stat } from \"fs\"\nconst statAsync = promisify(stat)\n\nexport async function getCwd(target = \"\"): Promise {\n let cwd: string\n\n if (target) {\n cwd = target\n } else {\n const previousActiveItem = atom.workspace.getActivePaneItem() as { getPath?: () => string }\n cwd = previousActiveItem?.getPath?.() as string\n if (cwd) {\n const dir = atom.project.relativizePath(cwd)[0]\n if (dir) {\n // Use project paths whenever they are available by default.\n return dir\n }\n }\n }\n\n try {\n if (cwd) {\n // Otherwise, if the path exists on the local file system, use the\n // path or parent directory as appropriate.\n const stats = await statAsync(cwd)\n if (stats.isDirectory()) {\n return cwd\n }\n\n cwd = dirname(cwd)\n const dirStats = await statAsync(cwd)\n if (dirStats.isDirectory()) {\n return cwd\n }\n }\n } catch {\n //fail silently\n }\n\n cwd = atom.project.getPaths()[0]\n // no project paths\n return cwd\n}\n","import { TextEditor, TextEditorComponent, TextBuffer, Range, Point } from \"atom\"\nimport invariant from \"assert\"\n\n/**\n * Finds the word at the position. You can either provide a word regex yourself, or have Atom use the word regex in\n * force at the scopes at that position, in which case it uses the optional includeNonWordCharacters, default true. (I\n * know that's a weird default but it follows Atom's convention...)\n */\nexport function wordAtPosition(\n editor: TextEditor,\n position: Point,\n wordRegex?: RegExp | { includeNonWordCharacters: boolean }\n): { wordMatch: Array; range: Range } | null {\n let wordRegex_\n if (wordRegex instanceof RegExp) {\n wordRegex_ = wordRegex\n } else {\n // What is the word regex associated with the position? We'd like to use\n // Cursor.wordRegExp, except that function gets the regex associated\n // with the editor's current cursor while we want the regex associated with\n // the specific position. So we re-implement it ourselves...\n // @ts-ignore: https://github.com/atom/atom/blob/aa3c34bedb361e09a5068dce9620b460a20ca3fb/src/text-editor.js#L5032\n const nonWordChars: string = editor.getNonWordCharacters(position)\n const escaped = nonWordChars.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\")\n // We copied this escaping regex from Cursor.wordRegexp, rather than\n // using the library function 'escapeStringRegExp'. That's because the\n // library function doesn't escape the hyphen character and so is\n // unsuitable for use inside a range.\n let r = `^[\\t ]*$|[^\\\\s${escaped}]+`\n if (wordRegex == null || wordRegex.includeNonWordCharacters) {\n r += `|[${escaped}]+`\n }\n wordRegex_ = new RegExp(r, \"g\")\n }\n return wordAtPositionFromBuffer(editor.getBuffer(), position, wordRegex_)\n}\n\n/**\n * Gets the trimmed range from a given range, i.e. moves the start and end points to the first and last non-whitespace\n * characters (or specified regex) within the range respectively.\n *\n * @param editor The editor containing the range\n * @param rangeToTrim The range to trim\n * @param stopRegex Stop trimming when the first match is found for this regex, defaults to first non-whitespace character\n * @returns Range the trimmed range\n */\nexport function trimRange(editor: TextEditor, rangeToTrim: Range, stopRegex: RegExp = /\\S/): Range {\n const buffer = editor.getBuffer()\n let { start, end } = rangeToTrim\n buffer.scanInRange(stopRegex, rangeToTrim, ({ range, stop }) => {\n start = range.start\n stop()\n })\n buffer.backwardsScanInRange(stopRegex, rangeToTrim, ({ range, stop }) => {\n end = range.end\n stop()\n })\n return new Range(start, end)\n}\n\nfunction getSingleWordAtPosition(editor: TextEditor, position: Point): string | null {\n const match = wordAtPosition(editor, position)\n // We should only receive a single identifier from a single point.\n if (match == null || match.wordMatch.length !== 1) {\n return null\n }\n\n return match.wordMatch[0]\n}\n\n/**\n * Gets the word being right-clicked on in a MouseEvent. A good use case for this is performing an action on a word from\n * a context menu.\n *\n * @param editor The editor containing the word where the MouseEvent occurred from\n * @param event The MouseEvent containing the screen position of the click\n */\nexport function getWordFromMouseEvent(editor: TextEditor, event: MouseEvent): string | null {\n // We can't immediately get the identifier right-clicked on from\n // the MouseEvent. Using its target element content would work in\n // some cases but wouldn't work if there was additional content\n // in the same element, such as in a comment.\n // @ts-ignore: https://github.com/atom/atom/blob/aa3c34bedb361e09a5068dce9620b460a20ca3fb/src/text-editor.js#L5075\n const component: TextEditorComponent = editor.getElement().component\n invariant(component)\n // This solution doesn't feel ideal but it is the way hyperclick does it.\n const point = component.screenPositionForMouseEvent(event)\n return getSingleWordAtPosition(editor, point)\n}\n\n/**\n * Attempts to get a word from the last selection or cursor. A good use case for this is performing an action on an\n * 'active' word after a command is triggered via a keybinding.\n *\n * @param editor The editor containing the 'active' word when the keybinding is triggered\n */\nexport function getWordFromCursorOrSelection(editor: TextEditor): string | null {\n const selection = editor.getSelectedText()\n if (selection && selection.length > 0) {\n return selection\n }\n\n // There was no selection so we can go ahead and try the cursor position.\n const point = editor.getCursorScreenPosition()\n return getSingleWordAtPosition(editor, point)\n}\n\nexport function wordAtPositionFromBuffer(\n buffer: TextBuffer,\n position: Point,\n wordRegex: RegExp\n): { wordMatch: Array; range: Range } | null {\n const { row, column } = position\n const rowRange = buffer.rangeForRow(row)\n let matchData: { match: Array; range: Range } | null\n // Extract the expression from the row text.\n buffer.scanInRange(wordRegex, rowRange, (data) => {\n const { range } = data\n if (range.start.isLessThanOrEqual(position) && range.end.isGreaterThan(position)) {\n matchData = data\n }\n // Stop the scan if the scanner has passed our position.\n if (range.end.column > column) {\n data.stop()\n }\n })\n // @ts-ignore (it is assigned above)\n if (matchData) {\n return {\n wordMatch: matchData.match,\n range: matchData.range,\n }\n } else {\n return null\n }\n}\n\n// Matches a regex on the text of the line ending at endPosition.\n// regex should end with a '$'.\n// Useful for autocomplete.\nexport function matchRegexEndingAt(buffer: TextBuffer, endPosition: Point, regex: RegExp): string | null {\n const line = buffer.getTextInRange([[endPosition.row, 0], endPosition])\n const match = regex.exec(line)\n return match == null ? null : match[0]\n}\n\nexport function isPositionInRange(position: Point, range: Range | Array): boolean {\n return Array.isArray(range) ? range.some((r) => r.containsPoint(position)) : range.containsPoint(position)\n}\n","/** Show a JavaScript Error as an atom notifications */\nexport function notifyError(e: Error) {\n atom.notifications.addError(e.name, {\n stack: e.stack,\n detail: e.message,\n })\n}\n","import { TextEditor } from \"atom\"\n\n/**\n * Find if an editor's largeness based on the given threashold\n *\n * @param editor\n * @param largeLineCount LineCountIfLarge threashold\n * @param longLineLength LineLengthIfLong threashold\n * @returns The largness score if editor is large. Otherwise it returns 0 (a small file)\n */\nexport function largeness(\n editor: TextEditor,\n largeLineCount: number = atom.config.get(\"atom-ide-base.largeLineCount\") || 4000,\n longLineLength: number = atom.config.get(\"atom-ide-base.longLineLength\") || 4000\n) {\n const lineCount = lineCountIfLarge(editor, largeLineCount)\n if (lineCount !== 0) {\n return lineCount\n }\n const longLine = lineLengthIfLong(editor, longLineLength)\n if (longLine !== 0) {\n return longLine\n }\n return 0 // small file\n}\n\n/**\n * Find if an editor has a line that is longer than the given threashold\n *\n * @param editor\n * @param threashold LargeLineCount threashold\n * @returns The line count if it is larger than threashold. Otherwise it returns 0 (a small file)\n */\nexport function lineCountIfLarge(editor: TextEditor, threashold: number) {\n // @ts-ignore\n if (editor.largeFileMode) {\n return 100000\n }\n const lineCount = editor.getLineCount()\n if (lineCount >= threashold) {\n return lineCount\n }\n return 0 // small file\n}\n\n/**\n * Find if an editor has a line that is longer than the given threashold\n *\n * @param editor\n * @param threashold LineLengthForRow threashold\n * @param lineCount Count up to this line. Default is {editor.getLineCount()}\n * @returns The first line length that has a length larger than threashold. If no line is found, it returns 0\n */\nexport function lineLengthIfLong(editor: TextEditor, threashold: number, lineCount: number = editor.getLineCount()) {\n const buffer = editor.getBuffer()\n for (let i = 0, len = lineCount; i < len; i++) {\n const lineLength = buffer.lineLengthForRow(i)\n if (lineLength > threashold) {\n return lineLength\n }\n }\n return 0 // small file\n}\n","export * from \"./getCwd\"\nexport * from \"./ProviderRegistry\"\nexport * from \"./range\"\nexport * from \"./errors\"\nexport * from \"./editor-largeness\"\n","export const statuses = {\n noEditor: {\n title: \"Outline is unavailable.\",\n description: \"Open a text editor.\",\n },\n noProvider: {\n title: \"Provider is unavailable\",\n description:\n \"Looks like a provider for this type of file is not available. Check if a relevant IDE language package is installed and has outline support, or try adding one from Atom's package registry (e.g.: atom-ide-javascript, atom-typescript, ide-python, ide-rust, ide-css, ide-json).\",\n },\n noResult: {\n title: \"No result was found.\",\n description: \"The Outline could not found the text you entered in the filter bar.\",\n },\n}\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 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","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\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","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\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","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","/**\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 baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\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 = baseTrim(value);\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","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","// Define the Pane item used for CallHierarchy\n\nimport { CompositeDisposable } from \"atom\"\nimport type { Disposable, Point, Range, TextEditor } from \"atom\"\nimport type { ProviderRegistry } from \"atom-ide-base/commons-atom/ProviderRegistry\"\nimport type { CallHierarchy, CallHierarchyProvider, CallHierarchyType } from \"atom-ide-base\"\nimport debounce from \"lodash/debounce\"\nimport statuses from \"./statuses.json\"\nimport { getIcon } from \"../utils\"\n\ntype statusKey = keyof typeof statuses\n\n/** HTMLElement for the call-hierarchy tab */\nexport class CallHierarchyView extends HTMLElement {\n #subscriptions = new CompositeDisposable()\n\n /** Subscription to observe editor cursor movement */\n #editorSubscriptions: Disposable | undefined\n\n #providerRegistry: ProviderRegistry\n\n /** Element for outputting results */\n #outputElement: HTMLDivElement\n\n /** Whether to display incoming or outgoing */\n #currentType: CallHierarchyType\n\n /** Time to debounce the timing of display updates */\n #debounceWaitTime = 300\n\n /**\n * Status of currently displayed content\n *\n * - Valid: there is data obtained from the provider\n * - NoEditor: editor not found\n * - NoProvider: provider not found\n * - NoResult: provider returns null or empty array (cursor is above something other than function)\n */\n #status: statusKey | \"valid\" | undefined\n\n /** Whether the tab has already been closed */\n destroyed = false\n\n /** Needed for Atom */\n getTitle = () => \"Call Hierarchy\"\n /** Needed for Atom */\n getIconName = () => \"link\"\n\n /** Determine the type of data to display */\n static getStatus(data: CallHierarchy | statusKey | null | undefined): statusKey | \"valid\" {\n if (typeof data === \"string\") {\n return data\n }\n if (!data || data.data.length === 0) {\n return \"noResult\"\n }\n return \"valid\"\n }\n\n /** Called when the call-hierarchy tab is opened */\n constructor({ providerRegistry }: { providerRegistry: ProviderRegistry }) {\n super()\n this.#providerRegistry = providerRegistry\n const headerElement = this.appendChild(document.createElement(\"div\"))\n headerElement.innerHTML = `\n
    Incoming
    \n
    Outgoing
    \n `\n headerElement.addEventListener(\"click\", () => this.#toggleCurrentType())\n this.#outputElement = this.appendChild(document.createElement(\"div\"))\n this.#currentType = \"incoming\"\n this.setAttribute(\"current-type\", \"incoming\")\n // show call hierarchy when cursor position changes\n const debouncedShowCallHierarchy = debounce(this.showCallHierarchy.bind(this), this.#debounceWaitTime)\n this.#subscriptions.add(\n atom.workspace.observeActiveTextEditor((editor) => {\n this.#editorSubscriptions?.dispose()\n this.#editorSubscriptions = editor?.onDidChangeCursorPosition((event) => {\n debouncedShowCallHierarchy(editor, event.newBufferPosition)\n })\n this.showCallHierarchy(editor)\n })\n )\n }\n\n /** Toogle between incoming and outgoing displays */\n #toggleCurrentType = () => {\n this.#currentType = this.#currentType === \"incoming\" ? \"outgoing\" : \"incoming\"\n this.setAttribute(\"current-type\", this.#currentType)\n this.showCallHierarchy()\n }\n\n /** Show call hierarchy for {editor} and {point} */\n async showCallHierarchy(editor?: TextEditor, point?: Point) {\n if (this.destroyed) {\n return\n }\n const targetEditor = editor ?? atom.workspace.getActiveTextEditor()\n if (!targetEditor) {\n // display a message for when there is no editor\n await this.#updateCallHierarchyView(\"noEditor\")\n return\n }\n const targetPoint = point ?? targetEditor.getCursorBufferPosition()\n const provider = this.#providerRegistry.getProviderForEditor(targetEditor)\n if (!provider) {\n // display a message for when there is no provider\n await this.#updateCallHierarchyView(\"noProvider\")\n return\n }\n // update display with new data\n await this.#updateCallHierarchyView(\n await (this.#currentType === \"incoming\"\n ? provider.getIncomingCallHierarchy(targetEditor, targetPoint)\n : provider.getOutgoingCallHierarchy(targetEditor, targetPoint))\n )\n }\n\n /** Show call hierarchy for {newData} */\n #updateCallHierarchyView = async (newData: CallHierarchy | statusKey | null | undefined) => {\n const prevStatus = this.#status\n const currentStatus = (this.#status = CallHierarchyView.getStatus(newData))\n if (currentStatus === \"valid\") {\n // update display when there is new data\n this.#outputElement.innerHTML = \"\"\n // type of `newData` must be `CallHierarchy` because status is valid\n const item = new CallHierarchyViewItem(newData as CallHierarchy)\n this.#outputElement.appendChild(item)\n // unfold the first hierarchy\n await item.toggleAllItem()\n return\n }\n if (prevStatus === currentStatus) {\n // Do not update if the displayed content does not change\n return\n }\n // update display with new status message when status is noEditor, noProvider or noResult\n this.#outputElement.innerHTML = \"\"\n const item = new CallHierarchyViewStatusItem(statuses[currentStatus])\n this.#outputElement.appendChild(item)\n }\n\n /** Called when the call-hierarchy tab is closed */\n destroy() {\n this.innerHTML = \"\"\n this.#editorSubscriptions?.dispose()\n this.#subscriptions.dispose()\n this.destroyed = true\n }\n}\ncustomElements.define(\"atom-ide-outline-call-hierarchy-view\", CallHierarchyView)\n\n/** HTMLElement for the call-hierarchy item */\nclass CallHierarchyViewItem extends HTMLElement {\n #callHierarchy: CallHierarchy | undefined\n #childCallHierarchies: Promise | undefined>[]\n\n #dblclickWaitTime = 300\n\n /** Whether {callHierarchy} data is undefined or empty array */\n static isEmpty(callHierarchy: CallHierarchy | undefined): callHierarchy is undefined {\n return !callHierarchy || callHierarchy.data.length === 0\n }\n\n constructor(callHierarchy: CallHierarchy) {\n super()\n this.#callHierarchy = callHierarchy\n this.#childCallHierarchies = this.#callHierarchy.data.map((_item, i) => callHierarchy.itemAt(i))\n this.append(\n ...this.#callHierarchy.data.map((item, i) => {\n const itemEl = document.createElement(\"div\")\n itemEl.setAttribute(\"title\", item.path)\n itemEl.innerHTML = `\n
    \n
    \n ${escapeHTML(item.name)}\n ${escapeHTML(item.detail ? ` - ${item.detail}` : \"\")}\n ${item.tags.map((str) => `${escapeHTML(str)}`).join(\"\")}\n
    \n
    \n `\n itemEl\n .querySelector(\":scope>div>div\")\n ?.insertAdjacentElement(\"afterbegin\", getIcon(item.icon ?? undefined, undefined))\n // click to fold or unfold child items\n let isDblclick = false\n itemEl.querySelector(\":scope>div\")?.addEventListener(\n \"click\",\n (e) => {\n e.stopPropagation()\n if (isDblclick && this.#callHierarchy) {\n // double-click to jump to the document\n this.#showDocument(this.#callHierarchy.data[i])\n return\n }\n // single-click to toggle the display of item\n this.toggleItemAt(i)\n // enable double click\n window.setTimeout(() => (isDblclick = false), this.#dblclickWaitTime)\n isDblclick = true\n },\n false\n )\n // enable toggle button if child element can be displayed\n this.#childCallHierarchies[i].then((childCallHierarchy) => {\n if (!CallHierarchyViewItem.isEmpty(childCallHierarchy)) {\n itemEl.classList.add(\"call-hierarchy-exist-child-data\")\n }\n })\n return itemEl\n })\n )\n }\n\n /** Toggle the display of the {i}-th item */\n async toggleItemAt(i: number) {\n const itemEl = this.querySelectorAll(\":scope>div\")[i]\n const titleEl = itemEl.querySelector(\":scope>div\")\n const childEl = itemEl.querySelector>(\"atom-ide-outline-call-hierarchy-item\")\n if (childEl) {\n if (childEl.style.display !== \"none\") {\n // hide if visible\n childEl.style.display = \"none\"\n titleEl?.classList.replace(\"icon-chevron-down\", \"icon-chevron-right\")\n } else {\n // show if hidden\n childEl.style.display = \"\"\n titleEl?.classList.replace(\"icon-chevron-right\", \"icon-chevron-down\")\n }\n } else {\n const childCallHierarchy = await this.#childCallHierarchies[i]\n if (!CallHierarchyViewItem.isEmpty(childCallHierarchy)) {\n // create element if there is no data\n itemEl.appendChild(new CallHierarchyViewItem(childCallHierarchy))\n titleEl?.classList.replace(\"icon-chevron-right\", \"icon-chevron-down\")\n }\n }\n }\n\n /** Toggle the display of all item */\n async toggleAllItem() {\n const dataLen = this.#callHierarchy?.data.length ?? 0\n await Promise.all([...Array(dataLen).keys()].map((i) => this.toggleItemAt(i)))\n }\n\n /** Show document for {range} and {path}, and select {selectionRange} */\n #showDocument = ({\n path,\n range: {\n start: { row, column },\n },\n selectionRange,\n }: {\n path: string\n range: Range\n selectionRange: Range\n }) => {\n const editor = atom.workspace.getActiveTextEditor()\n if (editor?.getPath() === path) {\n editor.setCursorBufferPosition([row, column])\n editor.scrollToBufferPosition([row, column], { center: true })\n editor.setSelectedBufferRange(selectionRange)\n } else {\n atom.workspace\n .open(path, {\n initialLine: row,\n initialColumn: column,\n searchAllPanes: true,\n activatePane: true,\n activateItem: true,\n })\n .then((editor: any) => editor?.setSelectedBufferRange(selectionRange))\n }\n }\n}\ncustomElements.define(\"atom-ide-outline-call-hierarchy-item\", CallHierarchyViewItem)\n\n/** Create a message when there is nothing to display. */\nclass CallHierarchyViewStatusItem extends HTMLElement {\n constructor({ title, description }: { title: string; description: string }) {\n super()\n this.innerHTML = `\n

    ${escapeHTML(title)}

    \n ${escapeHTML(description)}\n `\n }\n}\ncustomElements.define(\"atom-ide-outline-call-hierarchy-status-item\", CallHierarchyViewStatusItem)\n\nfunction escapeHTML(str: string): string {\n return str.replace(\n /[\"&'<>`]/g,\n (match) =>\n ({\n \"&\": \"&\",\n \"'\": \"'\",\n \"`\": \"`\",\n '\"': \""\",\n \"<\": \"<\",\n \">\": \">\",\n }[match] as string)\n )\n}\n","import type { Pane } from \"atom\"\n\n/** Handles the operation of opening and closing tabs. */\nexport class TabHandler {\n /** Returns the dock where the tab should be created. */\n static #getDefaultDock() {\n // If want to change the location of the new tab, change the code here.\n return atom.workspace.getRightDock()\n }\n /** It is possible that the tab does not exist even if the item is not undefined, as the tab may be closed manually. */\n item: T | undefined\n #createItem: () => T\n constructor({\n createItem,\n }: {\n /** Function called when creating a tab. Should return the pane item you want to add to the tab. */\n createItem: () => T\n }) {\n this.#createItem = createItem\n }\n /**\n * Toggle the tab. If the tab exists, it will be deleted. If the tab is open but hidden, the tab will be brought to\n * the front. If the tab does not exist, it will be created.\n */\n toggle() {\n const { state, targetPane } = this.#getState()\n if (state === \"hidden\") {\n this.#display({ targetPane })\n } else if (state === \"noItem\") {\n this.#create({ targetPane })\n } else {\n this.#destroy({ targetPane })\n }\n }\n /**\n * Show the tab. If the tab is open but hidden, the tab will be brought to the front. If the tab does not exist, it\n * will be created.\n */\n show() {\n const { state, targetPane } = this.#getState()\n if (state === \"hidden\") {\n this.#display({ targetPane })\n } else if (state === \"noItem\") {\n this.#create({ targetPane })\n }\n }\n /** Delete the tab. If the tab exists, it will be deleted. */\n delete() {\n const targetPane = this.item && atom.workspace.paneForItem(this.item)\n if (targetPane) {\n this.#destroy({ targetPane })\n }\n }\n /** Display the hidden tab at target pane. */\n #display({ targetPane }: { targetPane: Pane }) {\n if (this.item) {\n targetPane.activateItem(this.item)\n }\n const dock = atom.workspace.getPaneContainers().find((v) => v.getPanes().includes(targetPane))\n if (dock && \"show\" in dock) {\n dock.show()\n }\n }\n /** Create the new tab at target pane. */\n #create({ targetPane }: { targetPane: Pane }) {\n this.item = this.#createItem()\n targetPane.addItem(this.item)\n targetPane.activateItem(this.item)\n TabHandler.#getDefaultDock().show()\n }\n /** Destroy the tab from target pane. */\n #destroy({ targetPane }: { targetPane: Pane }) {\n if (this.item) {\n targetPane.destroyItem(this.item)\n }\n }\n /** Get the state of the tab. */\n #getState() {\n const pane = this.item && atom.workspace.paneForItem(this.item)\n if (pane) {\n if (\n pane.getActiveItem() === this.item &&\n // @ts-ignore (getVisiblePanes is not includes typedef)\n atom.workspace.getVisiblePanes().includes(pane)\n ) {\n return { state: \"visible\", targetPane: pane } as const\n } else {\n return { state: \"hidden\", targetPane: pane } as const\n }\n } else {\n return {\n state: \"noItem\",\n targetPane: TabHandler.#getDefaultDock().getActivePane(),\n } as const\n }\n }\n}\n","import { CompositeDisposable } from \"atom\"\nimport type { Disposable } from \"atom\"\nimport { ProviderRegistry } from \"atom-ide-base/commons-atom/ProviderRegistry\"\nimport type { CallHierarchyProvider } from \"atom-ide-base\"\n\nimport { CallHierarchyView } from \"./call-hierarchy-view\"\nimport { TabHandler } from \"./tab-handler\"\n\nconst providerRegistry = new ProviderRegistry()\nconst subscriptions = new CompositeDisposable()\nconst callHierarchyTab = new TabHandler({\n createItem: () => new CallHierarchyView({ providerRegistry }),\n})\n\nexport function activate() {\n subscriptions.add(\n atom.commands.add(\"atom-workspace\", \"outline:toggle-call-hierarchy\", () => callHierarchyTab.toggle()),\n atom.commands.add(\"atom-workspace\", \"outline:show-call-hierarchy\", () => callHierarchyTab.show())\n )\n}\n\nexport function deactivate() {\n subscriptions.dispose()\n callHierarchyTab.delete()\n}\n\nexport function consumeCallHierarchyProvider(provider: CallHierarchyProvider): Disposable {\n const providerDisposer = providerRegistry.addProvider(provider)\n subscriptions.add(providerDisposer)\n callHierarchyTab.item?.showCallHierarchy()\n return providerDisposer\n}\n","import { CompositeDisposable, TextEditor } from \"atom\"\nimport { OutlineView } from \"./outlineView\"\nimport type { OutlineProvider } from \"atom-ide-base\"\nimport { ProviderRegistry } from \"atom-ide-base/commons-atom/ProviderRegistry\"\nimport { notifyError, largeness as editorLargeness } from \"atom-ide-base/commons-atom\"\nimport { isItemVisible } from \"atom-ide-base/commons-ui/items\"\n\nexport { statuses } from \"./statuses\" // for spec\nimport { statuses } from \"./statuses\"\nimport debounce from \"lodash/debounce\"\n\nexport { consumeCallHierarchyProvider } from \"./call-hierarchy/main\"\nimport * as CallHierarchy from \"./call-hierarchy/main\"\n\nconst subscriptions = new CompositeDisposable()\n\nlet view: OutlineView | undefined\nexport const outlineProviderRegistry = new ProviderRegistry()\n\n// let busySignalProvider: BusySignalProvider | undefined // service might be consumed late\n\nexport function activate() {\n CallHierarchy.activate()\n addCommands()\n addObservers()\n if (atom.config.get(\"atom-ide-outline.initialDisplay\") as boolean) {\n // initially show outline pane\n toggleOutlineView().catch((e: Error) => {\n notifyError(e)\n })\n }\n}\n\nfunction addCommands() {\n subscriptions.add(\n /* outlineToggle */ atom.commands.add(\"atom-workspace\", \"outline:toggle\", toggleOutlineView),\n /* revealCursor */ atom.commands.add(\"atom-workspace\", \"outline:reveal-cursor\", revealCursor)\n )\n}\n\nfunction addObservers() {\n // if the active text editor changed (switched to another editor), then call editorChanged function\n subscriptions.add(atom.workspace.onDidChangeActiveTextEditor(editorChanged))\n}\n\nexport function deactivate() {\n CallHierarchy.deactivate()\n onEditorChangedDisposable?.dispose()\n subscriptions.dispose()\n view?.destroy()\n view = undefined\n}\n\n// export function consumeSignal(registry: BusySignalRegistry) {\n// busySignalProvider = registry.create()\n// subscriptions.add(busySignalProvider)\n// }\n\nexport async function consumeOutlineProvider(provider: OutlineProvider) {\n subscriptions.add(/* providerRegistryEntry */ outlineProviderRegistry.addProvider(provider))\n\n // NOTE Generate (try) an outline after obtaining a provider for the current active editor\n // this initial outline is always rendered no matter if it is visible or not,\n // this is because we can't track if the outline tab becomes visible suddenly later,\n // or if the editor changes later once outline is visible\n // so we need to have an outline for the current editor\n // the following updates rely on the visibility\n await getOutline()\n}\n\n// disposables returned inside onEditorChangedDisposable\nlet onEditorChangedDisposable: CompositeDisposable | undefined = undefined\n\nasync function editorChanged(editor?: TextEditor) {\n if (editor === undefined) {\n return\n }\n // dispose the old subscriptions\n onEditorChangedDisposable?.dispose()\n onEditorChangedDisposable = new CompositeDisposable() // we can't reuse the CompositeDisposable!\n\n // NOTE initial outline is always rendered no matter if it is visible or not,\n // this is because we can't track if the outline tab becomes visible suddenly,\n // so we always need to show the outline for the correct file\n // the following updates rely on the visibility\n await getOutline(editor)\n\n const largeness = editorLargeness(editor as TextEditor)\n // How long to wait for the new changes before updating the outline.\n // A high number will increase the responsiveness of the text editor in large files.\n const updateDebounceTime = Math.max(largeness / 4, 300) // 1/4 of the line count\n\n const doubouncedGetOutline = debounce(\n getOutlintIfVisible as (textEditor: TextEditor) => Promise,\n updateDebounceTime\n )\n\n onEditorChangedDisposable.add(\n // update the outline if editor stops changing\n editor.onDidStopChanging(async () => {\n await doubouncedGetOutline(editor)\n }),\n\n // clean up if the editor editor is closed\n editor.onDidDestroy(() => {\n setStatus(\"noEditor\")\n })\n )\n}\n\nexport function revealCursor() {\n const editor = atom.workspace.getActiveTextEditor()\n if (editor === undefined) {\n return\n }\n\n // following cursor disposable\n if (view !== undefined) {\n view.selectAtCursorLine(editor)\n }\n}\n\nexport async function toggleOutlineView() {\n if (view === undefined) {\n view = new OutlineView() // create outline pane\n }\n const outlinePane = atom.workspace.paneForItem(view)\n if (outlinePane) {\n await outlinePane.destroyItem(view)\n return\n }\n\n const rightDock = atom.workspace.getRightDock()\n const [pane] = rightDock.getPanes()\n\n pane.addItem(view)\n pane.activateItem(view)\n\n rightDock.show()\n\n // Trigger an editor change whenever an outline is toggeled.\n try {\n await editorChanged(atom.workspace.getActiveTextEditor())\n } catch (e) {\n notifyError(e as Error)\n }\n}\n\nfunction getOutlintIfVisible(editor = atom.workspace.getActiveTextEditor()) {\n // if outline is not visible return\n if (!isItemVisible(view)) {\n return\n }\n return getOutline(editor)\n}\n\nexport async function getOutline(editor = atom.workspace.getActiveTextEditor()) {\n if (view === undefined) {\n view = new OutlineView() // create outline pane\n } else {\n view.reset()\n }\n // editor\n if (editor === undefined) {\n return setStatus(\"noEditor\")\n }\n\n // provider\n const provider = outlineProviderRegistry.getProviderForEditor(editor)\n\n if (!provider) {\n return setStatus(\"noProvider\")\n }\n\n // const busySignalID = `Outline: ${editor.getPath()}`\n // busySignalProvider?.add(busySignalID)\n\n const outline = await provider.getOutline(editor)\n view.setOutline(outline?.outlineTrees ?? [], editor, Boolean(editorLargeness(editor as TextEditor)))\n\n // busySignalProvider?.remove(busySignalID)\n}\n\nexport function setStatus(id: \"noEditor\" | \"noProvider\" | \"noResult\") {\n view?.presentStatus(statuses[id])\n}\n\nexport { default as config } from \"./config.json\"\n"],"names":["el","alignToTop","scrollTops","getScrollTops","scrollIntoView","restoreOverflowHiddenScrollTops","center","scrollIntoViewIfNeeded","el_","Map","set","scrollTop","parentElement","forEach","isOverflowHidden","overflowStyle","style","overflow","getComputedStyle","item","element","getItemElement","undefined","isElementVisible","paneContainer","atom","workspace","paneContainerForItem","isVisible","HTMLElement","display","hidden","offsetHeight","getElement","HAS_WEAKSET_SUPPORT","WeakSet","keys","Object","sameValueZeroEqual","a","b","isPlainObject","value","constructor","isPromiseLike","then","isReactElement","$$typeof","getNewCacheFallback","values","add","push","has","indexOf","getNewCache","createCircularEqualCreator","isEqual","comparator","_comparator","cache","isCacheableA","isCacheableB","hasA","hasB","hasOwnProperty","Function","prototype","bind","call","areObjectsEqual","meta","keysA","index","length","key","reactElementA","reactElementB","HAS_MAP_SUPPORT","HAS_SET_SUPPORT","Set","createComparator","createIsEqual","aShape","Array","isArray","bShape","areArraysEqual","Date","getTime","RegExp","source","global","ignoreCase","multiline","unicode","sticky","lastIndex","areRegExpsEqual","isValueEqual","size","aValue","aKey","bValue","bKey","areMapsEqual","areSetsEqual","deepEqual","getIcon","iconType","kindTypeGiven","kindType","iconElement","document","createElement","classList","type","kindClass","replace","innerHTML","substring","OutlineView","this","TreeFilterer","appendChild","toolbar","className","revealCursorButton","addEventListener","commands","dispatch","views","getView","showCallHierarchyButton","makeOutlineToolbar","createSearchBar","outlineContent","reset","searchBarEditorDisposable","dispose","selectCursorDisposable","searchBarEditor","setText","destroy","remove","getTitle","getIconName","setOutline","outlineTree","editor","isLarge","lastEntries","hasEqualContent","pointToElementsMap","clear","addEntriesOnClick","outlineList","createOutlineList","clearContent","largeFileElement","createLargeFileElement","updateSearchBar","dataset","editorRootScope","firstOutlineTree","dataKey","representativeName","treeFilterer","setCandidates","onDidStopChanging","filterOutlineTree","TextEditor","mini","placeholderText","searchBar","renderLastOutlienList","isAlive","isItemVisible","text","getText","query","trim","filterResults","filter","maxResults","usePathScoring","err","error","message","console","candidates","filteredTree","array","elm2","findIndex","elm1","setStatus","filteredOutlineList","presentStatus","status","statusElement","title","description","generateStatusElement","selectAtCursorLine","cursor","getLastCursor","clicked","focusedElms","elm","toggleAttribute","cursorPoint","getBufferRow","get","points","previousPoint","point","previousElms","currentElms","onDidChangeCursorPosition","focus","getRootScopeDescriptor","getScopesArray","join","tabLength","getTabLength","setProperty","Math","max","toString","addOutlineEntries","config","ot1","ot2","ot1Len","iEntry","e1","e2","plainText","kind","icon","children","hasChildren","entry","parent","entries","level","sort","rowCompare","startPosition","row","column","sortEntries","symbol","labelElement","innerText","prepend","childrenList","event","stopPropagation","passive","foldButton","createFoldButton","entriesElements","len","onClickEntry","addToPointToElementsMap","lastElementChild","pointStartPositionRow","elms","itemStartPosition","editorPane","paneForItem","activate","getCursors","setBufferPosition","autoscroll","foldInitially","ProviderRegistry_2","providers","addProvider","provider","p","priority","splice","atom_1","removeProvider","getProviderForEditor","grammar","getGrammar","scopeName","findProvider","getAllProvidersForEditor","findAllProviders","grammarScopes","statAsync","util_1","fs_1","async","target","cwd","previousActiveItem","getActivePaneItem","getPath","dir","project","relativizePath","isDirectory","path_1","getPaths","wordAtPosition","position","wordRegex","wordRegex_","escaped","getNonWordCharacters","r","includeNonWordCharacters","wordAtPositionFromBuffer","getBuffer","getSingleWordAtPosition","match","wordMatch","buffer","rowRange","rangeForRow","matchData","scanInRange","data","range","start","isLessThanOrEqual","end","isGreaterThan","stop","rangeToTrim","stopRegex","backwardsScanInRange","component","assert_1","screenPositionForMouseEvent","selection","getSelectedText","getCursorScreenPosition","endPosition","regex","line","getTextInRange","exec","some","containsPoint","e","notifications","addError","name","stack","detail","lineCountIfLarge","threashold","largeFileMode","lineCount","getLineCount","lineLengthIfLong","i","lineLength","lineLengthForRow","largeLineCount","longLineLength","longLine","__exportStar","statuses","noEditor","noProvider","noResult","isObject_1","freeGlobal","freeSelf","self","root","now_1","now","reWhitespace","trimmedEndIndex","string","test","charAt","reTrimStart","_baseTrim","slice","_Symbol","Symbol","require$$0","objectProto","nativeObjectToString","symToStringTag","toStringTag","_getRawTag","isOwn","tag","unmasked","result","getRawTag","require$$1","objectToString","baseGetTag","isObjectLike","baseTrim","isObject","isSymbol","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","toNumber","other","valueOf","isBinary","nativeMax","nativeMin","min","debounce_1","func","wait","options","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","apply","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","arguments","clearTimeout","cancel","flush","__classPrivateFieldGet","receiver","state","f","__classPrivateFieldSet","CallHierarchyView","providerRegistry","super","_CallHierarchyView_subscriptions","CompositeDisposable","_CallHierarchyView_editorSubscriptions","_CallHierarchyView_providerRegistry","_CallHierarchyView_outputElement","_CallHierarchyView_currentType","_CallHierarchyView_debounceWaitTime","_CallHierarchyView_status","_CallHierarchyView_toggleCurrentType","setAttribute","showCallHierarchy","_CallHierarchyView_updateCallHierarchyView","newData","prevStatus","currentStatus","getStatus","CallHierarchyViewItem","toggleAllItem","CallHierarchyViewStatusItem","headerElement","debouncedShowCallHierarchy","debounce","observeActiveTextEditor","newBufferPosition","destroyed","targetEditor","getActiveTextEditor","targetPoint","getCursorBufferPosition","getIncomingCallHierarchy","getOutgoingCallHierarchy","customElements","define","callHierarchy","_CallHierarchyViewItem_callHierarchy","_CallHierarchyViewItem_childCallHierarchies","_CallHierarchyViewItem_dblclickWaitTime","_CallHierarchyViewItem_showDocument","path","selectionRange","setCursorBufferPosition","scrollToBufferPosition","setSelectedBufferRange","open","initialLine","initialColumn","searchAllPanes","activatePane","activateItem","map","_item","itemAt","append","itemEl","escapeHTML","tags","str","querySelector","insertAdjacentElement","isDblclick","toggleItemAt","window","childCallHierarchy","isEmpty","querySelectorAll","titleEl","childEl","dataLen","Promise","all","TabHandler","createItem","_TabHandler_createItem","toggle","targetPane","show","delete","getRightDock","dock","getPaneContainers","find","v","getPanes","includes","addItem","destroyItem","pane","getActiveItem","getVisiblePanes","getActivePane","ProviderRegistry","subscriptions","callHierarchyTab","view","outlineProviderRegistry","onEditorChangedDisposable","editorChanged","getOutline","largeness","editorLargeness","updateDebounceTime","doubouncedGetOutline","getOutlintIfVisible","onDidDestroy","revealCursor","toggleOutlineView","outlinePane","rightDock","notifyError","outline","outlineTrees","Boolean","id","onDidChangeActiveTextEditor","catch","providerDisposer"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"main.js","sources":["../node_modules/atom-ide-base/src-commons-ui/scrollIntoView.ts","../node_modules/atom-ide-base/src-commons-ui/items.ts","../node_modules/fast-equals/src/utils.ts","../node_modules/fast-equals/src/comparator.ts","../node_modules/fast-equals/src/index.ts","../src/utils.ts","../src/outlineView.ts","../node_modules/atom-ide-base/src-commons-atom/ProviderRegistry.ts","../node_modules/atom-ide-base/src-commons-atom/getCwd.ts","../node_modules/atom-ide-base/src-commons-atom/range.ts","../node_modules/atom-ide-base/src-commons-atom/errors.ts","../node_modules/atom-ide-base/src-commons-atom/editor-largeness.ts","../node_modules/atom-ide-base/src-commons-atom/index.ts","../src/statuses.ts","../node_modules/lodash/isObject.js","../node_modules/lodash/_root.js","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/now.js","../node_modules/lodash/_trimmedEndIndex.js","../node_modules/lodash/_baseTrim.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/isSymbol.js","../node_modules/lodash/isObjectLike.js","../node_modules/lodash/toNumber.js","../node_modules/lodash/debounce.js","../node_modules/tslib/tslib.es6.js","../src/call-hierarchy/call-hierarchy-view.ts","../src/call-hierarchy/tab-handler.ts","../src/call-hierarchy/main.ts","../src/main.ts"],"sourcesContent":["/* globals getComputedStyle */\n\n/**\n * Use these functions instead of `Element::scrollIntoView()` and `Element::scrollIntoViewIfNeeded()`!\n *\n * We've had a recurring issue in Nuclide (e.g. T20028138) where the UI would shift, leaving part of the workspace\n * element offscreen and a blank area in the window. This was caused by called to the native `scrollIntoView()` and\n * `scrollIntoViewIfNeeded()` which, according to the spec, has two potentially surprising behaviors:\n *\n * 1. It scrolls every scrollable ancestor (not just the closest), where\n * 2. \"scrollable\" is explicitly defined to include elements with `overflow: hidden`\n *\n * This is surprising because `overflow: hidden` is typically used to make elements *not scrollable*.\n *\n * Once the `overflow: hidden` element is scrolled, the user has no way to return it to its original position (as it has\n * no scrollbars).\n *\n * Note that this API doesn't support smooth scrolling. If that becomes necessary, we'll need to come up with a better fix.\n *\n * It's tempting to assume that using `scrollIntoViewIfNeeded()` would fix this issue, however, if the window is small\n * enough so that no amount of scrolling the desired scrollable element would ever reveal the element you're trying to,\n * the browser will keep scrolling ancestors.\n */\n\nexport function scrollIntoView(el: Element, alignToTop?: boolean): void {\n const scrollTops = getScrollTops(el)\n el.scrollIntoView(alignToTop)\n restoreOverflowHiddenScrollTops(scrollTops)\n}\n\nexport type ElementExtended = Element & { scrollIntoViewIfNeeded?: (shouldCenter: boolean) => void }\n\nexport function scrollIntoViewIfNeeded(el: Element, center: boolean = true): void {\n const scrollTops = getScrollTops(el)\n // eslint-disable-next-line no-unused-expressions\n ;(el as ElementExtended).scrollIntoViewIfNeeded?.(center) ?? el.scrollIntoView(center)\n restoreOverflowHiddenScrollTops(scrollTops)\n}\n\nfunction getScrollTops(el_: Element): Map {\n let el: Element | null = el_\n const scrollTops = new Map()\n while (el !== null) {\n scrollTops.set(el, el.scrollTop)\n el = el.parentElement\n }\n return scrollTops\n}\n\nfunction restoreOverflowHiddenScrollTops(scrollTops: Map): void {\n scrollTops.forEach((scrollTop, el) => {\n if (el.scrollTop !== scrollTop && isOverflowHidden(el)) {\n el.scrollTop = scrollTop\n }\n })\n}\n\nexport function isOverflowHidden(el: HTMLElement | SVGElement | Element): boolean {\n const overflowStyle = (el as HTMLElement)?.style.overflow\n const overflow = overflowStyle ?? getComputedStyle(el).overflow\n return overflow === \"hidden\"\n}\n","import type { Dock, ViewRegistry } from \"atom\"\n\n/**\n * A function to detect if an item (view) is visible in Atom. This is useful to skip code excecution or updating when\n * the item is not visible.\n *\n * @param item This is an item that is stored in {ViewRegistry}. It has the same type of the argument that you pass to\n * `atom.view.getView(item)`.\n */\nexport function isItemVisible(item: Parameters[0] | undefined | null) {\n if (item === undefined || item === null) {\n return false\n }\n // check the HTMLElement itself (important for when the dock/container is visible but the tab is not selected)\n // try getting the element\n const element = getItemElement(item)\n if (element !== undefined && !isElementVisible(element)) {\n return false\n // if it we can't detect the invisiblity using HTML we need to consider Atom's context so we continue\n }\n // etch component\n // if (item?.component?.visible === false) {\n // return false\n // }\n const paneContainer = atom.workspace.paneContainerForItem(item)\n // if no container it is not visible\n if (paneContainer === undefined) {\n return false\n } else if (typeof (paneContainer as any).isVisible === \"function\") {\n // use Dock.isVisible()\n return (paneContainer as Dock).isVisible()\n } else {\n // it is visible (when paneContainer is not a dock like TextEditor)\n return true\n }\n}\n\n/**\n * A function to detect if an HTMLElement is visible. It doesn't consider the Atom context. To detect if an item is\n * visible in Atom use {isItemVisible} instead This is useful to skip code excecution or updating when the element is\n * not visible.\n *\n * @param element\n */\nexport function isElementVisible(element: HTMLElement) {\n if (\n element instanceof HTMLElement &&\n (element.style.display === \"none\" || element.hidden || element.offsetHeight === 0)\n ) {\n return false\n }\n return true\n}\n\n/** Get the HTMLElement of an item using `.getElement()` or `.element` */\nexport function getItemElement(item: object | undefined | null) {\n if (item === undefined || item === null) {\n return undefined\n }\n return typeof (item as any).getElement === \"function\"\n ? (item as { getElement: () => HTMLElement }).getElement()\n : (item as { element: HTMLElement | undefined }).element\n}\n","const HAS_WEAKSET_SUPPORT = typeof WeakSet === 'function';\n\nconst { keys } = Object;\n\ntype Cache = {\n add: (value: any) => void;\n has: (value: any) => boolean;\n};\n\nexport type EqualityComparator = (a: any, b: any, meta?: any) => boolean;\n\n/**\n * are the values passed strictly equal or both NaN\n *\n * @param a the value to compare against\n * @param b the value to test\n * @returns are the values equal by the SameValueZero principle\n */\nexport function sameValueZeroEqual(a: any, b: any) {\n return a === b || (a !== a && b !== b);\n}\n\n/**\n * is the value a plain object\n *\n * @param value the value to test\n * @returns is the value a plain object\n */\nexport function isPlainObject(value: any) {\n return value.constructor === Object || value.constructor == null;\n}\n\n/**\n * is the value promise-like (meaning it is thenable)\n *\n * @param value the value to test\n * @returns is the value promise-like\n */\nexport function isPromiseLike(value: any) {\n return !!value && typeof value.then === 'function';\n}\n\n/**\n * is the value passed a react element\n *\n * @param value the value to test\n * @returns is the value a react element\n */\nexport function isReactElement(value: any) {\n return !!(value && value.$$typeof);\n}\n\n/**\n * in cases where WeakSet is not supported, creates a new custom\n * object that mimics the necessary API aspects for cache purposes\n *\n * @returns the new cache object\n */\nexport function getNewCacheFallback(): Cache {\n const values: any[] = [];\n\n return {\n add(value: any) {\n values.push(value);\n },\n\n has(value: any) {\n return values.indexOf(value) !== -1;\n },\n };\n}\n\n/**\n * get a new cache object to prevent circular references\n *\n * @returns the new cache object\n */\nexport const getNewCache = ((canUseWeakMap: boolean) => {\n if (canUseWeakMap) {\n return function _getNewCache(): Cache {\n return new WeakSet();\n };\n }\n\n return getNewCacheFallback;\n})(HAS_WEAKSET_SUPPORT);\n\n/**\n * create a custom isEqual handler specific to circular objects\n *\n * @param [isEqual] the isEqual comparator to use instead of isDeepEqual\n * @returns the method to create the `isEqual` function\n */\nexport function createCircularEqualCreator(isEqual?: EqualityComparator) {\n return function createCircularEqual(comparator: EqualityComparator) {\n const _comparator = isEqual || comparator;\n\n return function circularEqual(\n a: any,\n b: any,\n cache: Cache = getNewCache(),\n ) {\n const isCacheableA = !!a && typeof a === 'object';\n const isCacheableB = !!b && typeof b === 'object';\n\n if (isCacheableA || isCacheableB) {\n const hasA = isCacheableA && cache.has(a);\n const hasB = isCacheableB && cache.has(b);\n\n if (hasA || hasB) {\n return hasA && hasB;\n }\n\n if (isCacheableA) {\n cache.add(a);\n }\n\n if (isCacheableB) {\n cache.add(b);\n }\n }\n\n return _comparator(a, b, cache);\n };\n };\n}\n\n/**\n * are the arrays equal in value\n *\n * @param a the array to test\n * @param b the array to test against\n * @param isEqual the comparator to determine equality\n * @param meta the meta object to pass through\n * @returns are the arrays equal\n */\nexport function areArraysEqual(\n a: any[],\n b: any[],\n isEqual: EqualityComparator,\n meta: any,\n) {\n let index = a.length;\n\n if (b.length !== index) {\n return false;\n }\n\n while (index-- > 0) {\n if (!isEqual(a[index], b[index], meta)) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * are the maps equal in value\n *\n * @param a the map to test\n * @param b the map to test against\n * @param isEqual the comparator to determine equality\n * @param meta the meta map to pass through\n * @returns are the maps equal\n */\nexport function areMapsEqual(\n a: Map,\n b: Map,\n isEqual: EqualityComparator,\n meta: any,\n) {\n let isValueEqual = a.size === b.size;\n\n if (isValueEqual && a.size) {\n a.forEach((aValue, aKey) => {\n if (isValueEqual) {\n isValueEqual = false;\n\n b.forEach((bValue, bKey) => {\n if (!isValueEqual && isEqual(aKey, bKey, meta)) {\n isValueEqual = isEqual(aValue, bValue, meta);\n }\n });\n }\n });\n }\n\n return isValueEqual;\n}\n\ntype Dictionary = {\n [key: string]: Type;\n [index: number]: Type;\n};\n\nconst OWNER = '_owner';\n\nconst hasOwnProperty = Function.prototype.bind.call(\n Function.prototype.call,\n Object.prototype.hasOwnProperty,\n);\n\n/**\n * are the objects equal in value\n *\n * @param a the object to test\n * @param b the object to test against\n * @param isEqual the comparator to determine equality\n * @param meta the meta object to pass through\n * @returns are the objects equal\n */\nexport function areObjectsEqual(\n a: Dictionary,\n b: Dictionary,\n isEqual: EqualityComparator,\n meta: any,\n) {\n const keysA = keys(a);\n\n let index = keysA.length;\n\n if (keys(b).length !== index) {\n return false;\n }\n\n if (index) {\n let key: string;\n\n while (index-- > 0) {\n key = keysA[index];\n\n if (key === OWNER) {\n const reactElementA = isReactElement(a);\n const reactElementB = isReactElement(b);\n\n if (\n (reactElementA || reactElementB) &&\n reactElementA !== reactElementB\n ) {\n return false;\n }\n }\n\n if (!hasOwnProperty(b, key) || !isEqual(a[key], b[key], meta)) {\n return false;\n }\n }\n }\n\n return true;\n}\n\n/**\n * are the regExps equal in value\n *\n * @param a the regExp to test\n * @param b the regExp to test agains\n * @returns are the regExps equal\n */\nexport function areRegExpsEqual(a: RegExp, b: RegExp) {\n return (\n a.source === b.source &&\n a.global === b.global &&\n a.ignoreCase === b.ignoreCase &&\n a.multiline === b.multiline &&\n a.unicode === b.unicode &&\n a.sticky === b.sticky &&\n a.lastIndex === b.lastIndex\n );\n}\n\n/**\n * are the sets equal in value\n *\n * @param a the set to test\n * @param b the set to test against\n * @param isEqual the comparator to determine equality\n * @param meta the meta set to pass through\n * @returns are the sets equal\n */\nexport function areSetsEqual(\n a: Set,\n b: Set,\n isEqual: EqualityComparator,\n meta: any,\n) {\n let isValueEqual = a.size === b.size;\n\n if (isValueEqual && a.size) {\n a.forEach((aValue) => {\n if (isValueEqual) {\n isValueEqual = false;\n\n b.forEach((bValue) => {\n if (!isValueEqual) {\n isValueEqual = isEqual(aValue, bValue, meta);\n }\n });\n }\n });\n }\n\n return isValueEqual;\n}\n","import {\n EqualityComparator,\n areArraysEqual,\n areMapsEqual,\n areObjectsEqual,\n areRegExpsEqual,\n areSetsEqual,\n isPlainObject,\n isPromiseLike,\n sameValueZeroEqual,\n} from './utils';\n\nconst HAS_MAP_SUPPORT = typeof Map === 'function';\nconst HAS_SET_SUPPORT = typeof Set === 'function';\n\ntype EqualityComparatorCreator = (fn: EqualityComparator) => EqualityComparator;\n\nexport function createComparator(createIsEqual?: EqualityComparatorCreator) {\n const isEqual: EqualityComparator =\n /* eslint-disable no-use-before-define */\n typeof createIsEqual === 'function'\n ? createIsEqual(comparator)\n : comparator;\n /* eslint-enable */\n\n /**\n * compare the value of the two objects and return true if they are equivalent in values\n *\n * @param a the value to test against\n * @param b the value to test\n * @param [meta] an optional meta object that is passed through to all equality test calls\n * @returns are a and b equivalent in value\n */\n function comparator(a: any, b: any, meta?: any) {\n if (a === b) {\n return true;\n }\n\n if (a && b && typeof a === 'object' && typeof b === 'object') {\n if (isPlainObject(a) && isPlainObject(b)) {\n return areObjectsEqual(a, b, isEqual, meta);\n }\n\n let aShape = Array.isArray(a);\n let bShape = Array.isArray(b);\n\n if (aShape || bShape) {\n return aShape === bShape && areArraysEqual(a, b, isEqual, meta);\n }\n\n aShape = a instanceof Date;\n bShape = b instanceof Date;\n\n if (aShape || bShape) {\n return (\n aShape === bShape && sameValueZeroEqual(a.getTime(), b.getTime())\n );\n }\n\n aShape = a instanceof RegExp;\n bShape = b instanceof RegExp;\n\n if (aShape || bShape) {\n return aShape === bShape && areRegExpsEqual(a, b);\n }\n\n if (isPromiseLike(a) || isPromiseLike(b)) {\n return a === b;\n }\n\n if (HAS_MAP_SUPPORT) {\n aShape = a instanceof Map;\n bShape = b instanceof Map;\n\n if (aShape || bShape) {\n return aShape === bShape && areMapsEqual(a, b, isEqual, meta);\n }\n }\n\n if (HAS_SET_SUPPORT) {\n aShape = a instanceof Set;\n bShape = b instanceof Set;\n\n if (aShape || bShape) {\n return aShape === bShape && areSetsEqual(a, b, isEqual, meta);\n }\n }\n\n return areObjectsEqual(a, b, isEqual, meta);\n }\n\n return a !== a && b !== b;\n }\n\n return comparator;\n}\n","import { createComparator } from './comparator';\nimport { createCircularEqualCreator, sameValueZeroEqual } from './utils';\n\nexport { createComparator as createCustomEqual, sameValueZeroEqual };\n\nexport const deepEqual = createComparator();\nexport const shallowEqual = createComparator(() => sameValueZeroEqual);\n\nexport const circularDeepEqual = createComparator(createCircularEqualCreator());\nexport const circularShallowEqual = createComparator(\n createCircularEqualCreator(sameValueZeroEqual),\n);\n","import { deepEqual } from \"fast-equals\"\n\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nexport function unique>(array: T[]) {\n return array.filter((elm2, index) => array.findIndex((elm1) => deepEqual(elm1, elm2)) === index)\n}\n\nexport function getIcon(iconType: string | undefined, kindTypeGiven: string | undefined) {\n let kindType = kindTypeGiven\n // LSP specification: https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_documentSymbol\n // atom-languageclient mapping: https://github.com/atom/atom-languageclient/blob/485bb9d706b422456640c9070eee456ef2cf09c0/lib/adapters/outline-view-adapter.ts#L270\n\n const iconElement = document.createElement(\"span\")\n iconElement.classList.add(\"outline-icon\")\n\n // if iconType given instead\n if (kindType === undefined && iconType !== undefined) {\n kindType = iconType\n }\n\n let type: string = \"🞇\"\n if (typeof kindType === \"string\" && kindType.length > 0) {\n let kindClass: string\n // hasKind\n if (kindType.indexOf(\"type-\") === 0) {\n // supplied with type-...\n kindClass = `${kindType}`\n type = kindType.replace(\"type-\", \"\")\n } else {\n // supplied without type-\n kindClass = `type-${kindType}`\n type = kindType\n }\n iconElement.classList.add(kindClass)\n }\n\n iconElement.innerHTML = `${type.substring(0, 3)}`\n\n return iconElement\n}\n","import { TextEditor, Point, Disposable } from \"atom\"\nimport type { OutlineTree } from \"atom-ide-base\"\nimport { scrollIntoViewIfNeeded } from \"atom-ide-base/commons-ui/scrollIntoView\"\nimport { isItemVisible } from \"atom-ide-base/commons-ui/items\"\nimport { TreeFilterer, Tree } from \"zadeh\"\nimport { unique, getIcon } from \"./utils\"\nimport { setStatus } from \"./main\"\n\nexport class OutlineView {\n public element: HTMLDivElement\n\n /** Contains the content of the outline which is either the status element or the list element */\n public outlineContent: HTMLDivElement\n /** The actual outline list element */\n private outlineList: HTMLUListElement | undefined = undefined\n\n /** Cache for reveal corsur */\n private pointToElementsMap = new Map>() // TODO Point to element\n /** Cache for focused elements */\n private focusedElms: HTMLElement[] | undefined\n /** Cache of last rendered list used to avoid rerendering */\n lastEntries: OutlineTree[] | undefined\n\n private treeFilterer = new TreeFilterer<\"representativeName\" | \"plainText\", \"children\">()\n public searchBarEditor: TextEditor | undefined\n private searchBarEditorDisposable: Disposable | undefined\n private selectCursorDisposable: Disposable | undefined\n\n constructor() {\n this.element = document.createElement(\"div\")\n this.element.classList.add(\"atom-ide-outline\")\n\n this.element.appendChild(makeOutlineToolbar())\n this.element.appendChild(this.createSearchBar())\n\n this.outlineContent = document.createElement(\"div\")\n this.element.appendChild(this.outlineContent)\n\n this.outlineContent.classList.add(\"outline-content\")\n }\n\n reset() {\n this.searchBarEditorDisposable?.dispose()\n this.selectCursorDisposable?.dispose()\n this.searchBarEditor?.setText(\"\")\n }\n\n destroy() {\n this.element.remove()\n }\n\n getElement() {\n return this.element\n }\n\n // needed for Atom\n /* eslint-disable class-methods-use-this */\n getTitle() {\n return \"Outline\"\n }\n\n getIconName() {\n return \"list-unordered\"\n }\n /* eslint-enable class-methods-use-this */\n\n /**\n * The main function of {OutlineView} which renders the content in the outline or only update the event listeners if\n * the outline tree hasn't changed\n */\n setOutline(outlineTree: OutlineTree[], editor: TextEditor, isLarge: boolean) {\n // skip rendering if it is the same\n // TIME 0.2-1.2ms // the check itself takes ~0.2-0.5ms, so it is better than rerendering\n if (this.lastEntries !== undefined && hasEqualContent(outlineTree, this.lastEntries)) {\n this.pointToElementsMap.clear() // empty revealCorsur cache\n addEntriesOnClick(\n this.outlineList! /* because this.lastEntries is not undefined */,\n outlineTree,\n editor,\n this.pointToElementsMap,\n 0\n )\n return\n } else {\n this.lastEntries = outlineTree\n }\n\n this.createOutlineList(outlineTree, editor, isLarge)\n }\n\n /** The function to render the content in the outline */\n createOutlineList(outlineTree: OutlineTree[], editor: TextEditor, isLarge: boolean) {\n this.clearContent()\n\n if (isLarge) {\n this.outlineContent.appendChild(createLargeFileElement())\n }\n this.updateSearchBar(outlineTree, editor, isLarge)\n\n this.outlineList = createOutlineList(outlineTree, editor, isLarge, this.pointToElementsMap)\n this.outlineContent.appendChild(this.outlineList)\n }\n\n clearContent() {\n this.outlineContent.innerHTML = \"\"\n if (this.outlineList !== undefined) {\n this.outlineList.dataset.editorRootScope = \"\"\n }\n this.lastEntries = undefined\n }\n\n updateSearchBar(outlineTree: OutlineTree[], editor: TextEditor, isLarge: boolean) {\n this.searchBarEditorDisposable?.dispose()\n\n // detect if representativeName exists on an entry of the tree, if it doesn't, then we use plainText\n const firstOutlineTree = outlineTree[0]\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const dataKey = firstOutlineTree?.representativeName !== undefined ? \"representativeName\" : \"plainText\"\n\n // @ts-ignore we check if representitiveName is undefined, and if it is, we will use plainText instead\n this.treeFilterer.setCandidates(outlineTree, dataKey, \"children\")\n\n this.searchBarEditorDisposable = this.searchBarEditor?.onDidStopChanging(() =>\n this.filterOutlineTree(editor, isLarge)\n )\n }\n\n createSearchBar() {\n this.searchBarEditor = new TextEditor({ mini: true, placeholderText: \"Filter\" })\n\n const searchBar = document.createElement(\"div\")\n searchBar.classList.add(\"outline-searchbar\")\n\n searchBar.appendChild(atom.views.getView(this.searchBarEditor))\n\n return searchBar\n }\n\n renderLastOutlienList() {\n if (this.outlineList !== undefined) {\n this.clearContent()\n this.outlineContent.appendChild(this.outlineList)\n }\n }\n\n filterOutlineTree(editor: TextEditor, isLarge: boolean) {\n // @ts-ignore\n if (!(editor.isAlive() as boolean) || !isItemVisible(editor)) {\n return\n }\n\n const text = this.searchBarEditor?.getText()\n if (typeof text !== \"string\") {\n this.renderLastOutlienList()\n return\n }\n const query = text.trim()\n if (query.length === 0) {\n this.renderLastOutlienList()\n return\n }\n let filterResults: Tree<\"representativeName\" | \"plainText\", \"children\">[]\n try {\n filterResults = this.treeFilterer.filter(query, { maxResults: 100, usePathScoring: false })\n } catch (err) {\n const error = err as Error\n error.message = `Filtering failed for unkown reasons.\\n${error.message}`\n console.error(error)\n this.reset()\n // Retry:\n // @ts-ignore internal api\n const candidates = this.treeFilterer.candidates as Tree<\"representativeName\" | \"plainText\", \"children\">[]\n this.treeFilterer = new TreeFilterer(candidates)\n this.updateSearchBar(candidates as unknown as OutlineTree[], editor, isLarge)\n this.searchBarEditor?.setText(query)\n this.filterOutlineTree(editor, isLarge)\n return\n }\n\n // TODO why returns duplicates? ~0-0.2s\n const filteredTree = unique(filterResults)\n if (filteredTree.length === 0) {\n return setStatus(\"noResult\")\n }\n const filteredOutlineList = createOutlineList(\n filteredTree as unknown as OutlineTree[],\n editor,\n isLarge,\n this.pointToElementsMap\n )\n this.clearContent()\n this.outlineContent.appendChild(filteredOutlineList)\n }\n\n presentStatus(status: { title: string; description: string }) {\n this.clearContent()\n\n const statusElement = generateStatusElement(status)\n\n this.outlineContent.appendChild(statusElement)\n }\n\n // callback for scrolling and highlighting the element that the cursor is on\n selectAtCursorLine(editor: TextEditor) {\n const cursor = editor.getLastCursor()\n\n // skip if not visible\n if (!isItemVisible(this)) {\n return\n }\n\n if (clicked) {\n // HACK do not scroll when the cursor has moved to a click on the outline entry\n clicked = false\n return\n }\n\n // TIME: ~0.2-0.3ms\n // TODO use range of start and end instead of just the line number\n\n // remove old cursorOn attribue\n if (this.focusedElms !== undefined) {\n for (const elm of this.focusedElms) {\n elm.toggleAttribute(\"cursorOn\", false)\n }\n }\n\n // add new cursorOn attribue\n const cursorPoint = cursor.getBufferRow()\n this.focusedElms = this.pointToElementsMap.get(cursorPoint)\n\n // search in between the points\n if (this.focusedElms === undefined) {\n const points = this.pointToElementsMap.keys()\n let previousPoint: number = 0\n for (const point of points) {\n // find the first point which has a larger point\n if (point >= cursorPoint) {\n const previousElms = this.pointToElementsMap.get(previousPoint)!\n previousElms[previousElms.length - 1].classList.add(\"after-border\")\n const currentElms = this.pointToElementsMap.get(point)!\n this.focusedElms = [...currentElms, ...previousElms] // in reverse so the previous elms are scrolled into in the end\n break\n } else {\n // update previous point for the next iteration\n previousPoint = point\n }\n }\n }\n\n // add cursorOn and scrollInto\n if (this.focusedElms !== undefined) {\n for (const elm of this.focusedElms) {\n scrollIntoViewIfNeeded(elm, true)\n elm.toggleAttribute(\"cursorOn\", true)\n }\n // remove focus once cursor moved\n this.selectCursorDisposable = editor.onDidChangeCursorPosition(() => {\n if (this.focusedElms !== undefined) {\n for (const elm of this.focusedElms) {\n elm.toggleAttribute(\"cursorOn\", false)\n }\n }\n this.selectCursorDisposable?.dispose()\n })\n }\n // focus on the editor after finding\n atom.views.getView(editor).focus()\n }\n}\n\n/** Create the main outline list */\nfunction createOutlineList(\n outlineTree: OutlineTree[],\n editor: TextEditor,\n isLarge: boolean,\n pointToElementsMap: Map>\n) {\n const outlineList = document.createElement(\"ul\")\n outlineList.dataset.editorRootScope = editor.getRootScopeDescriptor().getScopesArray().join(\" \")\n\n const tabLength = editor.getTabLength()\n if (typeof tabLength === \"number\") {\n outlineList.style.setProperty(\"--editor-tab-length\", Math.max(tabLength / 2, 2).toString(10))\n }\n addOutlineEntries(\n outlineList,\n outlineTree,\n editor,\n /* foldInItially */ isLarge || (atom.config.get(\"atom-ide-outline.foldInitially\") as boolean),\n 0\n )\n // TIME 0.2-0.5m\n addEntriesOnClick(outlineList, outlineTree, editor, pointToElementsMap, 0)\n return outlineList\n}\n\n/** Compares the content of the two given {OutlineTree[]} It only compares the content that affects rendering */\nfunction hasEqualContent(ot1: OutlineTree[], ot2: OutlineTree[]) {\n // simple compare\n if (ot1 === ot2) {\n return true\n } else {\n // compare length\n const ot1Len = ot1.length\n const ot2Len = ot2.length\n if (ot1Len !== ot2Len) {\n return false\n }\n // compare the content\n for (let iEntry = 0; iEntry < ot1Len; iEntry++) {\n const e1 = ot1[iEntry]\n const e2 = ot2[iEntry]\n if (\n e1.representativeName !== e2.representativeName ||\n e1.plainText !== e2.plainText ||\n e1.kind !== e2.kind ||\n e1.icon !== e2.icon ||\n !hasEqualContent(e1.children, e2.children)\n ) {\n return false\n }\n }\n }\n return true\n}\n\nfunction makeOutlineToolbar() {\n const toolbar = document.createElement(\"span\")\n toolbar.className = \"outline-toolbar\"\n\n const revealCursorButton = document.createElement(\"button\")\n revealCursorButton.innerHTML = \"Reveal Cursor\"\n revealCursorButton.className = \"btn outline-btn\"\n\n revealCursorButton.addEventListener(\"click\", () =>\n atom.commands.dispatch(atom.views.getView(atom.workspace), \"outline:reveal-cursor\")\n )\n\n toolbar.appendChild(revealCursorButton)\n\n const showCallHierarchyButton = document.createElement(\"button\")\n showCallHierarchyButton.innerHTML = \"Show Call Hierarchy\"\n showCallHierarchyButton.className = \"btn outline-btn\"\n\n showCallHierarchyButton.addEventListener(\"click\", () =>\n atom.commands.dispatch(atom.views.getView(atom.workspace), \"outline:show-call-hierarchy\")\n )\n\n toolbar.appendChild(showCallHierarchyButton)\n return toolbar\n}\n\nfunction createLargeFileElement() {\n const largeFileElement = document.createElement(\"div\")\n largeFileElement.innerHTML = `Large file mode`\n return largeFileElement\n}\n\nfunction generateStatusElement(status: { title: string; description: string }) {\n const element = document.createElement(\"div\")\n element.className = \"status\"\n\n const { title = \"\", description = \"\" } = status\n element.innerHTML = `

    ${title}

    \n ${description}`\n\n return element\n}\n\nfunction hasChildren(entry: OutlineTree) {\n return entry.children.length >= 1\n}\n\nfunction sortEntries(entries: OutlineTree[]) {\n if (atom.config.get(\"atom-ide-outline.sortEntries\") as boolean) {\n entries.sort((e1: OutlineTree, e2: OutlineTree) => {\n const rowCompare = e1.startPosition.row - e2.startPosition.row\n if (rowCompare === 0) {\n // compare based on column if on the same row\n return e1.startPosition.column - e1.startPosition.column\n }\n return rowCompare\n })\n }\n}\n\nfunction addOutlineEntries(\n parent: HTMLUListElement,\n entries: OutlineTree[],\n editor: TextEditor,\n isLarge: boolean,\n level: number\n) {\n // NOTE: this function is called multiple times with each update in an editor!\n // a few of the calls is slow ~1-100ms\n\n // TIME 0.1ms\n sortEntries(entries)\n\n for (const item of entries) {\n const symbol = document.createElement(\"li\")\n\n // symbol.setAttribute(\"level\", `${level}`); // store level in the element\n\n // Hold an entry in a dedicated element to prevent hover conflicts - hover over an
  • tag would be cought by a parent
  • \n // TIME: ~0-0.1ms\n const labelElement = document.createElement(\"span\")\n\n // TODO support item.tokenizedText\n labelElement.innerText = item.representativeName ?? item.plainText ?? \"\"\n\n labelElement.prepend(/* iconElement */ getIcon(item.icon, item.kind))\n\n symbol.appendChild(labelElement)\n\n if (hasChildren(item)) {\n // create Child elements\n // TIME 0-0.2ms\n const childrenList = document.createElement(\"ul\")\n childrenList.style.setProperty(\"--indent-level\", (level + 1).toString(10))\n childrenList.addEventListener(\"click\", (event) => event.stopPropagation(), { passive: true })\n symbol.appendChild(childrenList)\n\n // fold Button\n const foldButton = createFoldButton(childrenList, isLarge)\n labelElement.prepend(foldButton)\n\n // add children to outline\n // TIME: last one of each batch is slower 0-20ms\n addOutlineEntries(childrenList, item.children, editor, isLarge, level + 1)\n }\n\n // TIME: <0.1ms\n parent.appendChild(symbol)\n }\n}\n\n/**\n * Adds onClick to the outline entries.\n *\n * @attention The assumption about the type of Elements are added using `as HTML...`. After editing code, make sure that the types are correct\n */\nfunction addEntriesOnClick(\n parent: HTMLUListElement,\n entries: OutlineTree[],\n editor: TextEditor,\n pointToElementsMap: Map>,\n level: number\n) {\n const entriesElements = parent.children\n for (let iEntry = 0, len = entries.length; iEntry < len; iEntry++) {\n const item = entries[iEntry]\n const element = entriesElements[iEntry] as HTMLLIElement\n\n // Cursor reposition on click\n element.addEventListener(\"click\", () => onClickEntry(item.startPosition, editor), { passive: true })\n\n // update the cache for selectAtCursorLine\n addToPointToElementsMap(pointToElementsMap, item.startPosition.row, element)\n\n if (hasChildren(item)) {\n const chilrenRootElement = element.lastElementChild as HTMLUListElement\n addEntriesOnClick(chilrenRootElement, item.children, editor, pointToElementsMap, level + 1)\n }\n }\n}\n\n/** Update start position => elements map used in `selectAtCursorLine` */\nfunction addToPointToElementsMap(\n pointToElementsMap: Map>,\n pointStartPositionRow: number,\n element: HTMLLIElement\n) {\n // TIME: 0-0.2ms\n const elms = pointToElementsMap.get(pointStartPositionRow)\n if (elms !== undefined) {\n elms.push(element)\n pointToElementsMap.set(pointStartPositionRow, elms)\n } else {\n pointToElementsMap.set(pointStartPositionRow, [element])\n }\n}\n\nlet clicked: boolean = false // HACK used to prevent scrolling in the outline list when an entry is clicked\n\nfunction onClickEntry(itemStartPosition: Point, editor: TextEditor) {\n // only uses a reference to the editor and the pane and corsur are calculated on the fly\n const editorPane = atom.workspace.paneForItem(editor)\n if (editorPane === undefined) {\n return\n }\n editorPane.activate()\n\n editor.getCursors()[0].setBufferPosition(itemStartPosition, {\n autoscroll: true,\n })\n // HACK\n clicked = true\n}\n\nfunction createFoldButton(childrenList: HTMLUListElement, foldInitially: boolean) {\n // TIME: ~0.1-0.5ms\n // fold button\n const foldButton = document.createElement(\"button\")\n\n if (foldInitially) {\n // collapse in large files by default\n childrenList.hidden = true\n foldButton.classList.add(\"outline-fold-btn\", \"collapsed\")\n } else {\n foldButton.classList.add(\"outline-fold-btn\", \"expanded\")\n }\n\n // fold listener\n foldButton.addEventListener(\n \"click\",\n (event) => {\n childrenList.hidden = !childrenList.hidden\n if (childrenList.hidden) {\n foldButton.classList.remove(\"expanded\")\n foldButton.classList.add(\"collapsed\")\n } else {\n foldButton.classList.remove(\"collapsed\")\n foldButton.classList.add(\"expanded\")\n }\n event.stopPropagation()\n },\n { passive: true }\n )\n return foldButton\n}\n","import { Disposable, TextEditor } from \"atom\"\nimport { Provider as ProviderTypes, BusySignalProvider, FindReferencesProvider } from \"../types-packages/main.d\"\n\nexport class ProviderRegistry> {\n private providers: Array\n\n constructor() {\n this.providers = []\n }\n\n addProvider(provider: Provider): Disposable {\n const index = this.providers.findIndex((p) => provider.priority > p.priority)\n if (index === -1) {\n this.providers.push(provider)\n } else {\n this.providers.splice(index, 0, provider)\n }\n return new Disposable(() => {\n this.removeProvider(provider)\n })\n }\n\n removeProvider(provider: Provider): void {\n const index = this.providers.indexOf(provider)\n if (index !== -1) {\n this.providers.splice(index, 1)\n }\n }\n\n // TODO deprecate since there can be N providers.\n getProviderForEditor(editor: TextEditor): Provider | null {\n const grammar = editor.getGrammar().scopeName\n return this.findProvider(grammar)\n }\n\n // TODO create an ordering or priority aware util to prefer instead.\n getAllProvidersForEditor(editor: TextEditor): Iterable {\n const grammar = editor.getGrammar().scopeName\n return this.findAllProviders(grammar)\n }\n\n findProvider(grammar: string): Provider | null {\n for (const provider of this.findAllProviders(grammar)) {\n return provider\n }\n return null\n }\n\n /** Iterates over all providers matching the grammar, in priority order. */\n *findAllProviders(grammar: string): Iterable {\n for (const provider of this.providers) {\n if (provider.grammarScopes == null || provider.grammarScopes.indexOf(grammar) !== -1) {\n yield provider\n }\n }\n }\n}\n","import { dirname } from \"path\"\nimport { promisify } from \"util\"\nimport { stat } from \"fs\"\nconst statAsync = promisify(stat)\n\nexport async function getCwd(target = \"\"): Promise {\n let cwd: string\n\n if (target) {\n cwd = target\n } else {\n const previousActiveItem = atom.workspace.getActivePaneItem() as { getPath?: () => string }\n cwd = previousActiveItem?.getPath?.() as string\n if (cwd) {\n const dir = atom.project.relativizePath(cwd)[0]\n if (dir) {\n // Use project paths whenever they are available by default.\n return dir\n }\n }\n }\n\n try {\n if (cwd) {\n // Otherwise, if the path exists on the local file system, use the\n // path or parent directory as appropriate.\n const stats = await statAsync(cwd)\n if (stats.isDirectory()) {\n return cwd\n }\n\n cwd = dirname(cwd)\n const dirStats = await statAsync(cwd)\n if (dirStats.isDirectory()) {\n return cwd\n }\n }\n } catch {\n //fail silently\n }\n\n cwd = atom.project.getPaths()[0]\n // no project paths\n return cwd\n}\n","import { TextEditor, TextEditorComponent, TextBuffer, Range, Point } from \"atom\"\nimport invariant from \"assert\"\n\n/**\n * Finds the word at the position. You can either provide a word regex yourself, or have Atom use the word regex in\n * force at the scopes at that position, in which case it uses the optional includeNonWordCharacters, default true. (I\n * know that's a weird default but it follows Atom's convention...)\n */\nexport function wordAtPosition(\n editor: TextEditor,\n position: Point,\n wordRegex?: RegExp | { includeNonWordCharacters: boolean }\n): { wordMatch: Array; range: Range } | null {\n let wordRegex_\n if (wordRegex instanceof RegExp) {\n wordRegex_ = wordRegex\n } else {\n // What is the word regex associated with the position? We'd like to use\n // Cursor.wordRegExp, except that function gets the regex associated\n // with the editor's current cursor while we want the regex associated with\n // the specific position. So we re-implement it ourselves...\n // @ts-ignore: https://github.com/atom/atom/blob/aa3c34bedb361e09a5068dce9620b460a20ca3fb/src/text-editor.js#L5032\n const nonWordChars: string = editor.getNonWordCharacters(position)\n const escaped = nonWordChars.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\")\n // We copied this escaping regex from Cursor.wordRegexp, rather than\n // using the library function 'escapeStringRegExp'. That's because the\n // library function doesn't escape the hyphen character and so is\n // unsuitable for use inside a range.\n let r = `^[\\t ]*$|[^\\\\s${escaped}]+`\n if (wordRegex == null || wordRegex.includeNonWordCharacters) {\n r += `|[${escaped}]+`\n }\n wordRegex_ = new RegExp(r, \"g\")\n }\n return wordAtPositionFromBuffer(editor.getBuffer(), position, wordRegex_)\n}\n\n/**\n * Gets the trimmed range from a given range, i.e. moves the start and end points to the first and last non-whitespace\n * characters (or specified regex) within the range respectively.\n *\n * @param editor The editor containing the range\n * @param rangeToTrim The range to trim\n * @param stopRegex Stop trimming when the first match is found for this regex, defaults to first non-whitespace character\n * @returns Range the trimmed range\n */\nexport function trimRange(editor: TextEditor, rangeToTrim: Range, stopRegex: RegExp = /\\S/): Range {\n const buffer = editor.getBuffer()\n let { start, end } = rangeToTrim\n buffer.scanInRange(stopRegex, rangeToTrim, ({ range, stop }) => {\n start = range.start\n stop()\n })\n buffer.backwardsScanInRange(stopRegex, rangeToTrim, ({ range, stop }) => {\n end = range.end\n stop()\n })\n return new Range(start, end)\n}\n\nfunction getSingleWordAtPosition(editor: TextEditor, position: Point): string | null {\n const match = wordAtPosition(editor, position)\n // We should only receive a single identifier from a single point.\n if (match == null || match.wordMatch.length !== 1) {\n return null\n }\n\n return match.wordMatch[0]\n}\n\n/**\n * Gets the word being right-clicked on in a MouseEvent. A good use case for this is performing an action on a word from\n * a context menu.\n *\n * @param editor The editor containing the word where the MouseEvent occurred from\n * @param event The MouseEvent containing the screen position of the click\n */\nexport function getWordFromMouseEvent(editor: TextEditor, event: MouseEvent): string | null {\n // We can't immediately get the identifier right-clicked on from\n // the MouseEvent. Using its target element content would work in\n // some cases but wouldn't work if there was additional content\n // in the same element, such as in a comment.\n // @ts-ignore: https://github.com/atom/atom/blob/aa3c34bedb361e09a5068dce9620b460a20ca3fb/src/text-editor.js#L5075\n const component: TextEditorComponent = editor.getElement().component\n invariant(component)\n // This solution doesn't feel ideal but it is the way hyperclick does it.\n const point = component.screenPositionForMouseEvent(event)\n return getSingleWordAtPosition(editor, point)\n}\n\n/**\n * Attempts to get a word from the last selection or cursor. A good use case for this is performing an action on an\n * 'active' word after a command is triggered via a keybinding.\n *\n * @param editor The editor containing the 'active' word when the keybinding is triggered\n */\nexport function getWordFromCursorOrSelection(editor: TextEditor): string | null {\n const selection = editor.getSelectedText()\n if (selection && selection.length > 0) {\n return selection\n }\n\n // There was no selection so we can go ahead and try the cursor position.\n const point = editor.getCursorScreenPosition()\n return getSingleWordAtPosition(editor, point)\n}\n\nexport function wordAtPositionFromBuffer(\n buffer: TextBuffer,\n position: Point,\n wordRegex: RegExp\n): { wordMatch: Array; range: Range } | null {\n const { row, column } = position\n const rowRange = buffer.rangeForRow(row)\n let matchData: { match: Array; range: Range } | null\n // Extract the expression from the row text.\n buffer.scanInRange(wordRegex, rowRange, (data) => {\n const { range } = data\n if (range.start.isLessThanOrEqual(position) && range.end.isGreaterThan(position)) {\n matchData = data\n }\n // Stop the scan if the scanner has passed our position.\n if (range.end.column > column) {\n data.stop()\n }\n })\n // @ts-ignore (it is assigned above)\n if (matchData) {\n return {\n wordMatch: matchData.match,\n range: matchData.range,\n }\n } else {\n return null\n }\n}\n\n// Matches a regex on the text of the line ending at endPosition.\n// regex should end with a '$'.\n// Useful for autocomplete.\nexport function matchRegexEndingAt(buffer: TextBuffer, endPosition: Point, regex: RegExp): string | null {\n const line = buffer.getTextInRange([[endPosition.row, 0], endPosition])\n const match = regex.exec(line)\n return match == null ? null : match[0]\n}\n\nexport function isPositionInRange(position: Point, range: Range | Array): boolean {\n return Array.isArray(range) ? range.some((r) => r.containsPoint(position)) : range.containsPoint(position)\n}\n","/** Show a JavaScript Error as an atom notifications */\nexport function notifyError(e: Error) {\n atom.notifications.addError(e.name, {\n stack: e.stack,\n detail: e.message,\n })\n}\n","import { TextEditor } from \"atom\"\n\n/**\n * Find if an editor's largeness based on the given threashold\n *\n * @param editor\n * @param largeLineCount LineCountIfLarge threashold\n * @param longLineLength LineLengthIfLong threashold\n * @returns The largness score if editor is large. Otherwise it returns 0 (a small file)\n */\nexport function largeness(\n editor: TextEditor,\n largeLineCount: number = atom.config.get(\"atom-ide-base.largeLineCount\") || 4000,\n longLineLength: number = atom.config.get(\"atom-ide-base.longLineLength\") || 4000\n) {\n const lineCount = lineCountIfLarge(editor, largeLineCount)\n if (lineCount !== 0) {\n return lineCount\n }\n const longLine = lineLengthIfLong(editor, longLineLength)\n if (longLine !== 0) {\n return longLine\n }\n return 0 // small file\n}\n\n/**\n * Find if an editor has a line that is longer than the given threashold\n *\n * @param editor\n * @param threashold LargeLineCount threashold\n * @returns The line count if it is larger than threashold. Otherwise it returns 0 (a small file)\n */\nexport function lineCountIfLarge(editor: TextEditor, threashold: number) {\n // @ts-ignore\n if (editor.largeFileMode) {\n return 100000\n }\n const lineCount = editor.getLineCount()\n if (lineCount >= threashold) {\n return lineCount\n }\n return 0 // small file\n}\n\n/**\n * Find if an editor has a line that is longer than the given threashold\n *\n * @param editor\n * @param threashold LineLengthForRow threashold\n * @param lineCount Count up to this line. Default is {editor.getLineCount()}\n * @returns The first line length that has a length larger than threashold. If no line is found, it returns 0\n */\nexport function lineLengthIfLong(editor: TextEditor, threashold: number, lineCount: number = editor.getLineCount()) {\n const buffer = editor.getBuffer()\n for (let i = 0, len = lineCount; i < len; i++) {\n const lineLength = buffer.lineLengthForRow(i)\n if (lineLength > threashold) {\n return lineLength\n }\n }\n return 0 // small file\n}\n","export * from \"./getCwd\"\nexport * from \"./ProviderRegistry\"\nexport * from \"./range\"\nexport * from \"./errors\"\nexport * from \"./editor-largeness\"\n","export const statuses = {\n noEditor: {\n title: \"Outline is unavailable.\",\n description: \"Open a text editor.\",\n },\n noProvider: {\n title: \"Provider is unavailable\",\n description:\n \"Looks like a provider for this type of file is not available. Check if a relevant IDE language package is installed and has outline support, or try adding one from Atom's package registry (e.g.: atom-ide-javascript, atom-typescript, ide-python, ide-rust, ide-css, ide-json).\",\n },\n noResult: {\n title: \"No result was found.\",\n description: \"The Outline could not found the text you entered in the filter bar.\",\n },\n}\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 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","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\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","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\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","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","/**\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 baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\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 = baseTrim(value);\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","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","// Define the Pane item used for CallHierarchy\n\nimport { CompositeDisposable } from \"atom\"\nimport type { Disposable, Point, Range, TextEditor } from \"atom\"\nimport type { ProviderRegistry } from \"atom-ide-base/commons-atom/ProviderRegistry\"\nimport type { CallHierarchy, CallHierarchyProvider, CallHierarchyType } from \"atom-ide-base\"\nimport debounce from \"lodash/debounce\"\nimport statuses from \"./statuses.json\"\nimport { getIcon } from \"../utils\"\n\ntype statusKey = keyof typeof statuses\n\n/** HTMLElement for the call-hierarchy tab */\nexport class CallHierarchyView extends HTMLElement {\n #subscriptions = new CompositeDisposable()\n\n /** Subscription to observe editor cursor movement */\n #editorSubscriptions: Disposable | undefined\n\n #providerRegistry: ProviderRegistry\n\n /** Element for outputting results */\n #outputElement: HTMLDivElement\n\n /** Whether to display incoming or outgoing */\n #currentType: CallHierarchyType\n\n /** Time to debounce the timing of display updates */\n #debounceWaitTime = 300\n\n /**\n * Status of currently displayed content\n *\n * - Valid: there is data obtained from the provider\n * - NoEditor: editor not found\n * - NoProvider: provider not found\n * - NoResult: provider returns null or empty array (cursor is above something other than function)\n */\n #status: statusKey | \"valid\" | undefined\n\n /** Whether the tab has already been closed */\n destroyed = false\n\n /** Needed for Atom */\n getTitle = () => \"Call Hierarchy\"\n /** Needed for Atom */\n getIconName = () => \"link\"\n\n /** Determine the type of data to display */\n static getStatus(data: CallHierarchy | statusKey | null | undefined): statusKey | \"valid\" {\n if (typeof data === \"string\") {\n return data\n }\n if (!data || data.data.length === 0) {\n return \"noResult\"\n }\n return \"valid\"\n }\n\n /** Called when the call-hierarchy tab is opened */\n constructor({ providerRegistry }: { providerRegistry: ProviderRegistry }) {\n super()\n this.#providerRegistry = providerRegistry\n const headerElement = this.appendChild(document.createElement(\"div\"))\n headerElement.innerHTML = `\n
    Incoming
    \n
    Outgoing
    \n `\n headerElement.addEventListener(\"click\", () => this.#toggleCurrentType())\n this.#outputElement = this.appendChild(document.createElement(\"div\"))\n this.#currentType = \"incoming\"\n this.setAttribute(\"current-type\", \"incoming\")\n // show call hierarchy when cursor position changes\n const debouncedShowCallHierarchy = debounce(this.showCallHierarchy.bind(this), this.#debounceWaitTime)\n this.#subscriptions.add(\n atom.workspace.observeActiveTextEditor((editor) => {\n this.#editorSubscriptions?.dispose()\n this.#editorSubscriptions = editor?.onDidChangeCursorPosition((event) => {\n debouncedShowCallHierarchy(editor, event.newBufferPosition)\n })\n this.showCallHierarchy(editor)\n })\n )\n }\n\n /** Toogle between incoming and outgoing displays */\n #toggleCurrentType = () => {\n this.#currentType = this.#currentType === \"incoming\" ? \"outgoing\" : \"incoming\"\n this.setAttribute(\"current-type\", this.#currentType)\n this.showCallHierarchy()\n }\n\n /** Show call hierarchy for {editor} and {point} */\n async showCallHierarchy(editor?: TextEditor, point?: Point) {\n if (this.destroyed) {\n return\n }\n const targetEditor = editor ?? atom.workspace.getActiveTextEditor()\n if (!targetEditor) {\n // display a message for when there is no editor\n await this.#updateCallHierarchyView(\"noEditor\")\n return\n }\n const targetPoint = point ?? targetEditor.getCursorBufferPosition()\n const provider = this.#providerRegistry.getProviderForEditor(targetEditor)\n if (!provider) {\n // display a message for when there is no provider\n await this.#updateCallHierarchyView(\"noProvider\")\n return\n }\n // update display with new data\n await this.#updateCallHierarchyView(\n await (this.#currentType === \"incoming\"\n ? provider.getIncomingCallHierarchy(targetEditor, targetPoint)\n : provider.getOutgoingCallHierarchy(targetEditor, targetPoint))\n )\n }\n\n /** Show call hierarchy for {newData} */\n #updateCallHierarchyView = async (newData: CallHierarchy | statusKey | null | undefined) => {\n const prevStatus = this.#status\n const currentStatus = (this.#status = CallHierarchyView.getStatus(newData))\n if (currentStatus === \"valid\") {\n // update display when there is new data\n this.#outputElement.innerHTML = \"\"\n // type of `newData` must be `CallHierarchy` because status is valid\n const item = new CallHierarchyViewItem(newData as CallHierarchy)\n this.#outputElement.appendChild(item)\n // unfold the first hierarchy\n await item.toggleAllItem()\n return\n }\n if (prevStatus === currentStatus) {\n // Do not update if the displayed content does not change\n return\n }\n // update display with new status message when status is noEditor, noProvider or noResult\n this.#outputElement.innerHTML = \"\"\n const item = new CallHierarchyViewStatusItem(statuses[currentStatus])\n this.#outputElement.appendChild(item)\n }\n\n /** Called when the call-hierarchy tab is closed */\n destroy() {\n this.innerHTML = \"\"\n this.#editorSubscriptions?.dispose()\n this.#subscriptions.dispose()\n this.destroyed = true\n }\n}\ncustomElements.define(\"atom-ide-outline-call-hierarchy-view\", CallHierarchyView)\n\n/** HTMLElement for the call-hierarchy item */\nclass CallHierarchyViewItem extends HTMLElement {\n #callHierarchy: CallHierarchy | undefined\n #childCallHierarchies: Promise | undefined>[]\n\n #dblclickWaitTime = 300\n\n /** Whether {callHierarchy} data is undefined or empty array */\n static isEmpty(callHierarchy: CallHierarchy | undefined): callHierarchy is undefined {\n return !callHierarchy || callHierarchy.data.length === 0\n }\n\n constructor(callHierarchy: CallHierarchy) {\n super()\n this.#callHierarchy = callHierarchy\n this.#childCallHierarchies = this.#callHierarchy.data.map((_item, i) => callHierarchy.itemAt(i))\n this.append(\n ...this.#callHierarchy.data.map((item, i) => {\n const itemEl = document.createElement(\"div\")\n itemEl.setAttribute(\"title\", item.path)\n itemEl.innerHTML = `\n
    \n
    \n ${escapeHTML(item.name)}\n ${escapeHTML(item.detail ? ` - ${item.detail}` : \"\")}\n ${item.tags.map((str) => `${escapeHTML(str)}`).join(\"\")}\n
    \n
    \n `\n itemEl\n .querySelector(\":scope>div>div\")\n ?.insertAdjacentElement(\"afterbegin\", getIcon(item.icon ?? undefined, undefined))\n // click to fold or unfold child items\n let isDblclick = false\n itemEl.querySelector(\":scope>div\")?.addEventListener(\n \"click\",\n (e) => {\n e.stopPropagation()\n if (isDblclick && this.#callHierarchy) {\n // double-click to jump to the document\n this.#showDocument(this.#callHierarchy.data[i])\n return\n }\n // single-click to toggle the display of item\n this.toggleItemAt(i)\n // enable double click\n window.setTimeout(() => (isDblclick = false), this.#dblclickWaitTime)\n isDblclick = true\n },\n false\n )\n // enable toggle button if child element can be displayed\n this.#childCallHierarchies[i].then((childCallHierarchy) => {\n if (!CallHierarchyViewItem.isEmpty(childCallHierarchy)) {\n itemEl.classList.add(\"call-hierarchy-exist-child-data\")\n }\n })\n return itemEl\n })\n )\n }\n\n /** Toggle the display of the {i}-th item */\n async toggleItemAt(i: number) {\n const itemEl = this.querySelectorAll(\":scope>div\")[i]\n const titleEl = itemEl.querySelector(\":scope>div\")\n const childEl = itemEl.querySelector>(\"atom-ide-outline-call-hierarchy-item\")\n if (childEl) {\n if (childEl.style.display !== \"none\") {\n // hide if visible\n childEl.style.display = \"none\"\n titleEl?.classList.replace(\"icon-chevron-down\", \"icon-chevron-right\")\n } else {\n // show if hidden\n childEl.style.display = \"\"\n titleEl?.classList.replace(\"icon-chevron-right\", \"icon-chevron-down\")\n }\n } else {\n const childCallHierarchy = await this.#childCallHierarchies[i]\n if (!CallHierarchyViewItem.isEmpty(childCallHierarchy)) {\n // create element if there is no data\n itemEl.appendChild(new CallHierarchyViewItem(childCallHierarchy))\n titleEl?.classList.replace(\"icon-chevron-right\", \"icon-chevron-down\")\n }\n }\n }\n\n /** Toggle the display of all item */\n async toggleAllItem() {\n const dataLen = this.#callHierarchy?.data.length ?? 0\n await Promise.all([...Array(dataLen).keys()].map((i) => this.toggleItemAt(i)))\n }\n\n /** Show document for {range} and {path}, and select {selectionRange} */\n #showDocument = ({\n path,\n range: {\n start: { row, column },\n },\n selectionRange,\n }: {\n path: string\n range: Range\n selectionRange: Range\n }) => {\n const editor = atom.workspace.getActiveTextEditor()\n if (editor?.getPath() === path) {\n editor.setCursorBufferPosition([row, column])\n editor.scrollToBufferPosition([row, column], { center: true })\n editor.setSelectedBufferRange(selectionRange)\n } else {\n atom.workspace\n .open(path, {\n initialLine: row,\n initialColumn: column,\n searchAllPanes: true,\n activatePane: true,\n activateItem: true,\n })\n .then((editor: any) => editor?.setSelectedBufferRange(selectionRange))\n }\n }\n}\ncustomElements.define(\"atom-ide-outline-call-hierarchy-item\", CallHierarchyViewItem)\n\n/** Create a message when there is nothing to display. */\nclass CallHierarchyViewStatusItem extends HTMLElement {\n constructor({ title, description }: { title: string; description: string }) {\n super()\n this.innerHTML = `\n

    ${escapeHTML(title)}

    \n ${escapeHTML(description)}\n `\n }\n}\ncustomElements.define(\"atom-ide-outline-call-hierarchy-status-item\", CallHierarchyViewStatusItem)\n\nfunction escapeHTML(str: string): string {\n return str.replace(\n /[\"&'<>`]/g,\n (match) =>\n ({\n \"&\": \"&\",\n \"'\": \"'\",\n \"`\": \"`\",\n '\"': \""\",\n \"<\": \"<\",\n \">\": \">\",\n }[match] as string)\n )\n}\n","import type { Pane } from \"atom\"\n\n/** Handles the operation of opening and closing tabs. */\nexport class TabHandler {\n /** Returns the dock where the tab should be created. */\n static #getDefaultDock() {\n // If want to change the location of the new tab, change the code here.\n return atom.workspace.getRightDock()\n }\n /** It is possible that the tab does not exist even if the item is not undefined, as the tab may be closed manually. */\n item: T | undefined\n #createItem: () => T\n constructor({\n createItem,\n }: {\n /** Function called when creating a tab. Should return the pane item you want to add to the tab. */\n createItem: () => T\n }) {\n this.#createItem = createItem\n }\n /**\n * Toggle the tab. If the tab exists, it will be deleted. If the tab is open but hidden, the tab will be brought to\n * the front. If the tab does not exist, it will be created.\n */\n toggle() {\n const { state, targetPane } = this.#getState()\n if (state === \"hidden\") {\n this.#display({ targetPane })\n } else if (state === \"noItem\") {\n this.#create({ targetPane })\n } else {\n this.#destroy({ targetPane })\n }\n }\n /**\n * Show the tab. If the tab is open but hidden, the tab will be brought to the front. If the tab does not exist, it\n * will be created.\n */\n show() {\n const { state, targetPane } = this.#getState()\n if (state === \"hidden\") {\n this.#display({ targetPane })\n } else if (state === \"noItem\") {\n this.#create({ targetPane })\n }\n }\n /** Delete the tab. If the tab exists, it will be deleted. */\n delete() {\n const targetPane = this.item && atom.workspace.paneForItem(this.item)\n if (targetPane) {\n this.#destroy({ targetPane })\n }\n }\n /** Display the hidden tab at target pane. */\n #display({ targetPane }: { targetPane: Pane }) {\n if (this.item) {\n targetPane.activateItem(this.item)\n }\n const dock = atom.workspace.getPaneContainers().find((v) => v.getPanes().includes(targetPane))\n if (dock && \"show\" in dock) {\n dock.show()\n }\n }\n /** Create the new tab at target pane. */\n #create({ targetPane }: { targetPane: Pane }) {\n this.item = this.#createItem()\n targetPane.addItem(this.item)\n targetPane.activateItem(this.item)\n TabHandler.#getDefaultDock().show()\n }\n /** Destroy the tab from target pane. */\n #destroy({ targetPane }: { targetPane: Pane }) {\n if (this.item) {\n targetPane.destroyItem(this.item)\n }\n }\n /** Get the state of the tab. */\n #getState() {\n const pane = this.item && atom.workspace.paneForItem(this.item)\n if (pane) {\n if (\n pane.getActiveItem() === this.item &&\n // @ts-ignore (getVisiblePanes is not includes typedef)\n atom.workspace.getVisiblePanes().includes(pane)\n ) {\n return { state: \"visible\", targetPane: pane } as const\n } else {\n return { state: \"hidden\", targetPane: pane } as const\n }\n } else {\n return {\n state: \"noItem\",\n targetPane: TabHandler.#getDefaultDock().getActivePane(),\n } as const\n }\n }\n}\n","import { CompositeDisposable } from \"atom\"\nimport type { Disposable } from \"atom\"\nimport { ProviderRegistry } from \"atom-ide-base/commons-atom/ProviderRegistry\"\nimport type { CallHierarchyProvider } from \"atom-ide-base\"\n\nimport { CallHierarchyView } from \"./call-hierarchy-view\"\nimport { TabHandler } from \"./tab-handler\"\n\nconst providerRegistry = new ProviderRegistry()\nconst subscriptions = new CompositeDisposable()\nconst callHierarchyTab = new TabHandler({\n createItem: () => new CallHierarchyView({ providerRegistry }),\n})\n\nexport function activate() {\n subscriptions.add(\n atom.commands.add(\"atom-workspace\", \"outline:toggle-call-hierarchy\", () => callHierarchyTab.toggle()),\n atom.commands.add(\"atom-workspace\", \"outline:show-call-hierarchy\", () => callHierarchyTab.show())\n )\n}\n\nexport function deactivate() {\n subscriptions.dispose()\n callHierarchyTab.delete()\n}\n\nexport function consumeCallHierarchyProvider(provider: CallHierarchyProvider): Disposable {\n const providerDisposer = providerRegistry.addProvider(provider)\n subscriptions.add(providerDisposer)\n callHierarchyTab.item?.showCallHierarchy()\n return providerDisposer\n}\n","import { CompositeDisposable, TextEditor } from \"atom\"\nimport type { Disposable } from \"atom\"\nimport { OutlineView } from \"./outlineView\"\nimport type { OutlineProvider } from \"atom-ide-base\"\nimport { ProviderRegistry } from \"atom-ide-base/commons-atom/ProviderRegistry\"\nimport { notifyError, largeness as editorLargeness } from \"atom-ide-base/commons-atom\"\nimport { isItemVisible } from \"atom-ide-base/commons-ui/items\"\n\nexport { statuses } from \"./statuses\" // for spec\nimport { statuses } from \"./statuses\"\nimport debounce from \"lodash/debounce\"\n\nexport { consumeCallHierarchyProvider } from \"./call-hierarchy/main\"\nimport * as CallHierarchy from \"./call-hierarchy/main\"\n\nconst subscriptions = new CompositeDisposable()\n\nlet view: OutlineView | undefined\nexport const outlineProviderRegistry = new ProviderRegistry()\n\n// let busySignalProvider: BusySignalProvider | undefined // service might be consumed late\n\nexport function activate() {\n CallHierarchy.activate()\n addCommands()\n addObservers()\n if (atom.config.get(\"atom-ide-outline.initialDisplay\") as boolean) {\n // initially show outline pane\n toggleOutlineView().catch((e: Error) => {\n notifyError(e)\n })\n }\n}\n\nfunction addCommands() {\n subscriptions.add(\n /* outlineToggle */ atom.commands.add(\"atom-workspace\", \"outline:toggle\", toggleOutlineView),\n /* revealCursor */ atom.commands.add(\"atom-workspace\", \"outline:reveal-cursor\", revealCursor)\n )\n}\n\nfunction addObservers() {\n // if the active text editor changed (switched to another editor), then call editorChanged function\n subscriptions.add(atom.workspace.onDidChangeActiveTextEditor(editorChanged))\n}\n\nexport function deactivate() {\n CallHierarchy.deactivate()\n onEditorChangedDisposable?.dispose()\n subscriptions.dispose()\n view?.destroy()\n view = undefined\n}\n\n// export function consumeSignal(registry: BusySignalRegistry) {\n// busySignalProvider = registry.create()\n// subscriptions.add(busySignalProvider)\n// }\n\nexport function consumeOutlineProvider(provider: OutlineProvider): Disposable {\n const prividerDisposable = outlineProviderRegistry.addProvider(provider)\n subscriptions.add(/* providerRegistryEntry */ prividerDisposable)\n\n // NOTE Generate (try) an outline after obtaining a provider for the current active editor\n // this initial outline is always rendered no matter if it is visible or not,\n // this is because we can't track if the outline tab becomes visible suddenly later,\n // or if the editor changes later once outline is visible\n // so we need to have an outline for the current editor\n // the following updates rely on the visibility\n getOutline().catch((err) => {\n throw err\n })\n return prividerDisposable\n}\n\n// disposables returned inside onEditorChangedDisposable\nlet onEditorChangedDisposable: CompositeDisposable | undefined = undefined\n\n/**\n * How long to wait for the new changes before updating the outline. A high number will increase the responsiveness of\n * the text editor in large files.\n */\nfunction getDebounceTime(editor: TextEditor) {\n const largeness = editorLargeness(editor)\n return Math.max(largeness / 4, 300) // 1/4 of the line count\n}\n\nasync function editorChanged(editor?: TextEditor) {\n if (editor === undefined) {\n return\n }\n // dispose the old subscriptions\n onEditorChangedDisposable?.dispose()\n onEditorChangedDisposable = new CompositeDisposable() // we can't reuse the CompositeDisposable!\n\n // NOTE initial outline is always rendered no matter if it is visible or not,\n // this is because we can't track if the outline tab becomes visible suddenly,\n // so we always need to show the outline for the correct file\n // the following updates rely on the visibility\n await getOutline(editor)\n\n const updateDebounceTime = getDebounceTime(editor)\n\n const doubouncedGetOutline = debounce(\n getOutlintIfVisible as (textEditor: TextEditor) => Promise,\n updateDebounceTime\n )\n\n onEditorChangedDisposable.add(\n // update the outline if editor stops changing\n editor.onDidStopChanging(async () => {\n await doubouncedGetOutline(editor)\n }),\n\n // clean up if the editor editor is closed\n editor.onDidDestroy(() => {\n setStatus(\"noEditor\")\n })\n )\n}\n\nexport function revealCursor() {\n const editor = atom.workspace.getActiveTextEditor()\n if (editor === undefined) {\n return\n }\n\n // following cursor disposable\n if (view !== undefined) {\n view.selectAtCursorLine(editor)\n }\n}\n\nexport async function toggleOutlineView() {\n if (view === undefined) {\n view = new OutlineView() // create outline pane\n }\n const outlinePane = atom.workspace.paneForItem(view)\n if (outlinePane) {\n await outlinePane.destroyItem(view)\n return\n }\n\n const rightDock = atom.workspace.getRightDock()\n const [pane] = rightDock.getPanes()\n\n pane.addItem(view)\n pane.activateItem(view)\n\n rightDock.show()\n\n // Trigger an editor change whenever an outline is toggeled.\n try {\n await editorChanged(atom.workspace.getActiveTextEditor())\n } catch (e) {\n notifyError(e as Error)\n }\n}\n\nfunction getOutlintIfVisible(editor = atom.workspace.getActiveTextEditor()) {\n // if outline is not visible return\n if (!isItemVisible(view)) {\n return\n }\n return getOutline(editor)\n}\n\nexport async function getOutline(editor = atom.workspace.getActiveTextEditor()) {\n if (view === undefined) {\n view = new OutlineView() // create outline pane\n } else {\n view.reset()\n }\n // editor\n if (editor === undefined) {\n return setStatus(\"noEditor\")\n }\n\n // provider\n const provider = outlineProviderRegistry.getProviderForEditor(editor)\n\n if (!provider) {\n return setStatus(\"noProvider\")\n }\n\n // const busySignalID = `Outline: ${editor.getPath()}`\n // busySignalProvider?.add(busySignalID)\n\n const outline = await provider.getOutline(editor)\n view.setOutline(outline?.outlineTrees ?? [], editor, Boolean(editorLargeness(editor as TextEditor)))\n\n // busySignalProvider?.remove(busySignalID)\n}\n\nexport function setStatus(id: \"noEditor\" | \"noProvider\" | \"noResult\") {\n view?.presentStatus(statuses[id])\n}\n\nexport { default as config } from \"./config.json\"\n"],"names":["el","alignToTop","scrollTops","getScrollTops","scrollIntoView","restoreOverflowHiddenScrollTops","center","scrollIntoViewIfNeeded","el_","Map","set","scrollTop","parentElement","forEach","isOverflowHidden","overflowStyle","style","overflow","getComputedStyle","item","element","getItemElement","undefined","isElementVisible","paneContainer","atom","workspace","paneContainerForItem","isVisible","HTMLElement","display","hidden","offsetHeight","getElement","HAS_WEAKSET_SUPPORT","WeakSet","keys","Object","sameValueZeroEqual","a","b","isPlainObject","value","constructor","isPromiseLike","then","isReactElement","$$typeof","getNewCacheFallback","values","add","push","has","indexOf","getNewCache","createCircularEqualCreator","isEqual","comparator","_comparator","cache","isCacheableA","isCacheableB","hasA","hasB","hasOwnProperty","Function","prototype","bind","call","areObjectsEqual","meta","keysA","index","length","key","reactElementA","reactElementB","HAS_MAP_SUPPORT","HAS_SET_SUPPORT","Set","createComparator","createIsEqual","aShape","Array","isArray","bShape","areArraysEqual","Date","getTime","RegExp","source","global","ignoreCase","multiline","unicode","sticky","lastIndex","areRegExpsEqual","isValueEqual","size","aValue","aKey","bValue","bKey","areMapsEqual","areSetsEqual","deepEqual","getIcon","iconType","kindTypeGiven","kindType","iconElement","document","createElement","classList","type","kindClass","replace","innerHTML","substring","OutlineView","this","TreeFilterer","appendChild","toolbar","className","revealCursorButton","addEventListener","commands","dispatch","views","getView","showCallHierarchyButton","makeOutlineToolbar","createSearchBar","outlineContent","reset","searchBarEditorDisposable","dispose","selectCursorDisposable","searchBarEditor","setText","destroy","remove","getTitle","getIconName","setOutline","outlineTree","editor","isLarge","lastEntries","hasEqualContent","pointToElementsMap","clear","addEntriesOnClick","outlineList","createOutlineList","clearContent","largeFileElement","createLargeFileElement","updateSearchBar","dataset","editorRootScope","firstOutlineTree","dataKey","representativeName","treeFilterer","setCandidates","onDidStopChanging","filterOutlineTree","TextEditor","mini","placeholderText","searchBar","renderLastOutlienList","isAlive","isItemVisible","text","getText","query","trim","filterResults","filter","maxResults","usePathScoring","err","error","message","console","candidates","filteredTree","array","elm2","findIndex","elm1","setStatus","filteredOutlineList","presentStatus","status","statusElement","title","description","generateStatusElement","selectAtCursorLine","cursor","getLastCursor","clicked","focusedElms","elm","toggleAttribute","cursorPoint","getBufferRow","get","points","previousPoint","point","previousElms","currentElms","onDidChangeCursorPosition","focus","getRootScopeDescriptor","getScopesArray","join","tabLength","getTabLength","setProperty","Math","max","toString","addOutlineEntries","config","ot1","ot2","ot1Len","iEntry","e1","e2","plainText","kind","icon","children","hasChildren","entry","parent","entries","level","sort","rowCompare","startPosition","row","column","sortEntries","symbol","labelElement","innerText","prepend","childrenList","event","stopPropagation","passive","foldButton","createFoldButton","entriesElements","len","onClickEntry","addToPointToElementsMap","lastElementChild","pointStartPositionRow","elms","itemStartPosition","editorPane","paneForItem","activate","getCursors","setBufferPosition","autoscroll","foldInitially","ProviderRegistry_2","providers","addProvider","provider","p","priority","splice","atom_1","removeProvider","getProviderForEditor","grammar","getGrammar","scopeName","findProvider","getAllProvidersForEditor","findAllProviders","grammarScopes","statAsync","util_1","fs_1","async","target","cwd","previousActiveItem","getActivePaneItem","getPath","dir","project","relativizePath","isDirectory","path_1","getPaths","wordAtPosition","position","wordRegex","wordRegex_","escaped","getNonWordCharacters","r","includeNonWordCharacters","wordAtPositionFromBuffer","getBuffer","getSingleWordAtPosition","match","wordMatch","buffer","rowRange","rangeForRow","matchData","scanInRange","data","range","start","isLessThanOrEqual","end","isGreaterThan","stop","rangeToTrim","stopRegex","backwardsScanInRange","component","assert_1","screenPositionForMouseEvent","selection","getSelectedText","getCursorScreenPosition","endPosition","regex","line","getTextInRange","exec","some","containsPoint","e","notifications","addError","name","stack","detail","lineCountIfLarge","threashold","largeFileMode","lineCount","getLineCount","lineLengthIfLong","i","lineLength","lineLengthForRow","largeLineCount","longLineLength","longLine","__exportStar","statuses","noEditor","noProvider","noResult","isObject_1","freeGlobal","freeSelf","self","root","now_1","now","reWhitespace","trimmedEndIndex","string","test","charAt","reTrimStart","_baseTrim","slice","_Symbol","Symbol","require$$0","objectProto","nativeObjectToString","symToStringTag","toStringTag","_getRawTag","isOwn","tag","unmasked","result","getRawTag","require$$1","objectToString","baseGetTag","isObjectLike","baseTrim","isObject","isSymbol","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","toNumber","other","valueOf","isBinary","nativeMax","nativeMin","min","debounce_1","func","wait","options","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","apply","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","arguments","clearTimeout","cancel","flush","__classPrivateFieldGet","receiver","state","f","__classPrivateFieldSet","CallHierarchyView","providerRegistry","super","_CallHierarchyView_subscriptions","CompositeDisposable","_CallHierarchyView_editorSubscriptions","_CallHierarchyView_providerRegistry","_CallHierarchyView_outputElement","_CallHierarchyView_currentType","_CallHierarchyView_debounceWaitTime","_CallHierarchyView_status","_CallHierarchyView_toggleCurrentType","setAttribute","showCallHierarchy","_CallHierarchyView_updateCallHierarchyView","newData","prevStatus","currentStatus","getStatus","CallHierarchyViewItem","toggleAllItem","CallHierarchyViewStatusItem","headerElement","debouncedShowCallHierarchy","debounce","observeActiveTextEditor","newBufferPosition","destroyed","targetEditor","getActiveTextEditor","targetPoint","getCursorBufferPosition","getIncomingCallHierarchy","getOutgoingCallHierarchy","customElements","define","callHierarchy","_CallHierarchyViewItem_callHierarchy","_CallHierarchyViewItem_childCallHierarchies","_CallHierarchyViewItem_dblclickWaitTime","_CallHierarchyViewItem_showDocument","path","selectionRange","setCursorBufferPosition","scrollToBufferPosition","setSelectedBufferRange","open","initialLine","initialColumn","searchAllPanes","activatePane","activateItem","map","_item","itemAt","append","itemEl","escapeHTML","tags","str","querySelector","insertAdjacentElement","isDblclick","toggleItemAt","window","childCallHierarchy","isEmpty","querySelectorAll","titleEl","childEl","dataLen","Promise","all","TabHandler","createItem","_TabHandler_createItem","toggle","targetPane","show","delete","getRightDock","dock","getPaneContainers","find","v","getPanes","includes","addItem","destroyItem","pane","getActiveItem","getVisiblePanes","getActivePane","ProviderRegistry","subscriptions","callHierarchyTab","view","outlineProviderRegistry","onEditorChangedDisposable","editorChanged","getOutline","updateDebounceTime","largeness","editorLargeness","getDebounceTime","doubouncedGetOutline","getOutlintIfVisible","onDidDestroy","revealCursor","toggleOutlineView","outlinePane","rightDock","notifyError","outline","outlineTrees","Boolean","id","onDidChangeActiveTextEditor","catch","providerDisposer","prividerDisposable"],"mappings":"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"} \ No newline at end of file diff --git a/dist/tsconfig.tsbuildinfo b/dist/tsconfig.tsbuildinfo index 90c959d..c28d242 100644 --- a/dist/tsconfig.tsbuildinfo +++ b/dist/tsconfig.tsbuildinfo @@ -1 +1 @@ -{"program":{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.esnext.intl.d.ts","../node_modules/tslib/tslib.d.ts","../node_modules/@types/node/assert/strict.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/dns/promises.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/stream/promises.d.ts","../node_modules/@types/node/stream/web.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/timers/promises.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/globals.global.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/ts3.6/base.d.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/base.d.ts","../node_modules/@types/node/index.d.ts","../node_modules/@types/atom/src/atom-environment.d.ts","../node_modules/@types/atom/src/text-editor-element.d.ts","../node_modules/@types/atom/dependencies/event-kit/index.d.ts","../node_modules/@types/atom/dependencies/first-mate/src/grammar.d.ts","../node_modules/@types/atom/dependencies/first-mate/src/first-mate.d.ts","../node_modules/@types/atom/dependencies/first-mate/index.d.ts","../node_modules/@types/atom/dependencies/pathwatcher/src/file.d.ts","../node_modules/@types/atom/dependencies/pathwatcher/src/directory.d.ts","../node_modules/@types/atom/dependencies/pathwatcher/src/main.d.ts","../node_modules/@types/atom/dependencies/pathwatcher/index.d.ts","../node_modules/@types/atom/dependencies/text-buffer/src/display-marker.d.ts","../node_modules/@types/atom/dependencies/text-buffer/src/display-marker-layer.d.ts","../node_modules/@types/atom/dependencies/text-buffer/src/helpers.d.ts","../node_modules/@types/atom/dependencies/text-buffer/src/marker.d.ts","../node_modules/@types/atom/dependencies/text-buffer/src/marker-layer.d.ts","../node_modules/@types/atom/dependencies/text-buffer/src/point.d.ts","../node_modules/@types/atom/dependencies/text-buffer/src/range.d.ts","../node_modules/@types/atom/dependencies/text-buffer/src/text-buffer.d.ts","../node_modules/@types/atom/dependencies/text-buffer/index.d.ts","../node_modules/@types/atom/src/buffered-node-process.d.ts","../node_modules/@types/atom/src/buffered-process.d.ts","../node_modules/@types/atom/src/clipboard.d.ts","../node_modules/@types/atom/src/color.d.ts","../node_modules/@types/atom/src/command-registry.d.ts","../node_modules/@types/atom/src/config.d.ts","../node_modules/@types/atom/src/config-schema.d.ts","../node_modules/@types/atom/src/context-menu-manager.d.ts","../node_modules/@types/atom/src/cursor.d.ts","../node_modules/@types/atom/src/decoration.d.ts","../node_modules/@types/atom/src/deserializer-manager.d.ts","../node_modules/@types/atom/src/dock.d.ts","../node_modules/@types/atom/src/get-window-load-settings.d.ts","../node_modules/@types/atom/src/git-repository.d.ts","../node_modules/@types/atom/src/grammar-registry.d.ts","../node_modules/@types/atom/src/gutter.d.ts","../node_modules/@types/atom/src/history-manager.d.ts","../node_modules/@types/atom/src/keymap-extensions.d.ts","../node_modules/@types/atom/src/layer-decoration.d.ts","../node_modules/@types/atom/src/menu-manager.d.ts","../node_modules/@types/atom/src/notification.d.ts","../node_modules/@types/atom/src/notification-manager.d.ts","../node_modules/@types/atom/src/other-types.d.ts","../node_modules/@types/atom/src/package.d.ts","../node_modules/@types/atom/src/package-manager.d.ts","../node_modules/@types/atom/src/pane.d.ts","../node_modules/@types/atom/src/panel.d.ts","../node_modules/@types/atom/src/path-watcher.d.ts","../node_modules/@types/atom/src/project.d.ts","../node_modules/@types/atom/src/scope-descriptor.d.ts","../node_modules/@types/atom/src/selection.d.ts","../node_modules/@types/atom/src/style-manager.d.ts","../node_modules/@types/atom/src/task.d.ts","../node_modules/@types/atom/src/text-editor.d.ts","../node_modules/@types/atom/src/text-editor-component.d.ts","../node_modules/@types/atom/src/text-editor-registry.d.ts","../node_modules/@types/atom/src/theme-manager.d.ts","../node_modules/@types/atom/src/tooltip.d.ts","../node_modules/@types/atom/src/tooltip-manager.d.ts","../node_modules/@types/atom/src/view-registry.d.ts","../node_modules/@types/atom/src/workspace.d.ts","../node_modules/@types/atom/src/workspace-center.d.ts","../node_modules/@types/atom/index.d.ts","../node_modules/atom-ide-base/types-packages/uri.d.ts","../node_modules/atom-ide-base/types-packages/busy-signal.d.ts","../node_modules/atom-ide-base/types-packages/call-hierarchy.d.ts","../node_modules/@types/atom/linter/config.d.ts","../node_modules/@types/atom/linter/index.d.ts","../node_modules/atom-ide-base/types-packages/code-actions.d.ts","../node_modules/atom-ide-base/types-packages/code-highlight.d.ts","../node_modules/atom-ide-base/types-packages/datatip.d.ts","../node_modules/atom-ide-base/types-packages/definitions.d.ts","../node_modules/atom-ide-base/types-packages/find-references.d.ts","../node_modules/atom-ide-base/types-packages/hyperclick.d.ts","../node_modules/atom-ide-base/types-packages/outline.d.ts","../node_modules/atom-ide-base/types-packages/sig-help.d.ts","../node_modules/@types/trusted-types/lib/index.d.ts","../node_modules/@types/trusted-types/index.d.ts","../node_modules/@types/dompurify/index.d.ts","../node_modules/atom-ide-base/types-packages/markdown-service.d.ts","../node_modules/atom-ide-base/types-packages/text-edit.d.ts","../node_modules/atom-ide-base/types-packages/code-format.d.ts","../node_modules/atom-ide-base/types-packages/refactor.d.ts","../node_modules/atom-ide-base/types-packages/console.d.ts","../node_modules/atom-ide-base/types-packages/main.d.ts","../node_modules/atom-ide-base/commons-ui/scrollintoview.d.ts","../node_modules/atom-ide-base/commons-ui/items.d.ts","../node_modules/zadeh/binding.d.ts","../node_modules/zadeh/index.d.ts","../node_modules/fast-equals/index.d.ts","../src/utils.ts","../src/outlineview.ts","../node_modules/atom-ide-base/commons-atom/providerregistry.d.ts","../node_modules/atom-ide-base/commons-atom/getcwd.d.ts","../node_modules/atom-ide-base/commons-atom/range.d.ts","../node_modules/atom-ide-base/commons-atom/errors.d.ts","../node_modules/atom-ide-base/commons-atom/editor-largeness.d.ts","../node_modules/atom-ide-base/commons-atom/index.d.ts","../src/statuses.ts","../node_modules/@types/lodash/common/common.d.ts","../node_modules/@types/lodash/common/array.d.ts","../node_modules/@types/lodash/common/collection.d.ts","../node_modules/@types/lodash/common/date.d.ts","../node_modules/@types/lodash/common/function.d.ts","../node_modules/@types/lodash/common/lang.d.ts","../node_modules/@types/lodash/common/math.d.ts","../node_modules/@types/lodash/common/number.d.ts","../node_modules/@types/lodash/common/object.d.ts","../node_modules/@types/lodash/common/seq.d.ts","../node_modules/@types/lodash/common/string.d.ts","../node_modules/@types/lodash/common/util.d.ts","../node_modules/@types/lodash/index.d.ts","../node_modules/@types/lodash/debounce.d.ts","../src/call-hierarchy/statuses.json","../src/call-hierarchy/call-hierarchy-view.ts","../src/call-hierarchy/tab-handler.ts","../src/call-hierarchy/main.ts","../src/config.json","../src/main.ts","../node_modules/@types/estree/index.d.ts","../node_modules/@types/jasmine/index.d.ts","../node_modules/@types/json-schema/index.d.ts","../node_modules/@types/unist/index.d.ts","../node_modules/@types/mdast/index.d.ts","../node_modules/@types/prop-types/index.d.ts","../node_modules/@types/react/global.d.ts","../node_modules/csstype/index.d.ts","../node_modules/@types/scheduler/tracing.d.ts","../node_modules/@types/react/index.d.ts","../node_modules/@types/react-dom/index.d.ts","../node_modules/@types/resolve/index.d.ts","../node_modules/@types/scheduler/index.d.ts"],"fileInfos":[{"version":"ac3a8c4040e183ce38da69d23b96939112457d1936198e6542672b7963cf0fce","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84","e21c071ca3e1b4a815d5f04a7475adcaeea5d64367e840dd0154096d705c3940",{"version":"1dad4fe1561d99dfd6709127608b99a76e5c2643626c800434f99c48038567ee","affectsGlobalScope":true},{"version":"cce43d02223f8049864f8568bed322c39424013275cd3bcc3f51492d8b546cb3","affectsGlobalScope":true},{"version":"43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"8dff1b4c2df638fcd976cbb0e636f23ab5968e836cd45084cc31d47d1ab19c49","affectsGlobalScope":true},{"version":"2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c","affectsGlobalScope":true},{"version":"810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357","affectsGlobalScope":true},{"version":"62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"8f4c9f651c8294a2eb1cbd12581fe25bfb901ab1d474bb93cd38c7e2f4be7a30","affectsGlobalScope":true},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true},{"version":"df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e","affectsGlobalScope":true},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true},{"version":"93544ca2f26a48716c1b6c5091842cad63129daac422dfa4bc52460465f22bb1","affectsGlobalScope":true},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true},{"version":"60761e6ea886034af0f294f025a7199360ce4e2c8ba4ec6408bc049cf9b89799","affectsGlobalScope":true},{"version":"7435b75fdf3509622e79622dbe5091cf4b09688410ee2034e4fc17d0c99d0862","affectsGlobalScope":true},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true},{"version":"9f1817f7c3f02f6d56e0f403b927e90bb133f371dcebc36fa7d6d208ef6899da","affectsGlobalScope":true},{"version":"506b80b9951c9381dc5f11897b31fca5e2a65731d96ddefa19687fbc26b23c6e","affectsGlobalScope":true},"12f4cfe2fe60b810c3174537bc2ddb20c1067b7768643d12cb1266fd183afb75","a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a",{"version":"34f1d0e1f63dd8c0bdc1fd15ec2b7216fd709953781c4d1b1213d88e2d94db9e","affectsGlobalScope":true},"d1bafabb4767ac0a190e4d4d7c4dff4f9d7055466ac4d774af34efb27811bb6c",{"version":"ce5270abab18511c259ec82382227487e7ff2ea16e8dea3b4416581f3a7f88e0","affectsGlobalScope":true},"7486ee90b2e62b940d9edef73837958f951eaaad63d7ec303925ea58b215dcca","03b2024e896feeece8128c631b00ee0a1887a79443fbb2d763d95c92f2044e84",{"version":"a47c6b92116319e589051b179ed7ca191e8c042f9afc5fc43619c2c260215efb","affectsGlobalScope":true},"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","edaf4d6b971fdac4d5c31e12f97790f2f91d38819eb56b960f1c30da56f1de38","582dd8aeb80e0a169550f0daf3880e101d9ecc23f2ec095d7e8e37a3b80d3cc0","47a33d6ebbe0199a47db627398b291bd8dcf8ce2f27f91cd3df3d8e759edcb6c","2eb6fbe547439103affc499164883deb377e60c84525b54ffd78db51c29f052d","87c064559d14068edb2861fc7d48c1a8196a63523e00cc29aadd57c0eefb24a5","508a8c437c9cf207fa7aca0303a849d11d5a90853970d43264854491eb8cfa26",{"version":"8b25e47c403b448ebac1ca804afe109100186fd60ee41d033f730cdb43b2bb57","affectsGlobalScope":true},"9a2b4da38d194b756b4785e85b1fff4ab3f9f0304333398a6a26d8de0c4304cf","8cf85781910aaa54ecd1de6655b589891391b89b2e383b525035d556bb20dd2e","d897ce0f159ff9f9fd6451ba10f0a25a62336964b8b6227a54b8dc28bdc7d2d0","c578cd6aa88038957958e8d35857d479d74284759a7ca003920c91f89f0ba71c","bfe39c74035daf5b7593dc9e089e3b1ec3428bf5600e20d9c8d6085af79639b3","2b8554190ae9ee7b2be794711f8c6629ec78ddb8d21b869f6e24a30b6a1f0958",{"version":"e8b18c6385ff784228a6f369694fcf1a6b475355ba89090a88de13587a9391d5","affectsGlobalScope":true},"1104b24afd816918709a5f08e2e6a24498f459cc741fab5ccf05be2169af1eb3","b0f8ec7d96c5df8e97ab6758bed4044fa5b0ba1563a90b0a4749669815320471","3b9d2c91a548efb80be4c5dc47bcc6e1dce1bcc03c3469efb6ef4c8891ff20c9","a5f13cd83578fc3e20d65f952ec5e84eef5c0c6d5df968b7e01f48869fcbbd0c",{"version":"271e12e5d6fd168a699171c84e70509408b0958b2d80791001e9a2cac6f556ca","affectsGlobalScope":true},"58182900ef4f9fe3c477334e730718f2ef14f73ce7f1136271d995f062410410","dd809c6de4574d8ef11a60a9a1070bbdc78809f022a6cac5d1404e3b2ba504a1","1a559b56db1ba6b3efc9f30ae5f9674388ce9d00593d7fef4b4aea5439fb829b","3f679d89f7c6fc6439f31e5614170fb75829b3504e30212b1664d9954adbb4a4","02e3f0ced700282b3d389ff34cecfa53f6ae20f83825f4064bed32a203c57c4f","1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff","efa24f44a287d163f163029273ba52fb206ef5e4c853d1a47f331f72d566db3c","6cc926ccc014db70a4be83fc0cce6e7ec43e297ee08ab8ab1703d14247bd4746",{"version":"d6ba1d94bbebc6f71e352cc1ab3efb9fb6a68cab44a5782d8e10bbb391655a9d","affectsGlobalScope":true},"664d8f2d59164f2e08c543981453893bc7e003e4dfd29651ce09db13e9457980","cc8b915c22d08375a19c3825965322282033235ec75b783d3234c806fe73d4b4","3b344022f4ba3cb748958573c44ba8c9fb8d4dbb23b676ebb91cf27fe0b504d4","913fe6877d073d1e169436796c5ddffda0270c55fa9d8a821d22adccbb17994c","096fec092cac14358a5520cd053cb094c23161b53fa4cd43a4a8a75f04729fbe","b87862ec84c6dae4b4bd90cc75aae95aec715947d45029c3bff70c4267e7a3e2","1b0941babfcef70474324ee4606639cac0d716eff7ca617254e50a58995866cf","bac51a0f14622bcbc78debfc5c47b13c28e027401c366798750c25d8d1f7bde9","7378e9f4d247d74c5095d8c146bc611f3d984b72dd25f79087726d8758e634f2","d9ed99601d6fde94b2d5c95165ff8c536523ad95ec9d0ea09d4c4c8bf766812d",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"0212c8455b24725df00eabb6711de9b4731db0499f2d6350468a37a7574f95c0","359745bfbc578a51b1143fc7c49159f6068acf121017982519b88b04f27ea66a","90b0e4b6e7a63eae42717c44a257ce190c43b1be8b26d8927f37ef464cf829c8","35549c9daefc577a6d80bac1c1543b3588804fdda82cb1cf7b5293ca65b4dce4","4f92917486836e30ec8c18667035e7bf15d16fcd5ab2748296994f54a3ae359b","2b898bb5b99899af6de62cd5b3cf5be9ed2668eb94974dbdb402458e80c27edd","d2104c54b34158356c4c17dd37c7dd29e1c7dc4c77d9077e921f37d0b0f5cb87","8989b83d1d34dc4ef1100cbcc0f983f69d63118aeca3de5947e1c431ccd21ccc","35c935b77ca1da8fbf901931e0d8f25bff1cdedc9cbc01d98180cb496c445c21","3d1ffbc8fc8790ce6eef1e4ce1e79bfd5e9d0bc7d4f7cac0e95c54a7e1141875","128307a9785a229de861f811864e872ccc7b98da7953f6a67168addf64164fae","79d8197c490b07c732957dfc053b0a1bceaeba6cca9d3de6ce784d6b949fca4b","a49b47dfb004f10f3b23bb790de0c74667dfd053f7eda02ac831c351c7875498","5af3737dddb6e952a498672892404be1105ec2751b09467fbb5fd4b95efbd99b","9a1aef5196a946220a7ef874a7bc7424efef78d23ba8ff20df281b36ef62837a","29dd86bbc67e36427086391040eac56c43aff45b34687f4d4e39a9d3e9f2d87b","00b7ef8d8dae6570963d4f3e3027a27bda0d61285ced3ab3c81136c8899b6224","05d99f695e6424963c16f8a990e2fd0b703a8079baa1445ef2915fe525efc85b","ab77be6fc48fb908db04f842e47d944176ac3cc76020c15f382738bd437eed90","575c279d939c1c61b48798fbd747c80871dc3d4c18fcfcdb9924a950ff67cb88","88d9da0dab92c994d171a7999ca48974be8f99c041622a78d0b1f3ff27588fc1","dc172eb5106eefa395d091bdb0d8b1963a86aae82a6a7192c1910e7f11083ccd","79e09e77f7f0e0283ca443ba0eb14243a8a654cb25db6c5250caf4d840cca6ad","2cb11a971470a03e828df7520b3153e514bfc5065597d0690a0439f7a5e4284a","839f9c729f3bfd673257683bb86879ba1c3f8b41f01c2a6a33295ebf14927ab5","ef9084c118d3a104aebed6b88b07149fa5a491652a9ff90d52140cda9f7b317e","4d74b98b593856085848bde7d83f400ad2fe5a2c36ac9dfe863f96ac206ae55d","27656836bf9547d24ed317c044fe1a3feeb58aff8433ba7813d50e8f69088034","e43548a7d9030b2986c73fca5260a49e9246663148eec940c6440772c80da7ba","cdd0d39a4cb0a5adb8e38f542603e3db4bd0ccfde5c69996dd50c9b9a94cd453","a204b31c3672914ff68bb20bfdaae933bf7f8f943687c371b0fd32a3482fc5d4","f152d699e59e304c05779b97a5f518ba9abb8bd24c0b424802bf02b62c919b0f","269c4bd8cb3780736254bb151db215ef3a65af93a900ca3af00cb9b1d8c346b9","be2d0f15d3277a1dd83829a07610da07d4ba584ece64b7292b27f90ab704a7c8","ef048a1d0f1a5f33453b2481987a0f5011e158b757fe4f4def16a2a31efd4623","0534a685ecb1022ec62f19fe7252137f652dde0d86404723e021ed714d44c442","86e61b70ff3e5019f9c85b63a56e8160f9fa712e0e7fe7b4cb7c88f0384ab76a","346bbbe2467175e499c5b1aaa5f665092612ce4a49c2bdc74495e912edc15bbe","429c0ccb47f85fab9f0096859a31f2bc20e2b8a814022cd71f6e5cc88ee550f1","c55319dbab484742322d62bfabe07964e7ea8ae0aafab4476a5467888ed64e7d","6c83ec67f9e4afb6ca82b7be9548cc004e8d9ef6ac6aa29b2a6846cb9e5adb5d","1c8b2d3ff03331ade04d4ec13f9359308bbf481464938107ca40095b8246a229","f50fa063598d47694feba8f4d91f9fcac813b2c6fdaa5981c6ff466952faaf48","1be418e203655427389cd8500372de61fd17cc8a43e1692f2d49df842656b9fd","0a6ec175b75a23cdc119a124d6d16f66338767544afc31ecf35a8ed09d75c98c","b193ed7441b78595000bcd07c92bfa1b36493910579f1c33daafe42a90600537","5ee59e94ca202bace5b0525861270943a8e087f73cd32d75ccf11f9660f8f9cb","e3d78def8d4e6bb8397b25068fdae6eac9d181a75c78dcf20227a251ee00bce3","0d70c986f1a71c38bf3c3c6b54425c4ba624642231ea8471a21adcd69ecbdd4d","f35e1e9878ed539da642f82e325bbfdfd6478a4146e9c6293e6bf9cbf5850c44","3a46c481fc512cce568b39ab364bb02ec588fc276240caf34e015444a5fd26d2","9098640c076d1bdbe6daf7b48d08bb2200ac28cce6db7d08118ae676a99406c9","ff79f90c32d4c308ed74a2a13834785d64d0ad0451aa72c6db55094ca73d43ed","7916e7c886d2088f3a9cad90c7967426d23a92930baf4f9e3b027cb904bc5c09","35cdcc6eb65ef5c7725e1d9744c4bdb59253b283b539df1d3e2727383809bd6c","c6e2264465eb2e8cb2e12b67adc878e3a397efd6328e550b0a1a5bffabcad66d","048f40812b2a786d92fc8db2f174d35fa64581859cef090087a0f392d4010a3d","2fbb3b8172720d956fc349d791f4a89274cdd6f794083bf933fdeed6f8a3863b","2163bfddb0e1569e330731191e593feb3582cd0d27518993b6970aa8d62016ed","d302ecc0b3d2c60e6408fd2469e726967c7114d5f89b97d82f316feb8557c69d","4782235ebc38ab1dada9c9bb80ee43982f076c6d420bb0772c40fe615901889c","74d0e861aeeb84c692dbc8de307d62adcfabf56d916747f09b81b1f9110e8d99","a319dda4a8637ce94901abfb5275e653d0d8c5e6323656218c51257ab6f82456","26062553cec8ef883a3617e98d29b395419287e48f4102105a2ee80c1997bac1","08ef92144166ad7d52329793b355ddd7f437e7c8d1d3743fcbb2d2c68cdb7e7a","f2b32e966e35467d563af676842b4e0718f1cd634f2dfdce3972ae101e5a8564",{"version":"00ef4a4324556eab6e45809e757354899d1ded0f5b2134465ee10e450f9c8d61","affectsGlobalScope":true},"56e9508f9d3e8c96d3a3f1658371293e8bc04f814da40ab3fde1b41edce4c5dd","ccf9692fd3d341b32687f940ad0fe5ce7a66e90b496fe480f666e5a364a4f191","f6da04ced79d25ce77eab9ea71a2983e26dd66314aaa654816567785b7fe2dee","e149341309d7f08a73ade2b661a2f127ba560b7ea1780e85acfe3cdcb3d92be0","4f873a462f3653de5ac9ac1dc5a8e3c124efb25990972db81b8abee3ebae3f0a","24ba650ab9f65272df767eeee4290eade7025e5133f2f0ab68105cf9e334d301","87dd41b85c6a3d3325a8b3ab428c9c1f76bc6d1b651c879fa97d59223451cdcd","eb71b8b3341c222f144cf32f42f9b9148d7b627e5b3c6103a5f3ac56c560a158","ef99471758dc73c45801a60d26307bb516d10f89e5903c91c5eff672e932ccb1","bdb4c178a8f8ff60adafd15d70fdf6b46d3c6f81f6df1e3e7a28591f469a387d","347038ff8218327f04a203e94b4d6aa0880e03c595d8b216f5d937d0cf399fd2","fd0f0447797aed4a9ca12bc550431dc5e3abfd8457ae4aa097d8f33edee28e98","a31b2eb749842299eea366c746b942d1b701d10468e3fea0d5d4ec995d26247b","2fcd2d22b1f30555e785105597cd8f57ed50300e213c4f1bbca6ae149f782c38",{"version":"bb4248c7f953233ac52332088fac897d62b82be07244e551d87c5049600b6cf7","affectsGlobalScope":true},"86fd1a4f883c8f923441b8e6c87a2dca5e9821686034bc16ff2fa47a78d490e6","f6b34ae1d3cb81d3c650290d01bc9c594b8fc04cfbc36d80d53cdf383f2e1233","bfe6237b2761c335b61c7fe90fa3e451e582d5ff1109b9225f1e188dd59efd57","a494399a814393efdcd4066904822d0292e7b999bca3fc91478b0f4bad64967b","74e89ad35934a9146c55e67657e23447a56f06ee0273eb44ddf0d248e9d67fcd","3077b10aeb84262b97adbd643e603ee5db682f2fdb8ea7b61fbc44bf3513462c","06ed91e3b43a8b7a1c2fe5ae698244083a09573c55eb2817b469f92bbd69900e","1f39b83fc5f511ce4d7b7d6fc5bb83adbc591fbec569d6a1e3a606b6e3386ac6","473d8e514deddb66804c0e77f44df8b1a39fc256db1bb4fb5d9d02be9a67634d","e05d9af683d902d090f3654e7e73416104484891b0104b51f625da6485e02b16","86c2b365037af9a5da9b16bb8d847087e4ae3429e8c416812b7b0ffef659a557","723027d1a586395721fd3135839f0e7e8fe637a4cff24a15e117537f5fbbc2b2","174c4089a3fca6db48f5a9c962c204f63a86dea7c361c8a93dd1e8b79b0fdae8","f56b63654c5084def079fac8dd45b6cfd37ad9ed90b3a02639c6f8b89b2e6db0","4f708365069dd7e37e068756288d8c0b6846e58b4c1b17a1260c81f9654a6114","529ccd2bca42861a99c5fec168f7f1da9235404eed6e64063c58c9e9bfd57e96","2f56fab6ebbc1745a52cf0066ed93471decc5e7f37b395054a248a277de7692b","33e86fe0a03d4075823afa9db4e6cd82a7113b9f19d53954bb06614a96a9d6e5","0f1a43916f5ab25d6047f23d67a44f632d78f3ea86f7da08c024fa6bbb54917e","5f5a8bdba099ded5fae3506b641907bba4238f6389fa36734cfe391d1ee5ed0b","b875096bdd41a052b207959a23d83480cef3dcd7e63b874222d01c9a65d0558e","675e702f2032766a91eeadee64f51014c64688525da99dccd8178f0c599f13a8","438284c7c455a29b9c0e2d1e72abc62ee93d9a163029ffe918a34c5db3b92da2","0c75b204aed9cf6ff1c7b4bed87a3ece0d9d6fc857a6350c0c95ed0c38c814e8","187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42","c24ad9be9adf28f0927e3d9d9e9cec1c677022356f241ccbbfb97bfe8fb3d1a1","0ec0998e2d085e8ea54266f547976ae152c9dd6cdb9ac4d8a520a230f5ebae84","9364c7566b0be2f7b70ff5285eb34686f83ccb01bda529b82d23b2a844653bfb","00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a","82251920b05f30981c9a4109cb5f3169dce4b477effc845c6d781044a30e7672","3c92b6dfd43cc1c2485d9eba5ff0b74a19bb8725b692773ef1d66dac48cda4bd","3e59f00ab03c33717b3130066d4debb272da90eeded4935ff0604c2bc25a5cae","9fa6b83a35e897f340858995ca5d77e901d89fd18644cd4c9e8a4afe0b2e6363",{"version":"0714e2046df66c0e93c3330d30dbc0565b3e8cd3ee302cf99e4ede6220e5fec8","affectsGlobalScope":true},"a5f9563c1315cffbc1e73072d96dcd42332f4eebbdffd7c3e904f545c9e9fe24",{"version":"0a887b8083485550a96d4e36345f39028d11ea127d4e5d98f3e917ca6a9a972d","affectsGlobalScope":true},"d31b284989c1c18f1626485d24263800e422fdb00d88775be719a5eaefd93bcc","a618a169df1f67e70f258a5330d0bbc83a610442608c9c5b0b3028befe787875","5002c10cfa46cbcdb6d55226e4768e4383ae7b3844fae6115f293db7edaacccd",{"version":"caf4d67898b5362a94c634e7a8713dab783ca101f1b2318d29749fa1be2971ae","affectsGlobalScope":true},"0f628b48e5f83555e0d10f6b4970fab3ba85dafcaf83e6834c2d32967fb76627","89ccbe04e737ce613f5f04990271cfa84901446350b8551b0555ddf19319723b",{"version":"a2ecf6d87204f3c0f8cb468de4e8fd78626d934ddf12e5401cf33cb7284b24c3","affectsGlobalScope":true},"0359682c54e487c4cab2b53b2b4d35cc8dea4d9914bc6abcdb5701f8b8e745a4","cddf5c26907c0b8378bc05543161c11637b830da9fadf59e02a11e675d11e180","cee164cd6c157d0ce3d3350c1df75dee40d2da203223a72890430ec6d8ccf4a1","f7b46d22a307739c145e5fddf537818038fdfffd580d79ed717f4d4d37249380",{"version":"ecf78e637f710f340ec08d5d92b3f31b134a46a4fcf2e758690d8c46ce62cba6","affectsGlobalScope":true},"4ee363f83d7be2202f34fcd84c44da71bf3a9329fee8a05f976f75083a52ea94","f5a8b384f182b3851cec3596ccc96cb7464f8d3469f48c74bf2befb782a19de5",{"version":"f233a55fd6ffeed2c8965de788191a9ec392bb8471749e382c6e436c737315d5","affectsGlobalScope":true},"b4dfafe583b829a382edccbe32303535d0785f0c02ba7f04418e2a81de97af8a","8a19491eba2108d5c333c249699f40aff05ad312c04a17504573b27d91f0aede","74b0245c42990ed8a849df955db3f4362c81b13f799ebc981b7bec2d5b414a57"],"options":{"declaration":true,"emitDeclarationOnly":false,"emitDecoratorMetadata":true,"esModuleInterop":true,"experimentalDecorators":true,"importHelpers":true,"inlineSourceMap":false,"inlineSources":true,"jsx":2,"module":99,"noEmitHelpers":true,"noEmitOnError":false,"noFallthroughCasesInSwitch":true,"noImplicitAny":true,"noImplicitReturns":true,"noImplicitThis":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","removeComments":true,"skipLibCheck":true,"sourceMap":true,"strict":true,"strictNullChecks":true,"target":5},"fileIdsList":[[82],[82,97],[82,96],[82,154],[82,101],[82,99,154],[56,82,100,154],[82,99,100],[82,110],[82,110,154],[56,82,103,104,105,106,107,108,109,110,154],[82,92,93,94,95,98,102,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153],[82,118,154],[82,154,158],[45,82,154],[82,169],[82,191,193,194,195,196,197,198,199,200,201,202,203],[82,191,192,194,195,196,197,198,199,200,201,202,203],[82,192,193,194,195,196,197,198,199,200,201,202,203],[82,191,192,193,195,196,197,198,199,200,201,202,203],[82,191,192,193,194,196,197,198,199,200,201,202,203],[82,191,192,193,194,195,197,198,199,200,201,202,203],[82,191,192,193,194,195,196,198,199,200,201,202,203],[82,191,192,193,194,195,196,197,199,200,201,202,203],[82,191,192,193,194,195,196,197,198,200,201,202,203],[82,191,192,193,194,195,196,197,198,199,201,202,203],[82,191,192,193,194,195,196,197,198,199,200,202,203],[82,191,192,193,194,195,196,197,198,199,200,201,203],[82,203],[82,191,192,193,194,195,196,197,198,199,200,201,202],[82,214],[82,90],[43,82],[82,89,90],[44,49,82],[45,55,56,63,72,81,82],[45,46,55,63,82],[47,82],[48,49,56,64,82],[49,72,78,82],[50,52,55,63,82],[51,82],[52,53,82],[54,55,82],[55,82],[55,56,57,72,81,82],[55,56,57,72,82],[58,63,72,81,82],[55,56,58,59,63,72,78,81,82],[58,60,72,78,81,82],[82,91],[55,61,82],[62,81,82],[52,55,63,72,82],[64,82],[65,82],[43,66,82],[67,80,82,85],[68,82],[69,82],[55,70,82],[70,71,82,84],[55,72,73,82],[72,73,82],[74,82],[75,82],[55,76,77,82],[76,77,82],[49,63,78,82],[79,82],[41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88],[63,80,82],[58,69,81,82],[49,82],[72,82,83],[82,84],[82,88],[44,49,55,57,66,72,81,82,84,85],[72,82,86],[82,220],[82,216,217,218,219],[82,92],[82,168],[82,184,185,186,187,188],[82,154,176],[82,155],[82,154,155],[82,154,159],[82,154,172],[82,155,156,157,160,161,162,163,164,165,166,167,171,172,173,174,175],[82,170],[82,154,155,172],[82,180],[82,179],[40,82,154,176,182,184,204,205],[40,82,154,176,184,206,207],[40,82,154],[40,82,154,176,178,183,184,189,190,204,208,209],[40,82,154,176,177,178,180,182,210],[40,82],[40,82,181]],"referencedMap":[[95,1],[98,2],[97,3],[96,4],[102,5],[100,6],[99,7],[101,8],[111,9],[104,10],[103,10],[105,9],[107,10],[106,10],[108,1],[109,9],[110,11],[154,12],[158,13],[159,14],[93,4],[112,4],[113,15],[114,1],[115,1],[116,4],[118,14],[117,4],[119,4],[120,4],[121,4],[122,4],[123,4],[124,1],[125,4],[126,4],[127,4],[128,4],[129,4],[130,4],[131,4],[133,4],[132,4],[134,4],[136,4],[135,4],[137,4],[138,4],[139,4],[140,4],[141,1],[142,4],[143,4],[144,4],[146,4],[94,4],[147,4],[145,4],[148,4],[150,4],[149,1],[151,4],[153,4],[152,4],[170,16],[211,1],[212,1],[213,1],[192,17],[193,18],[191,19],[194,20],[195,21],[196,22],[197,23],[198,24],[199,25],[200,26],[201,27],[202,28],[204,29],[203,30],[215,31],[90,32],[41,32],[43,33],[91,34],[44,35],[45,36],[46,37],[47,38],[48,39],[49,40],[50,41],[51,42],[52,43],[53,43],[54,44],[55,45],[56,46],[57,47],[42,1],[87,1],[58,48],[59,49],[60,50],[92,51],[61,52],[62,53],[63,54],[64,55],[65,56],[66,57],[67,58],[68,59],[69,60],[70,61],[71,62],[72,63],[73,64],[74,65],[75,66],[76,67],[77,68],[78,69],[79,70],[89,71],[80,72],[81,73],[82,74],[83,75],[84,76],[88,77],[85,78],[86,79],[216,1],[221,80],[217,1],[220,81],[222,82],[223,1],[219,1],[169,83],[168,1],[214,1],[188,4],[187,1],[185,1],[189,84],[184,85],[186,4],[178,4],[177,1],[156,86],[157,87],[160,88],[173,89],[161,4],[175,1],[162,4],[163,87],[164,87],[165,4],[176,90],[171,91],[166,4],[174,92],[167,4],[172,4],[155,1],[218,1],[181,1],[40,1],[8,1],[10,1],[9,1],[2,1],[11,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[18,1],[3,1],[4,1],[22,1],[19,1],[20,1],[21,1],[23,1],[24,1],[25,1],[5,1],[26,1],[27,1],[28,1],[29,1],[6,1],[30,1],[31,1],[32,1],[33,1],[7,1],[38,1],[34,1],[35,1],[36,1],[37,1],[1,1],[39,1],[179,93],[180,94],[206,95],[208,96],[205,1],[207,97],[209,1],[210,98],[183,99],[190,100],[182,101]],"exportedModulesMap":[[95,1],[98,2],[97,3],[96,4],[102,5],[100,6],[99,7],[101,8],[111,9],[104,10],[103,10],[105,9],[107,10],[106,10],[108,1],[109,9],[110,11],[154,12],[158,13],[159,14],[93,4],[112,4],[113,15],[114,1],[115,1],[116,4],[118,14],[117,4],[119,4],[120,4],[121,4],[122,4],[123,4],[124,1],[125,4],[126,4],[127,4],[128,4],[129,4],[130,4],[131,4],[133,4],[132,4],[134,4],[136,4],[135,4],[137,4],[138,4],[139,4],[140,4],[141,1],[142,4],[143,4],[144,4],[146,4],[94,4],[147,4],[145,4],[148,4],[150,4],[149,1],[151,4],[153,4],[152,4],[170,16],[211,1],[212,1],[213,1],[192,17],[193,18],[191,19],[194,20],[195,21],[196,22],[197,23],[198,24],[199,25],[200,26],[201,27],[202,28],[204,29],[203,30],[215,31],[90,32],[41,32],[43,33],[91,34],[44,35],[45,36],[46,37],[47,38],[48,39],[49,40],[50,41],[51,42],[52,43],[53,43],[54,44],[55,45],[56,46],[57,47],[42,1],[87,1],[58,48],[59,49],[60,50],[92,51],[61,52],[62,53],[63,54],[64,55],[65,56],[66,57],[67,58],[68,59],[69,60],[70,61],[71,62],[72,63],[73,64],[74,65],[75,66],[76,67],[77,68],[78,69],[79,70],[89,71],[80,72],[81,73],[82,74],[83,75],[84,76],[88,77],[85,78],[86,79],[216,1],[221,80],[217,1],[220,81],[222,82],[223,1],[219,1],[169,83],[168,1],[214,1],[188,4],[187,1],[185,1],[189,84],[184,85],[186,4],[178,4],[177,1],[156,86],[157,87],[160,88],[173,89],[161,4],[175,1],[162,4],[163,87],[164,87],[165,4],[176,90],[171,91],[166,4],[174,92],[167,4],[172,4],[155,1],[218,1],[181,1],[40,1],[8,1],[10,1],[9,1],[2,1],[11,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[18,1],[3,1],[4,1],[22,1],[19,1],[20,1],[21,1],[23,1],[24,1],[25,1],[5,1],[26,1],[27,1],[28,1],[29,1],[6,1],[30,1],[31,1],[32,1],[33,1],[7,1],[38,1],[34,1],[35,1],[36,1],[37,1],[1,1],[39,1],[179,93],[180,94],[206,95],[208,96],[205,1],[207,97],[209,1],[210,98],[183,99],[190,100],[182,101]],"semanticDiagnosticsPerFile":[95,98,97,96,102,100,99,101,111,104,103,105,107,106,108,109,110,154,158,159,93,112,113,114,115,116,118,117,119,120,121,122,123,124,125,126,127,128,129,130,131,133,132,134,136,135,137,138,139,140,141,142,143,144,146,94,147,145,148,150,149,151,153,152,170,211,212,213,192,193,191,194,195,196,197,198,199,200,201,202,204,203,215,90,41,43,91,44,45,46,47,48,49,50,51,52,53,54,55,56,57,42,87,58,59,60,92,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,89,80,81,82,83,84,88,85,86,216,221,217,220,222,223,219,169,168,214,188,187,185,189,184,186,178,177,156,157,160,173,161,175,162,163,164,165,176,171,166,174,167,172,155,218,181,40,8,10,9,2,11,12,13,14,15,16,17,18,3,4,22,19,20,21,23,24,25,5,26,27,28,29,6,30,31,32,33,7,38,34,35,36,37,1,39,179,180,206,208,205,207,209,210,183,190,182]},"version":"4.3.4"} \ No newline at end of file +{"program":{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.esnext.intl.d.ts","../node_modules/tslib/tslib.d.ts","../node_modules/@types/node/assert/strict.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/dns/promises.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/stream/promises.d.ts","../node_modules/@types/node/stream/web.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/timers/promises.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/globals.global.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/ts3.6/base.d.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/base.d.ts","../node_modules/@types/node/index.d.ts","../node_modules/@types/atom/src/atom-environment.d.ts","../node_modules/@types/atom/src/text-editor-element.d.ts","../node_modules/@types/atom/dependencies/event-kit/index.d.ts","../node_modules/@types/atom/dependencies/first-mate/src/grammar.d.ts","../node_modules/@types/atom/dependencies/first-mate/src/first-mate.d.ts","../node_modules/@types/atom/dependencies/first-mate/index.d.ts","../node_modules/@types/atom/dependencies/pathwatcher/src/file.d.ts","../node_modules/@types/atom/dependencies/pathwatcher/src/directory.d.ts","../node_modules/@types/atom/dependencies/pathwatcher/src/main.d.ts","../node_modules/@types/atom/dependencies/pathwatcher/index.d.ts","../node_modules/@types/atom/dependencies/text-buffer/src/display-marker.d.ts","../node_modules/@types/atom/dependencies/text-buffer/src/display-marker-layer.d.ts","../node_modules/@types/atom/dependencies/text-buffer/src/helpers.d.ts","../node_modules/@types/atom/dependencies/text-buffer/src/marker.d.ts","../node_modules/@types/atom/dependencies/text-buffer/src/marker-layer.d.ts","../node_modules/@types/atom/dependencies/text-buffer/src/point.d.ts","../node_modules/@types/atom/dependencies/text-buffer/src/range.d.ts","../node_modules/@types/atom/dependencies/text-buffer/src/text-buffer.d.ts","../node_modules/@types/atom/dependencies/text-buffer/index.d.ts","../node_modules/@types/atom/src/buffered-node-process.d.ts","../node_modules/@types/atom/src/buffered-process.d.ts","../node_modules/@types/atom/src/clipboard.d.ts","../node_modules/@types/atom/src/color.d.ts","../node_modules/@types/atom/src/command-registry.d.ts","../node_modules/@types/atom/src/config.d.ts","../node_modules/@types/atom/src/config-schema.d.ts","../node_modules/@types/atom/src/context-menu-manager.d.ts","../node_modules/@types/atom/src/cursor.d.ts","../node_modules/@types/atom/src/decoration.d.ts","../node_modules/@types/atom/src/deserializer-manager.d.ts","../node_modules/@types/atom/src/dock.d.ts","../node_modules/@types/atom/src/get-window-load-settings.d.ts","../node_modules/@types/atom/src/git-repository.d.ts","../node_modules/@types/atom/src/grammar-registry.d.ts","../node_modules/@types/atom/src/gutter.d.ts","../node_modules/@types/atom/src/history-manager.d.ts","../node_modules/@types/atom/src/keymap-extensions.d.ts","../node_modules/@types/atom/src/layer-decoration.d.ts","../node_modules/@types/atom/src/menu-manager.d.ts","../node_modules/@types/atom/src/notification.d.ts","../node_modules/@types/atom/src/notification-manager.d.ts","../node_modules/@types/atom/src/other-types.d.ts","../node_modules/@types/atom/src/package.d.ts","../node_modules/@types/atom/src/package-manager.d.ts","../node_modules/@types/atom/src/pane.d.ts","../node_modules/@types/atom/src/panel.d.ts","../node_modules/@types/atom/src/path-watcher.d.ts","../node_modules/@types/atom/src/project.d.ts","../node_modules/@types/atom/src/scope-descriptor.d.ts","../node_modules/@types/atom/src/selection.d.ts","../node_modules/@types/atom/src/style-manager.d.ts","../node_modules/@types/atom/src/task.d.ts","../node_modules/@types/atom/src/text-editor.d.ts","../node_modules/@types/atom/src/text-editor-component.d.ts","../node_modules/@types/atom/src/text-editor-registry.d.ts","../node_modules/@types/atom/src/theme-manager.d.ts","../node_modules/@types/atom/src/tooltip.d.ts","../node_modules/@types/atom/src/tooltip-manager.d.ts","../node_modules/@types/atom/src/view-registry.d.ts","../node_modules/@types/atom/src/workspace.d.ts","../node_modules/@types/atom/src/workspace-center.d.ts","../node_modules/@types/atom/index.d.ts","../node_modules/atom-ide-base/types-packages/uri.d.ts","../node_modules/atom-ide-base/types-packages/busy-signal.d.ts","../node_modules/atom-ide-base/node_modules/@types/atom/index.d.ts","../node_modules/atom-ide-base/types-packages/call-hierarchy.d.ts","../node_modules/atom-ide-base/node_modules/@types/atom/linter/config.d.ts","../node_modules/atom-ide-base/node_modules/@types/atom/linter/index.d.ts","../node_modules/atom-ide-base/types-packages/code-actions.d.ts","../node_modules/atom-ide-base/types-packages/code-highlight.d.ts","../node_modules/atom-ide-base/types-packages/datatip.d.ts","../node_modules/atom-ide-base/types-packages/definitions.d.ts","../node_modules/atom-ide-base/types-packages/find-references.d.ts","../node_modules/atom-ide-base/types-packages/hyperclick.d.ts","../node_modules/atom-ide-base/types-packages/outline.d.ts","../node_modules/atom-ide-base/types-packages/sig-help.d.ts","../node_modules/@types/trusted-types/lib/index.d.ts","../node_modules/@types/trusted-types/index.d.ts","../node_modules/@types/dompurify/index.d.ts","../node_modules/atom-ide-base/types-packages/markdown-service.d.ts","../node_modules/atom-ide-base/types-packages/text-edit.d.ts","../node_modules/atom-ide-base/types-packages/code-format.d.ts","../node_modules/atom-ide-base/types-packages/refactor.d.ts","../node_modules/atom-ide-base/types-packages/console.d.ts","../node_modules/atom-ide-base/types-packages/main.d.ts","../node_modules/atom-ide-base/commons-ui/scrollIntoView.d.ts","../node_modules/atom-ide-base/commons-ui/items.d.ts","../node_modules/zadeh/binding.d.ts","../node_modules/zadeh/index.d.ts","../node_modules/fast-equals/index.d.ts","../src/utils.ts","../src/outlineView.ts","../node_modules/atom-ide-base/commons-atom/ProviderRegistry.d.ts","../node_modules/atom-ide-base/commons-atom/getCwd.d.ts","../node_modules/atom-ide-base/commons-atom/range.d.ts","../node_modules/atom-ide-base/commons-atom/errors.d.ts","../node_modules/atom-ide-base/commons-atom/editor-largeness.d.ts","../node_modules/atom-ide-base/commons-atom/index.d.ts","../src/statuses.ts","../node_modules/@types/lodash/common/common.d.ts","../node_modules/@types/lodash/common/array.d.ts","../node_modules/@types/lodash/common/collection.d.ts","../node_modules/@types/lodash/common/date.d.ts","../node_modules/@types/lodash/common/function.d.ts","../node_modules/@types/lodash/common/lang.d.ts","../node_modules/@types/lodash/common/math.d.ts","../node_modules/@types/lodash/common/number.d.ts","../node_modules/@types/lodash/common/object.d.ts","../node_modules/@types/lodash/common/seq.d.ts","../node_modules/@types/lodash/common/string.d.ts","../node_modules/@types/lodash/common/util.d.ts","../node_modules/@types/lodash/index.d.ts","../node_modules/@types/lodash/debounce.d.ts","../src/call-hierarchy/statuses.json","../src/call-hierarchy/call-hierarchy-view.ts","../src/call-hierarchy/tab-handler.ts","../src/call-hierarchy/main.ts","../src/config.json","../src/main.ts","../node_modules/@types/estree/index.d.ts","../node_modules/@types/jasmine/index.d.ts","../node_modules/@types/json-schema/index.d.ts","../node_modules/@types/unist/index.d.ts","../node_modules/@types/mdast/index.d.ts","../node_modules/@types/prop-types/index.d.ts","../node_modules/@types/react/global.d.ts","../node_modules/csstype/index.d.ts","../node_modules/@types/scheduler/tracing.d.ts","../node_modules/@types/react/index.d.ts","../node_modules/@types/react-dom/index.d.ts","../node_modules/@types/resolve/index.d.ts","../node_modules/@types/scheduler/index.d.ts"],"fileInfos":[{"version":"ac3a8c4040e183ce38da69d23b96939112457d1936198e6542672b7963cf0fce","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84","e21c071ca3e1b4a815d5f04a7475adcaeea5d64367e840dd0154096d705c3940",{"version":"1dad4fe1561d99dfd6709127608b99a76e5c2643626c800434f99c48038567ee","affectsGlobalScope":true},{"version":"cce43d02223f8049864f8568bed322c39424013275cd3bcc3f51492d8b546cb3","affectsGlobalScope":true},{"version":"43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"8dff1b4c2df638fcd976cbb0e636f23ab5968e836cd45084cc31d47d1ab19c49","affectsGlobalScope":true},{"version":"2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c","affectsGlobalScope":true},{"version":"810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357","affectsGlobalScope":true},{"version":"62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"8f4c9f651c8294a2eb1cbd12581fe25bfb901ab1d474bb93cd38c7e2f4be7a30","affectsGlobalScope":true},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true},{"version":"df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e","affectsGlobalScope":true},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true},{"version":"93544ca2f26a48716c1b6c5091842cad63129daac422dfa4bc52460465f22bb1","affectsGlobalScope":true},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true},{"version":"60761e6ea886034af0f294f025a7199360ce4e2c8ba4ec6408bc049cf9b89799","affectsGlobalScope":true},{"version":"7435b75fdf3509622e79622dbe5091cf4b09688410ee2034e4fc17d0c99d0862","affectsGlobalScope":true},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true},{"version":"9f1817f7c3f02f6d56e0f403b927e90bb133f371dcebc36fa7d6d208ef6899da","affectsGlobalScope":true},{"version":"506b80b9951c9381dc5f11897b31fca5e2a65731d96ddefa19687fbc26b23c6e","affectsGlobalScope":true},"12f4cfe2fe60b810c3174537bc2ddb20c1067b7768643d12cb1266fd183afb75","a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a",{"version":"34f1d0e1f63dd8c0bdc1fd15ec2b7216fd709953781c4d1b1213d88e2d94db9e","affectsGlobalScope":true},"d1bafabb4767ac0a190e4d4d7c4dff4f9d7055466ac4d774af34efb27811bb6c",{"version":"ce5270abab18511c259ec82382227487e7ff2ea16e8dea3b4416581f3a7f88e0","affectsGlobalScope":true},"7486ee90b2e62b940d9edef73837958f951eaaad63d7ec303925ea58b215dcca","03b2024e896feeece8128c631b00ee0a1887a79443fbb2d763d95c92f2044e84",{"version":"a47c6b92116319e589051b179ed7ca191e8c042f9afc5fc43619c2c260215efb","affectsGlobalScope":true},"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","edaf4d6b971fdac4d5c31e12f97790f2f91d38819eb56b960f1c30da56f1de38","582dd8aeb80e0a169550f0daf3880e101d9ecc23f2ec095d7e8e37a3b80d3cc0","47a33d6ebbe0199a47db627398b291bd8dcf8ce2f27f91cd3df3d8e759edcb6c","2eb6fbe547439103affc499164883deb377e60c84525b54ffd78db51c29f052d","87c064559d14068edb2861fc7d48c1a8196a63523e00cc29aadd57c0eefb24a5","508a8c437c9cf207fa7aca0303a849d11d5a90853970d43264854491eb8cfa26",{"version":"8b25e47c403b448ebac1ca804afe109100186fd60ee41d033f730cdb43b2bb57","affectsGlobalScope":true},"9a2b4da38d194b756b4785e85b1fff4ab3f9f0304333398a6a26d8de0c4304cf","8cf85781910aaa54ecd1de6655b589891391b89b2e383b525035d556bb20dd2e","d897ce0f159ff9f9fd6451ba10f0a25a62336964b8b6227a54b8dc28bdc7d2d0","c578cd6aa88038957958e8d35857d479d74284759a7ca003920c91f89f0ba71c","bfe39c74035daf5b7593dc9e089e3b1ec3428bf5600e20d9c8d6085af79639b3","2b8554190ae9ee7b2be794711f8c6629ec78ddb8d21b869f6e24a30b6a1f0958",{"version":"e8b18c6385ff784228a6f369694fcf1a6b475355ba89090a88de13587a9391d5","affectsGlobalScope":true},"1104b24afd816918709a5f08e2e6a24498f459cc741fab5ccf05be2169af1eb3","b0f8ec7d96c5df8e97ab6758bed4044fa5b0ba1563a90b0a4749669815320471","3b9d2c91a548efb80be4c5dc47bcc6e1dce1bcc03c3469efb6ef4c8891ff20c9","a5f13cd83578fc3e20d65f952ec5e84eef5c0c6d5df968b7e01f48869fcbbd0c",{"version":"271e12e5d6fd168a699171c84e70509408b0958b2d80791001e9a2cac6f556ca","affectsGlobalScope":true},"58182900ef4f9fe3c477334e730718f2ef14f73ce7f1136271d995f062410410","dd809c6de4574d8ef11a60a9a1070bbdc78809f022a6cac5d1404e3b2ba504a1","1a559b56db1ba6b3efc9f30ae5f9674388ce9d00593d7fef4b4aea5439fb829b","3f679d89f7c6fc6439f31e5614170fb75829b3504e30212b1664d9954adbb4a4","02e3f0ced700282b3d389ff34cecfa53f6ae20f83825f4064bed32a203c57c4f","1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff","efa24f44a287d163f163029273ba52fb206ef5e4c853d1a47f331f72d566db3c","6cc926ccc014db70a4be83fc0cce6e7ec43e297ee08ab8ab1703d14247bd4746",{"version":"d6ba1d94bbebc6f71e352cc1ab3efb9fb6a68cab44a5782d8e10bbb391655a9d","affectsGlobalScope":true},"664d8f2d59164f2e08c543981453893bc7e003e4dfd29651ce09db13e9457980","cc8b915c22d08375a19c3825965322282033235ec75b783d3234c806fe73d4b4","3b344022f4ba3cb748958573c44ba8c9fb8d4dbb23b676ebb91cf27fe0b504d4","913fe6877d073d1e169436796c5ddffda0270c55fa9d8a821d22adccbb17994c","096fec092cac14358a5520cd053cb094c23161b53fa4cd43a4a8a75f04729fbe","b87862ec84c6dae4b4bd90cc75aae95aec715947d45029c3bff70c4267e7a3e2","1b0941babfcef70474324ee4606639cac0d716eff7ca617254e50a58995866cf","bac51a0f14622bcbc78debfc5c47b13c28e027401c366798750c25d8d1f7bde9","7378e9f4d247d74c5095d8c146bc611f3d984b72dd25f79087726d8758e634f2","d9ed99601d6fde94b2d5c95165ff8c536523ad95ec9d0ea09d4c4c8bf766812d",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"0212c8455b24725df00eabb6711de9b4731db0499f2d6350468a37a7574f95c0","359745bfbc578a51b1143fc7c49159f6068acf121017982519b88b04f27ea66a","90b0e4b6e7a63eae42717c44a257ce190c43b1be8b26d8927f37ef464cf829c8","35549c9daefc577a6d80bac1c1543b3588804fdda82cb1cf7b5293ca65b4dce4","4f92917486836e30ec8c18667035e7bf15d16fcd5ab2748296994f54a3ae359b","2b898bb5b99899af6de62cd5b3cf5be9ed2668eb94974dbdb402458e80c27edd","d2104c54b34158356c4c17dd37c7dd29e1c7dc4c77d9077e921f37d0b0f5cb87","8989b83d1d34dc4ef1100cbcc0f983f69d63118aeca3de5947e1c431ccd21ccc","35c935b77ca1da8fbf901931e0d8f25bff1cdedc9cbc01d98180cb496c445c21","3d1ffbc8fc8790ce6eef1e4ce1e79bfd5e9d0bc7d4f7cac0e95c54a7e1141875","128307a9785a229de861f811864e872ccc7b98da7953f6a67168addf64164fae","79d8197c490b07c732957dfc053b0a1bceaeba6cca9d3de6ce784d6b949fca4b","a49b47dfb004f10f3b23bb790de0c74667dfd053f7eda02ac831c351c7875498","5af3737dddb6e952a498672892404be1105ec2751b09467fbb5fd4b95efbd99b","9a1aef5196a946220a7ef874a7bc7424efef78d23ba8ff20df281b36ef62837a","29dd86bbc67e36427086391040eac56c43aff45b34687f4d4e39a9d3e9f2d87b","00b7ef8d8dae6570963d4f3e3027a27bda0d61285ced3ab3c81136c8899b6224","05d99f695e6424963c16f8a990e2fd0b703a8079baa1445ef2915fe525efc85b","ab77be6fc48fb908db04f842e47d944176ac3cc76020c15f382738bd437eed90","575c279d939c1c61b48798fbd747c80871dc3d4c18fcfcdb9924a950ff67cb88","88d9da0dab92c994d171a7999ca48974be8f99c041622a78d0b1f3ff27588fc1","dc172eb5106eefa395d091bdb0d8b1963a86aae82a6a7192c1910e7f11083ccd","79e09e77f7f0e0283ca443ba0eb14243a8a654cb25db6c5250caf4d840cca6ad","2cb11a971470a03e828df7520b3153e514bfc5065597d0690a0439f7a5e4284a","839f9c729f3bfd673257683bb86879ba1c3f8b41f01c2a6a33295ebf14927ab5","ef9084c118d3a104aebed6b88b07149fa5a491652a9ff90d52140cda9f7b317e","4d74b98b593856085848bde7d83f400ad2fe5a2c36ac9dfe863f96ac206ae55d","27656836bf9547d24ed317c044fe1a3feeb58aff8433ba7813d50e8f69088034","e43548a7d9030b2986c73fca5260a49e9246663148eec940c6440772c80da7ba","cdd0d39a4cb0a5adb8e38f542603e3db4bd0ccfde5c69996dd50c9b9a94cd453","a204b31c3672914ff68bb20bfdaae933bf7f8f943687c371b0fd32a3482fc5d4","f152d699e59e304c05779b97a5f518ba9abb8bd24c0b424802bf02b62c919b0f","269c4bd8cb3780736254bb151db215ef3a65af93a900ca3af00cb9b1d8c346b9","be2d0f15d3277a1dd83829a07610da07d4ba584ece64b7292b27f90ab704a7c8","ef048a1d0f1a5f33453b2481987a0f5011e158b757fe4f4def16a2a31efd4623","0534a685ecb1022ec62f19fe7252137f652dde0d86404723e021ed714d44c442","86e61b70ff3e5019f9c85b63a56e8160f9fa712e0e7fe7b4cb7c88f0384ab76a","346bbbe2467175e499c5b1aaa5f665092612ce4a49c2bdc74495e912edc15bbe","429c0ccb47f85fab9f0096859a31f2bc20e2b8a814022cd71f6e5cc88ee550f1","c55319dbab484742322d62bfabe07964e7ea8ae0aafab4476a5467888ed64e7d","6c83ec67f9e4afb6ca82b7be9548cc004e8d9ef6ac6aa29b2a6846cb9e5adb5d","1c8b2d3ff03331ade04d4ec13f9359308bbf481464938107ca40095b8246a229","f50fa063598d47694feba8f4d91f9fcac813b2c6fdaa5981c6ff466952faaf48","1be418e203655427389cd8500372de61fd17cc8a43e1692f2d49df842656b9fd","0a6ec175b75a23cdc119a124d6d16f66338767544afc31ecf35a8ed09d75c98c","b193ed7441b78595000bcd07c92bfa1b36493910579f1c33daafe42a90600537","5ee59e94ca202bace5b0525861270943a8e087f73cd32d75ccf11f9660f8f9cb","e3d78def8d4e6bb8397b25068fdae6eac9d181a75c78dcf20227a251ee00bce3","0d70c986f1a71c38bf3c3c6b54425c4ba624642231ea8471a21adcd69ecbdd4d","f35e1e9878ed539da642f82e325bbfdfd6478a4146e9c6293e6bf9cbf5850c44","3a46c481fc512cce568b39ab364bb02ec588fc276240caf34e015444a5fd26d2","9098640c076d1bdbe6daf7b48d08bb2200ac28cce6db7d08118ae676a99406c9","ff79f90c32d4c308ed74a2a13834785d64d0ad0451aa72c6db55094ca73d43ed","7916e7c886d2088f3a9cad90c7967426d23a92930baf4f9e3b027cb904bc5c09","35cdcc6eb65ef5c7725e1d9744c4bdb59253b283b539df1d3e2727383809bd6c","c6e2264465eb2e8cb2e12b67adc878e3a397efd6328e550b0a1a5bffabcad66d","048f40812b2a786d92fc8db2f174d35fa64581859cef090087a0f392d4010a3d","2fbb3b8172720d956fc349d791f4a89274cdd6f794083bf933fdeed6f8a3863b","2163bfddb0e1569e330731191e593feb3582cd0d27518993b6970aa8d62016ed","d302ecc0b3d2c60e6408fd2469e726967c7114d5f89b97d82f316feb8557c69d","4782235ebc38ab1dada9c9bb80ee43982f076c6d420bb0772c40fe615901889c","74d0e861aeeb84c692dbc8de307d62adcfabf56d916747f09b81b1f9110e8d99","a319dda4a8637ce94901abfb5275e653d0d8c5e6323656218c51257ab6f82456","26062553cec8ef883a3617e98d29b395419287e48f4102105a2ee80c1997bac1","08ef92144166ad7d52329793b355ddd7f437e7c8d1d3743fcbb2d2c68cdb7e7a","f2b32e966e35467d563af676842b4e0718f1cd634f2dfdce3972ae101e5a8564",{"version":"00ef4a4324556eab6e45809e757354899d1ded0f5b2134465ee10e450f9c8d61","affectsGlobalScope":true},"56e9508f9d3e8c96d3a3f1658371293e8bc04f814da40ab3fde1b41edce4c5dd","ccf9692fd3d341b32687f940ad0fe5ce7a66e90b496fe480f666e5a364a4f191",{"version":"00ef4a4324556eab6e45809e757354899d1ded0f5b2134465ee10e450f9c8d61","affectsGlobalScope":true},"f6da04ced79d25ce77eab9ea71a2983e26dd66314aaa654816567785b7fe2dee","e149341309d7f08a73ade2b661a2f127ba560b7ea1780e85acfe3cdcb3d92be0","4f873a462f3653de5ac9ac1dc5a8e3c124efb25990972db81b8abee3ebae3f0a","24ba650ab9f65272df767eeee4290eade7025e5133f2f0ab68105cf9e334d301","87dd41b85c6a3d3325a8b3ab428c9c1f76bc6d1b651c879fa97d59223451cdcd","eb71b8b3341c222f144cf32f42f9b9148d7b627e5b3c6103a5f3ac56c560a158","ef99471758dc73c45801a60d26307bb516d10f89e5903c91c5eff672e932ccb1","bdb4c178a8f8ff60adafd15d70fdf6b46d3c6f81f6df1e3e7a28591f469a387d","347038ff8218327f04a203e94b4d6aa0880e03c595d8b216f5d937d0cf399fd2","fd0f0447797aed4a9ca12bc550431dc5e3abfd8457ae4aa097d8f33edee28e98","a31b2eb749842299eea366c746b942d1b701d10468e3fea0d5d4ec995d26247b","2fcd2d22b1f30555e785105597cd8f57ed50300e213c4f1bbca6ae149f782c38",{"version":"bb4248c7f953233ac52332088fac897d62b82be07244e551d87c5049600b6cf7","affectsGlobalScope":true},"86fd1a4f883c8f923441b8e6c87a2dca5e9821686034bc16ff2fa47a78d490e6","f6b34ae1d3cb81d3c650290d01bc9c594b8fc04cfbc36d80d53cdf383f2e1233","bfe6237b2761c335b61c7fe90fa3e451e582d5ff1109b9225f1e188dd59efd57","a494399a814393efdcd4066904822d0292e7b999bca3fc91478b0f4bad64967b","74e89ad35934a9146c55e67657e23447a56f06ee0273eb44ddf0d248e9d67fcd","3077b10aeb84262b97adbd643e603ee5db682f2fdb8ea7b61fbc44bf3513462c","06ed91e3b43a8b7a1c2fe5ae698244083a09573c55eb2817b469f92bbd69900e","1f39b83fc5f511ce4d7b7d6fc5bb83adbc591fbec569d6a1e3a606b6e3386ac6","473d8e514deddb66804c0e77f44df8b1a39fc256db1bb4fb5d9d02be9a67634d","e05d9af683d902d090f3654e7e73416104484891b0104b51f625da6485e02b16","86c2b365037af9a5da9b16bb8d847087e4ae3429e8c416812b7b0ffef659a557","723027d1a586395721fd3135839f0e7e8fe637a4cff24a15e117537f5fbbc2b2","174c4089a3fca6db48f5a9c962c204f63a86dea7c361c8a93dd1e8b79b0fdae8","f56b63654c5084def079fac8dd45b6cfd37ad9ed90b3a02639c6f8b89b2e6db0","4f708365069dd7e37e068756288d8c0b6846e58b4c1b17a1260c81f9654a6114","529ccd2bca42861a99c5fec168f7f1da9235404eed6e64063c58c9e9bfd57e96","2f56fab6ebbc1745a52cf0066ed93471decc5e7f37b395054a248a277de7692b","33e86fe0a03d4075823afa9db4e6cd82a7113b9f19d53954bb06614a96a9d6e5","0f1a43916f5ab25d6047f23d67a44f632d78f3ea86f7da08c024fa6bbb54917e","5f5a8bdba099ded5fae3506b641907bba4238f6389fa36734cfe391d1ee5ed0b","b875096bdd41a052b207959a23d83480cef3dcd7e63b874222d01c9a65d0558e","675e702f2032766a91eeadee64f51014c64688525da99dccd8178f0c599f13a8","438284c7c455a29b9c0e2d1e72abc62ee93d9a163029ffe918a34c5db3b92da2","0c75b204aed9cf6ff1c7b4bed87a3ece0d9d6fc857a6350c0c95ed0c38c814e8","187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42","c24ad9be9adf28f0927e3d9d9e9cec1c677022356f241ccbbfb97bfe8fb3d1a1","0ec0998e2d085e8ea54266f547976ae152c9dd6cdb9ac4d8a520a230f5ebae84","9364c7566b0be2f7b70ff5285eb34686f83ccb01bda529b82d23b2a844653bfb","00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a","82251920b05f30981c9a4109cb5f3169dce4b477effc845c6d781044a30e7672","3c92b6dfd43cc1c2485d9eba5ff0b74a19bb8725b692773ef1d66dac48cda4bd","3e59f00ab03c33717b3130066d4debb272da90eeded4935ff0604c2bc25a5cae","9fa6b83a35e897f340858995ca5d77e901d89fd18644cd4c9e8a4afe0b2e6363",{"version":"0714e2046df66c0e93c3330d30dbc0565b3e8cd3ee302cf99e4ede6220e5fec8","affectsGlobalScope":true},"a5f9563c1315cffbc1e73072d96dcd42332f4eebbdffd7c3e904f545c9e9fe24",{"version":"a28d500f2e0c8415f490c3b33b91611e478d49bc380d3c5197f4166979eb01a8","affectsGlobalScope":true},"d31b284989c1c18f1626485d24263800e422fdb00d88775be719a5eaefd93bcc","a618a169df1f67e70f258a5330d0bbc83a610442608c9c5b0b3028befe787875","5002c10cfa46cbcdb6d55226e4768e4383ae7b3844fae6115f293db7edaacccd",{"version":"caf4d67898b5362a94c634e7a8713dab783ca101f1b2318d29749fa1be2971ae","affectsGlobalScope":true},"cd06ff50bb96bbe16705d9c7441dbfe3ec33ef571baaeb728c447e702b9742cd","89ccbe04e737ce613f5f04990271cfa84901446350b8551b0555ddf19319723b",{"version":"a2ecf6d87204f3c0f8cb468de4e8fd78626d934ddf12e5401cf33cb7284b24c3","affectsGlobalScope":true},"0359682c54e487c4cab2b53b2b4d35cc8dea4d9914bc6abcdb5701f8b8e745a4","cddf5c26907c0b8378bc05543161c11637b830da9fadf59e02a11e675d11e180","cee164cd6c157d0ce3d3350c1df75dee40d2da203223a72890430ec6d8ccf4a1","f7b46d22a307739c145e5fddf537818038fdfffd580d79ed717f4d4d37249380",{"version":"ecf78e637f710f340ec08d5d92b3f31b134a46a4fcf2e758690d8c46ce62cba6","affectsGlobalScope":true},"4ee363f83d7be2202f34fcd84c44da71bf3a9329fee8a05f976f75083a52ea94","f5a8b384f182b3851cec3596ccc96cb7464f8d3469f48c74bf2befb782a19de5",{"version":"f233a55fd6ffeed2c8965de788191a9ec392bb8471749e382c6e436c737315d5","affectsGlobalScope":true},"b4dfafe583b829a382edccbe32303535d0785f0c02ba7f04418e2a81de97af8a","8a19491eba2108d5c333c249699f40aff05ad312c04a17504573b27d91f0aede","74b0245c42990ed8a849df955db3f4362c81b13f799ebc981b7bec2d5b414a57"],"options":{"declaration":true,"emitDeclarationOnly":false,"emitDecoratorMetadata":true,"esModuleInterop":true,"experimentalDecorators":true,"importHelpers":true,"inlineSourceMap":false,"inlineSources":true,"jsx":2,"module":99,"noEmitHelpers":true,"noEmitOnError":false,"noFallthroughCasesInSwitch":true,"noImplicitAny":true,"noImplicitReturns":true,"noImplicitThis":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","removeComments":true,"skipLibCheck":true,"sourceMap":true,"strict":true,"strictNullChecks":true,"target":5},"fileIdsList":[[82],[82,97],[82,96],[82,154],[82,101],[82,99,154],[56,82,100,154],[82,99,100],[82,110],[82,110,154],[56,82,103,104,105,106,107,108,109,110,154],[82,92,93,94,95,98,102,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153],[45,82,154],[82,154,159],[82,170],[82,192,194,195,196,197,198,199,200,201,202,203,204],[82,192,193,195,196,197,198,199,200,201,202,203,204],[82,193,194,195,196,197,198,199,200,201,202,203,204],[82,192,193,194,196,197,198,199,200,201,202,203,204],[82,192,193,194,195,197,198,199,200,201,202,203,204],[82,192,193,194,195,196,198,199,200,201,202,203,204],[82,192,193,194,195,196,197,199,200,201,202,203,204],[82,192,193,194,195,196,197,198,200,201,202,203,204],[82,192,193,194,195,196,197,198,199,201,202,203,204],[82,192,193,194,195,196,197,198,199,200,202,203,204],[82,192,193,194,195,196,197,198,199,200,201,203,204],[82,192,193,194,195,196,197,198,199,200,201,202,204],[82,204],[82,192,193,194,195,196,197,198,199,200,201,202,203],[82,215],[82,90],[43,82],[82,89,90],[44,49,82],[45,55,56,63,72,81,82],[45,46,55,63,82],[47,82],[48,49,56,64,82],[49,72,78,82],[50,52,55,63,82],[51,82],[52,53,82],[54,55,82],[55,82],[55,56,57,72,81,82],[55,56,57,72,82],[58,63,72,81,82],[55,56,58,59,63,72,78,81,82],[58,60,72,78,81,82],[82,91],[55,61,82],[62,81,82],[52,55,63,72,82],[64,82],[65,82],[43,66,82],[67,80,82,85],[68,82],[69,82],[55,70,82],[70,71,82,84],[55,72,73,82],[72,73,82],[74,82],[75,82],[55,76,77,82],[76,77,82],[49,63,78,82],[79,82],[41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88],[63,80,82],[58,69,81,82],[49,82],[72,82,83],[82,84],[82,88],[44,49,55,57,66,72,81,82,84,85],[72,82,86],[82,221],[82,217,218,219,220],[82,92],[82,169],[82,154,177],[82,185,186,187,188,189],[82,118,154],[82,155],[82,154,155],[82,154,160],[82,154,173],[82,155,156,158,161,162,163,164,165,166,167,168,172,173,174,175,176],[82,171],[82,154,155,173],[82,181],[82,180],[40,82,154,177,183,185,205,206],[40,82,154,177,185,207,208],[40,82,154],[40,82,154,177,179,184,185,190,191,205,209,210],[40,82,154,177,178,179,181,183,211],[40,82],[40,82,182]],"referencedMap":[[95,1],[98,2],[97,3],[96,4],[102,5],[100,6],[99,7],[101,8],[111,9],[104,10],[103,10],[105,9],[107,10],[106,10],[108,1],[109,9],[110,11],[154,12],[93,4],[112,4],[113,13],[114,1],[115,1],[116,4],[118,14],[117,4],[119,4],[120,4],[121,4],[122,4],[123,4],[124,1],[125,4],[126,4],[127,4],[128,4],[129,4],[130,4],[131,4],[133,4],[132,4],[134,4],[136,4],[135,4],[137,4],[138,4],[139,4],[140,4],[141,1],[142,4],[143,4],[144,4],[146,4],[94,4],[147,4],[145,4],[148,4],[150,4],[149,1],[151,4],[153,4],[152,4],[171,15],[212,1],[213,1],[214,1],[193,16],[194,17],[192,18],[195,19],[196,20],[197,21],[198,22],[199,23],[200,24],[201,25],[202,26],[203,27],[205,28],[204,29],[216,30],[90,31],[41,31],[43,32],[91,33],[44,34],[45,35],[46,36],[47,37],[48,38],[49,39],[50,40],[51,41],[52,42],[53,42],[54,43],[55,44],[56,45],[57,46],[42,1],[87,1],[58,47],[59,48],[60,49],[92,50],[61,51],[62,52],[63,53],[64,54],[65,55],[66,56],[67,57],[68,58],[69,59],[70,60],[71,61],[72,62],[73,63],[74,64],[75,65],[76,66],[77,67],[78,68],[79,69],[89,70],[80,71],[81,72],[82,73],[83,74],[84,75],[88,76],[85,77],[86,78],[217,1],[222,79],[218,1],[221,80],[223,81],[224,1],[220,1],[170,82],[169,1],[215,1],[185,83],[189,4],[188,1],[186,1],[190,84],[187,4],[179,4],[178,1],[157,12],[159,85],[160,14],[156,86],[158,87],[161,88],[174,89],[162,4],[176,1],[163,4],[164,87],[165,87],[166,4],[177,90],[172,91],[167,4],[175,92],[168,4],[173,4],[155,1],[219,1],[182,1],[40,1],[8,1],[10,1],[9,1],[2,1],[11,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[18,1],[3,1],[4,1],[22,1],[19,1],[20,1],[21,1],[23,1],[24,1],[25,1],[5,1],[26,1],[27,1],[28,1],[29,1],[6,1],[30,1],[31,1],[32,1],[33,1],[7,1],[38,1],[34,1],[35,1],[36,1],[37,1],[1,1],[39,1],[180,93],[181,94],[207,95],[209,96],[206,1],[208,97],[210,1],[211,98],[184,99],[191,100],[183,101]],"exportedModulesMap":[[95,1],[98,2],[97,3],[96,4],[102,5],[100,6],[99,7],[101,8],[111,9],[104,10],[103,10],[105,9],[107,10],[106,10],[108,1],[109,9],[110,11],[154,12],[93,4],[112,4],[113,13],[114,1],[115,1],[116,4],[118,14],[117,4],[119,4],[120,4],[121,4],[122,4],[123,4],[124,1],[125,4],[126,4],[127,4],[128,4],[129,4],[130,4],[131,4],[133,4],[132,4],[134,4],[136,4],[135,4],[137,4],[138,4],[139,4],[140,4],[141,1],[142,4],[143,4],[144,4],[146,4],[94,4],[147,4],[145,4],[148,4],[150,4],[149,1],[151,4],[153,4],[152,4],[171,15],[212,1],[213,1],[214,1],[193,16],[194,17],[192,18],[195,19],[196,20],[197,21],[198,22],[199,23],[200,24],[201,25],[202,26],[203,27],[205,28],[204,29],[216,30],[90,31],[41,31],[43,32],[91,33],[44,34],[45,35],[46,36],[47,37],[48,38],[49,39],[50,40],[51,41],[52,42],[53,42],[54,43],[55,44],[56,45],[57,46],[42,1],[87,1],[58,47],[59,48],[60,49],[92,50],[61,51],[62,52],[63,53],[64,54],[65,55],[66,56],[67,57],[68,58],[69,59],[70,60],[71,61],[72,62],[73,63],[74,64],[75,65],[76,66],[77,67],[78,68],[79,69],[89,70],[80,71],[81,72],[82,73],[83,74],[84,75],[88,76],[85,77],[86,78],[217,1],[222,79],[218,1],[221,80],[223,81],[224,1],[220,1],[170,82],[169,1],[215,1],[185,83],[189,4],[188,1],[186,1],[190,84],[187,4],[179,4],[178,1],[157,12],[159,85],[160,14],[156,86],[158,87],[161,88],[174,89],[162,4],[176,1],[163,4],[164,87],[165,87],[166,4],[177,90],[172,91],[167,4],[175,92],[168,4],[173,4],[155,1],[219,1],[182,1],[40,1],[8,1],[10,1],[9,1],[2,1],[11,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[18,1],[3,1],[4,1],[22,1],[19,1],[20,1],[21,1],[23,1],[24,1],[25,1],[5,1],[26,1],[27,1],[28,1],[29,1],[6,1],[30,1],[31,1],[32,1],[33,1],[7,1],[38,1],[34,1],[35,1],[36,1],[37,1],[1,1],[39,1],[180,93],[181,94],[207,95],[209,96],[206,1],[208,97],[210,1],[211,98],[184,99],[191,100],[183,101]],"semanticDiagnosticsPerFile":[95,98,97,96,102,100,99,101,111,104,103,105,107,106,108,109,110,154,93,112,113,114,115,116,118,117,119,120,121,122,123,124,125,126,127,128,129,130,131,133,132,134,136,135,137,138,139,140,141,142,143,144,146,94,147,145,148,150,149,151,153,152,171,212,213,214,193,194,192,195,196,197,198,199,200,201,202,203,205,204,216,90,41,43,91,44,45,46,47,48,49,50,51,52,53,54,55,56,57,42,87,58,59,60,92,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,89,80,81,82,83,84,88,85,86,217,222,218,221,223,224,220,170,169,215,185,189,188,186,190,187,179,178,157,159,160,156,158,161,174,162,176,163,164,165,166,177,172,167,175,168,173,155,219,182,40,8,10,9,2,11,12,13,14,15,16,17,18,3,4,22,19,20,21,23,24,25,5,26,27,28,29,6,30,31,32,33,7,38,34,35,36,37,1,39,180,181,207,209,206,208,210,211,184,191,183]},"version":"4.3.5"} \ No newline at end of file diff --git a/package.json b/package.json index 7006a09..93ed6fc 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "atom-ide-outline", "main": "./dist/main", - "version": "3.1.0", + "version": "3.2.0", "description": "Outline UI compatible with IDE packages", "repository": "https://github.com/atom-ide-community/atom-ide-outline", "keywords": [