Repository navigation
Expand file tree
/
Copy pathcomplete_strings.js
More file actions
1 lines (1 loc) · 1.62 KB
/
Copy pathcomplete_strings.js
File metadata and controls
1 lines (1 loc) · 1.62 KB
1
!function(mod){"object"==typeof exports&&"object"==typeof module?mod(require("../lib/infer"),require("../lib/tern"),require("acorn-walk")):"function"==typeof define&&define.amd?define(["../lib/infer","../lib/tern","acorn-walk/dist/walk"],mod):mod(tern,tern,acorn.walk)}(function(infer,tern,walk){"use strict";function postParse(ast){var data=infer.cx().parent.mod.completeStrings;walk.simple(ast,{Literal:function(node){"string"==typeof node.value&&node.value&&node.value.length<data.maxLen&&(data.seen[node.value]=ast.sourceFile.name)}})}function complete(file,query){var pos=tern.resolvePos(file,query.end),lit=infer.findExpressionAround(file.ast,null,pos,file.scope,"Literal");if(lit&&"string"==typeof lit.node.value){var before=lit.node.value.slice(0,pos-lit.node.start-1),matches=[],seen=infer.cx().parent.mod.completeStrings.seen;for(var str in seen)if(str.length>before.length&&0==str.indexOf(before))if(query.types||query.docs||query.urls||query.origins){var rec={name:JSON.stringify(str),displayName:str};matches.push(rec),query.types&&(rec.type="string"),query.origins&&(rec.origin=seen[str])}else matches.push(JSON.stringify(str));return matches.length?{start:tern.outputPos(query,file,lit.node.start),end:tern.outputPos(query,file,pos+(file.text.charAt(pos)==file.text.charAt(lit.node.start)?1:0)),isProperty:!1,completions:matches}:void 0}}tern.registerPlugin("complete_strings",function(server,options){server.mod.completeStrings={maxLen:options&&options.maxLength||15,seen:Object.create(null)},server.on("reset",function(){server.mod.completeStrings.seen=Object.create(null)}),server.on("postParse",postParse),server.on("completion",complete)})});