{"version":3,"names":["TernCodeMirrorWrapper","showContextInfo","cm","data","tip","type","doc","appendChild","document","createTextNode","url","tempTooltip","showError","msg","String","content","state","ternTooltip","remove","right","bottom","cursorCoords","undefined","makeTooltip","getWrapperElement","mouseOnTip","old","maybeClear","clear","parentNode","off","fadeOut","CodeMirror","on","e","targetElement","relatedTarget","toElement","contains","setTimeout","x","y","node","style","left","top","tooltip","opacity","parent","removeChild","jumpBack","cmEditor","livelyCodeMirror","ternServerWrapper","target","jumpStack","pop","moveTo","atInterestingExpression","pos","getCursor","tok","getTokenAt","start","ch","test","getLine","line","slice","Math","max","tern","t","loc","range","fileName","loadDefinition","fetch","then","res","json","initTernServer","Server","getFile","callback","text","catch","async","defs","plugins","es_modules","ternServer","_ternServerPromise","request","req","ts","Promise","resolve","reject","error","response","lively","showType","cursorPosition","query","file","getTargetModule","end","lineCharPositions","files","name","value","updateArgHints","_jumpStack","inner","targetCM","existingEditor","querySelectorAll","map","ea","getLivelyCodeMirror","compact","find","editor","livelyEditor","openBrowser","container","getEditor","currentEditor","enclosingWindow","findWindow","tagName","gotoWindow","focus","setSelection","jumpToDefinition","push","playgroundGetDefinition","location","r","_end","asCM","showReferences","me","success","refs","length","showHint","hint","list","ref","displayText","call","render","Element","self","anwser","from","to","alignWithWord","__temp__","server","notify"],"sources":["tern-wrapper.js"],"sourcesContent":["import tern, * as t from 'src/external/aexpr/tern/tern.js';\nimport 'src/external/aexpr/tern/def.js';\nimport 'src/external/aexpr/tern/comment.js';\nimport 'src/external/aexpr/tern/infer.js';\nimport 'src/external/aexpr/tern/modules.js';\nimport 'src/external/aexpr/tern/es_modules.js';\n\nimport { loc, range } from 'utils';\n\nt;\n\nimport { fileName } from 'utils';\n\n// // #######################\n// // Maintain Argument Hints\n// // #######################\n\n// async function updateArgHints(cm, lcm, serverWrapper) { // ts, cm\n//   closeArgHints(cm);\n\n//   if (cm.somethingSelected()) return lively.error(\"early out\");\n//   var state = cm.getTokenAt(cm.getCursor()).state;\n//   var inner = CodeMirror.innerMode(cm.getMode(), state);\n//   if (inner.mode.name != \"javascript\") return;\n//   var lex = inner.state.lexical;\n//   if (lex.info != \"call\") return;\n\n//   var ch, argPos = lex.pos || 0, tabSize = cm.getOption(\"tabSize\");\n//   for (var line = cm.getCursor().line, e = Math.max(0, line - 9), found = false; line >= e; --line) {\n//     var str = cm.getLine(line), extra = 0;\n//     for (var pos = 0;;) {\n//       var tab = str.indexOf(\"\\t\", pos);\n//       if (tab == -1) break;\n//       extra += tabSize - (tab + extra) % tabSize - 1;\n//       pos = tab + 1;\n//     }\n//     ch = lex.column - extra;\n//     if (str.charAt(ch) == \"(\") {found = true; break;}\n//   }\n//   if (!found) return;\n\n//   var start = CodeMirror.Pos(line, ch);\n//   var cache = cm.state.cachedArgHints;\n//   if (cache && cache.doc == cm.getDoc() && CodeMirror.cmpPos(start, cache.start) == 0) {\n//     return lively.notify(\"cached\", undefined, undefined, undefined, \"green\");\n//     return showArgHints(cm.state, cm, argPos);\n//   }\n//   // cm.state.cachedArgHints = {\n//   //   start: start,\n//   //   doc: cm.getDoc()\n//   // };\n//   lively.warn(\"calculate anew\");\n\n//   // cm.state.request(cm, {type: \"type\", preferFunction: true, end: start}, function(error, data) {\n//   //   cm.state.cachedArgHints = {\n//   //     start: start,\n//   //     type: parseFnType(data.type),\n//   //     name: data.exprName || data.name || \"fn\",\n//   //     guess: data.guess,\n//   //     doc: cm.getDoc()\n//   //   };\n//   //   showArgHints(cm.state, cm, argPos);\n//   // });\n\n//   let cmEditor = cm;\n//   let livelyCodeMirror = lcm;\n//   let cursorPosition = cmEditor.getCursor();\n\n//   try {\n//     let data = await serverWrapper.request({\n//       query: {\n//         type: \"type\",\n//         preferFunction: true,\n//         file: livelyCodeMirror.getTargetModule(),\n//         end: start\n//       },\n//       files: [{\n//         type: 'full',\n//         name: livelyCodeMirror.getTargetModule(),\n//         text: livelyCodeMirror.value\n//       }],\n//       //timeout: 10 * 1000\n//     });\n//     //if (!data.type || !(/^fn\\(/).test(data.type)) return;\n//     cm.state.cachedArgHints = {\n//       start: start,\n//       type: parseFnType(data.type),\n//       name: data.exprName || data.name || \"fn\",\n//       guess: data.guess,\n//       doc: cm.getDoc()\n//     };\n//     showArgHints({\n//       cachedArgHints: cm.state.cachedArgHints\n//     });\n//     //showContextInfo(cmEditor, response);\n//   } catch(error) {\n//     lively.error(\"ARG\", error.message)\n//     showError(cmEditor, error);\n//   }\n// }\n\n// function showArgHints(ts, cm, pos) {\n//   return;\n//   return lively.notify(ts.cachedArgHints.type, undefined, undefined, undefined, \"green\");\n//   closeArgHints(cm);\n\n//   var cache = ts.cachedArgHints, tp = cache.type;\n//   var tip = elt(\"span\", cache.guess ? cls + \"fhint-guess\" : null,\n//                 elt(\"span\", cls + \"fname\", cache.name), \"(\");\n//   for (var i = 0; i < tp.args.length; ++i) {\n//     if (i) tip.appendChild(document.createTextNode(\", \"));\n//     var arg = tp.args[i];\n//     tip.appendChild(elt(\"span\", cls + \"farg\" + (i == pos ? \" \" + cls + \"farg-current\" : \"\"), arg.name || \"?\"));\n//     if (arg.type != \"?\") {\n//       tip.appendChild(document.createTextNode(\":\\u00a0\"));\n//       tip.appendChild(elt(\"span\", cls + \"type\", arg.type));\n//     }\n//   }\n//   tip.appendChild(document.createTextNode(tp.rettype ? \") ->\\u00a0\" : \")\"));\n//   if (tp.rettype) tip.appendChild(elt(\"span\", cls + \"type\", tp.rettype));\n//   var place = cm.cursorCoords(null, \"page\");\n//   ts.activeArgHints = makeTooltip(place.right + 1, place.bottom, tip);\n// }\n\n// function parseFnType(text) {\n//   lively.notify(\"parse fn\")\n//   var args = [], pos = 3;\n\n//   function skipMatching(upto) {\n//     var depth = 0, start = pos;\n//     for (;;) {\n//       var next = text.charAt(pos);\n//       if (upto.test(next) && !depth) return text.slice(start, pos);\n//       if (/[{\\[\\(]/.test(next)) ++depth;\n//       else if (/[}\\]\\)]/.test(next)) --depth;\n//       ++pos;\n//     }\n//   }\n\n//   // Parse arguments\n//   if (text.charAt(pos) != \")\") for (;;) {\n//     var name = text.slice(pos).match(/^([^, \\(\\[\\{]+): /);\n//     if (name) {\n//       pos += name[0].length;\n//       name = name[1];\n//     }\n//     args.push({name: name, type: skipMatching(/[\\),]/)});\n//     if (text.charAt(pos) == \")\") break;\n//     pos += 2;\n//   }\n\n//   var rettype = text.slice(pos).match(/^\\) -> (.*)$/);\n\n//   return {args: args, rettype: rettype && rettype[1]};\n// }\n\n// function closeArgHints(ts) {\n//   if (ts.state.activeArgHints) {\n//     remove(ts.state.activeArgHints);\n//     ts.state.activeArgHints = null;\n//   }\n// }\n\nexport class TernCodeMirrorWrapper {\n  static loadDefinition(fileName) {\n    return fetch(`src/external/aexpr/tern/${fileName}`).then(res => res.json());\n  }\n  static async initTernServer() {\n    return new tern.Server({\n      getFile(fileName, callback) {\n        fetch(fileName)\n          .then(res => res.text())\n          .then(text => callback(null, text))\n          .catch(callback);\n      },\n      async: true,\n      // ecmaVersion: 6,\n      defs: [\n        await this.loadDefinition('browser.json'),\n        await this.loadDefinition('chai.json'),\n        await this.loadDefinition('ecmascript.json')\n      ],\n      plugins: {\n        es_modules: true\n      }\n    });\n  }\n  static async ternServer() {\n    return this._ternServerPromise = this._ternServerPromise || this.initTernServer();\n  }\n\n  static async request(req) {\n    let ts = await this.ternServer();\n    return new Promise((resolve, reject) => {\n      ts.request(req, (error, response) => {\n        if(error) {\n          lively.error(error);\n          reject(error);\n        } else {\n          resolve(response);\n        }\n      });\n    });\n  }\n\n  static async showType(cmEditor, livelyCodeMirror) {\n    let cursorPosition = cmEditor.getCursor();\n\n    try {\n      let response = await this.request({\n        query: {\n          type: \"type\",\n          file: livelyCodeMirror.getTargetModule(),\n          end: cursorPosition,\n          start: undefined, // #TODO: improve by checking for selections first\n          lineCharPositions: true\n        },\n        files: [{\n          type: 'full',\n          name: livelyCodeMirror.getTargetModule(),\n          text: livelyCodeMirror.value\n\n        }],\n        //timeout: 10 * 1000\n      });\n      showContextInfo(cmEditor, response);\n    } catch(error) {\n      showError(cmEditor, error);\n    }\n  }\n  static updateArgHints(cmEditor, livelyCodeMirror) {\n    // #TODO: implement efficiently\n    //updateArgHints(cmEditor, livelyCodeMirror, this)\n  }\n\n  static get jumpStack() {\n    return this._jumpStack || (this._jumpStack = []);\n  }\n  static async inner(cmEditor, livelyCodeMirror) {\n  }\n  static async moveTo(cmEditor, livelyCodeMirror, data) {\n    let targetCM = cmEditor;\n\n    // in same doc?\n    if(livelyCodeMirror.getTargetModule() !== data.file) {\n      let existingEditor = [...document.querySelectorAll(\"lively-container\")].map(ea => ea.getLivelyCodeMirror()).compact()\n        .find(livelyCodeMirror => livelyCodeMirror.getTargetModule() === data.file);\n      // jump to data.file\n      if(existingEditor) {\n        targetCM = existingEditor.editor;\n      } else {\n        let livelyEditor = await lively.openBrowser(data.file, true)\n          .then(container => container.getEditor());\n        targetCM = livelyEditor.currentEditor() //.editor;\n      }\n    }\n\n    let enclosingWindow = lively.findWindow(targetCM.getWrapperElement());\n    if(enclosingWindow && enclosingWindow.tagName === 'LIVELY-WINDOW') {\n      lively.gotoWindow(enclosingWindow, true);\n    }\n    targetCM.focus();\n\n    // go to correct location\n    targetCM.setSelection(data.start, data.end);\n  }\n\n  static async jumpToDefinition(cmEditor, livelyCodeMirror) {\n    if(!atInterestingExpression(cmEditor)) {\n      showError(cmEditor, 'No interesting variable found');\n      return;\n    }\n\n    let cursorPosition = cmEditor.getCursor();\n\n    try {\n      let data = await this.request({\n        query: {\n          type: \"definition\",\n          file: livelyCodeMirror.getTargetModule(),\n          end: cursorPosition,\n          start: undefined, // #TODO: improve by checking for selections first\n          lineCharPositions: true\n        },\n        files: [{\n          type: 'full',\n          name: livelyCodeMirror.getTargetModule(),\n          text: livelyCodeMirror.value\n        }]\n      });\n\n      // properties of response data\n      // [start, end, file, context, contextOffset, doc, url, origin]\n\n      if (data.file) {\n        this.jumpStack.push({\n          file: livelyCodeMirror.getTargetModule(),\n          start: cmEditor.getCursor(\"from\"),\n          end: cmEditor.getCursor(\"to\")\n        });\n        // ### Stackpush, then moveTo\n        this.moveTo(cmEditor, livelyCodeMirror, data);\n      } else {\n        showError(cmEditor, `Could not find a definition.`);\n      }\n    } catch(error) {\n      showError(cmEditor, error);\n    }\n  }\n  static async playgroundGetDefinition(cmEditor, livelyCodeMirror, location, callback) {\n    const r = range(location)\n\n    try {\n      let data = await this.request({\n        query: {\n          type: \"definition\",\n          file: livelyCodeMirror.getTargetModule(),\n          end: r._end.asCM(),\n          start: undefined, // #TODO: improve by checking for selections first\n          lineCharPositions: true\n        },\n        files: [{\n          type: 'full',\n          name: livelyCodeMirror.getTargetModule(),\n          text: livelyCodeMirror.value\n        }]\n      });\n\n      // properties of response data\n      // [start, end, file, context, contextOffset, doc, url, origin]\n\n      if (data.file) {\n        return data;\n      } else {\n        return;\n      }\n    } catch(error) {\n      return;\n    }\n  }\n  static async jumpBack(cmEditor, livelyCodeMirror) {\n    jumpBack(cmEditor, livelyCodeMirror, this);\n  }\n  static async showReferences(cmEditor, livelyCodeMirror) {\n    let cursorPosition = cmEditor.getCursor();\n    let me = this;\n\n    try {\n      let response = await this.request({\n        query: {\n          type: \"refs\",\n          file: livelyCodeMirror.getTargetModule(),\n          end: cursorPosition,\n          start: undefined, // #TODO: improve by checking for selections first\n          lineCharPositions: true\n        },\n        files: [{\n          type: 'full',\n          name: livelyCodeMirror.getTargetModule(),\n          text: livelyCodeMirror.value\n        }],\n        //timeout: 10 * 1000\n      });\n      lively.success(response.name)\n      if(response.refs.length === 0) {\n        showError(cmEditor, 'No reference found.');\n        return;\n      }\n\n      if(response.type) {\n        lively.success(response.type, \"Variable Scope\");\n      }\n      cmEditor.showHint({\n        hint() {\n          return {\n            list: response.refs.map(ref => {\n              return {\n                text: '',\n                displayText: fileName.call(ref.file),\n                render(Element, self, data) {\n                  //console.warn(data, self);\n                  Element.appendChild(<span><strong>{ref.file}</strong>{\n                    response.type ? ' ('+response.type+') ' : ''}({\n                    ref.start.line}:{ref.start.ch}-{\n                    ref.end.line}:{ref.end.ch})</span>);\n                },\n                hint: () => me.moveTo(cmEditor, livelyCodeMirror, ref),\n                anwser: 42\n              };\n            }),\n            from: cursorPosition,\n            to: cursorPosition\n          };\n        },\n        alignWithWord: false\n      });\n    } catch(error) {\n      showError(cmEditor, error);\n    }\n\n  }\n\n\n  static async __temp__(cm) {\n    let ts = await this.ternServer();\n\n    //   server.addFile('https://lively-kernel.org/lively4/foo/foo.js', `\n    // import { a } from './x';\n    // var d = a();\n    // d;`);\n    //   server.addFile('src/client/reactive/tern-spike/a.js');\n    //   server.addFile('https://lively-kernel.org/lively4/foo/x', `\n    // export function a() {\n    //   return document.createElement('span');\n    // }`);\n\n    server.request({\n      query: {\n        type: \"definition\",\n        file: 'src/client/reactive/tern-spike/a.js',\n        end: {\n          line: 1,\n          ch: 11\n        },\n        lineCharPositions: true\n      },\n      //files: [],\n      //timeout: 10 * 1000\n    }, (error, response) => {\n      if(error) {\n        lively.error(error);\n        reject(error);\n      } else {\n        lively.notify(response, undefined, undefined, undefined, 'green');\n        resolve(response);\n      }\n    });\n  }\n}\n\n// ###############\n// Show Type Query\n// ###############\n\nfunction showContextInfo(cm, data) {\n  var tip = <span><strong>{data.type || 'not found'}</strong></span>;\n  if(data.doc) {\n    tip.appendChild(document.createTextNode(' - ' + data.doc));\n  }\n  if(data.url) {\n    tip.appendChild(document.createTextNode(' '));\n    tip.appendChild(<a href={data.url} target=\"_blank\">[docs]</a>);\n  }\n  tempTooltip(cm, tip);\n}\n\nfunction showError(cm, msg) {\n  tempTooltip(cm, String(msg));\n}\n\nfunction tempTooltip(cm, content) {\n  if (cm.state.ternTooltip) remove(cm.state.ternTooltip);\n  let { right, bottom } = cm.cursorCoords(undefined, 'local');\n  let tip = cm.state.ternTooltip = makeTooltip(right + 1, bottom, content);\n  cm.getWrapperElement().appendChild(tip);\n  let mouseOnTip = false;\n  let old = false;\n  function maybeClear() {\n    old = true;\n    if (!mouseOnTip) clear();\n  }\n  function clear() {\n    cm.state.ternTooltip = null;\n    if (!tip.parentNode) return;\n    cm.off(\"cursorActivity\", clear);\n    cm.off('blur', clear);\n    cm.off('scroll', clear);\n    fadeOut(tip);\n  }\n  CodeMirror.on(tip, 'mousemove', () => mouseOnTip = true);\n  CodeMirror.on(tip, 'mouseout', e => {\n    let targetElement = e.relatedTarget || e.toElement;\n    if (targetElement && !CodeMirror.contains(tip, targetElement)) {\n      if (old) {\n        clear();\n      } else {\n        mouseOnTip = false;\n      }\n    }\n  });\n  setTimeout(maybeClear, 1700);\n  cm.on(\"cursorActivity\", clear);\n  cm.on('blur', clear);\n  cm.on('scroll', clear);\n}\n\nfunction makeTooltip(x, y, content) {\n  var node = <div class=\"CodeMirror-Tern-tooltip\">{content}</div>;\n  node.style.left = x + 'px';\n  node.style.top = y + 'px';\n  return node;\n}\n\nfunction fadeOut(tooltip) {\n  tooltip.style.opacity = \"0\";\n  setTimeout(() => remove(tooltip), 1100);\n}\nfunction remove(node) {\n  var parent = node && node.parentNode;\n  if (parent) parent.removeChild(node);\n}\n\n// #####################################\n// Moving to the definition of something\n// #####################################\n\nfunction jumpBack(cmEditor, livelyCodeMirror, ternServerWrapper) {\n  let target = ternServerWrapper.jumpStack.pop();\n  if(target) {\n    ternServerWrapper.moveTo(cmEditor, livelyCodeMirror, target);\n  }\n}\n\nfunction atInterestingExpression(cm) {\n  var pos = cm.getCursor(\"end\"), tok = cm.getTokenAt(pos);\n  if (tok.start < pos.ch && tok.type == \"comment\") return false;\n  return /[\\w)\\]]/.test(cm.getLine(pos.line).slice(Math.max(pos.ch - 1, 0), pos.ch + 1));\n}\n"],"mappings":"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"}