forked from phcode-dev/staging.phcode.dev
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmain.js
More file actions
1 lines (1 loc) · 18 KB
/
Copy pathmain.js
File metadata and controls
1 lines (1 loc) · 18 KB
1
define(function(require,exports,module){var _=brackets.getModule("thirdparty/lodash"),CodeHintManager=brackets.getModule("editor/CodeHintManager"),EditorManager=brackets.getModule("editor/EditorManager"),Commands=brackets.getModule("command/Commands"),CommandManager=brackets.getModule("command/CommandManager"),LanguageManager=brackets.getModule("language/LanguageManager"),AppInit=brackets.getModule("utils/AppInit"),ExtensionUtils=brackets.getModule("utils/ExtensionUtils"),StringMatch=brackets.getModule("utils/StringMatch"),ProjectManager=brackets.getModule("project/ProjectManager"),PreferencesManager=brackets.getModule("preferences/PreferencesManager"),Strings=brackets.getModule("strings"),JSParameterHintsProvider=require("./ParameterHintsProvider").JSParameterHintsProvider,ParameterHintsManager=brackets.getModule("features/ParameterHintsManager"),HintUtils=brackets.getModule("JSUtils/HintUtils"),ScopeManager=brackets.getModule("JSUtils/ScopeManager"),Session=brackets.getModule("JSUtils/Session"),JumpToDefManager=brackets.getModule("features/JumpToDefManager"),Acorn=brackets.getModule("thirdparty/acorn/dist/acorn"),session=null,cachedCursor=null,cachedHints=null,cachedType=null,cachedToken=null,matcher=null,jsHintsEnabled=!0,hintDetailsEnabled=!0,noHintsOnDot=!1,ignoreChange,_inlineScriptLanguages=["html","php"],phProvider=new JSParameterHintsProvider;let _lspClient=null,_reinstallActiveEditorListeners=null;function _lspServesLanguage(languageId){return!!(_lspClient&&languageId&&_lspClient.isLintingProviderActive(languageId))}function _areHintsEnabled(){return!1!==PreferencesManager.get("codehint.JSHints")&&!1!==PreferencesManager.get("showCodeHints")}function setConfig(configUpdate){var config=setConfig.config;Object.keys(configUpdate).forEach(function(key){config[key]=configUpdate[key]}),ScopeManager._setConfig(configUpdate)}function getSession(){return session}function getHintResponse(hints,query,type){var trimmedQuery,formattedHints;function formatTypeDataForToken($hintObj,token){hintDetailsEnabled&&($hintObj.addClass("brackets-js-hints-with-type-details"),function _appendLink(){token.url&&$("<a></a>").appendTo($hintObj).addClass("jshint-link").attr("href",token.url).on("click",function(event){event.stopImmediatePropagation(),event.stopPropagation()})}(),token.type?"?"!==token.type.trim()&&(token.type.length<30&&$("<span>"+token.type.split("->").join(":").toString().trim()+"</span>").appendTo($hintObj).addClass("brackets-js-hints-type-details"),$("<span>"+token.type.split("->").join(":").toString().trim()+"</span>").appendTo($hintObj).addClass("jshint-description")):token.keyword&&$("<span>keyword</span>").appendTo($hintObj).addClass("brackets-js-hints-keyword"),token.doc&&($hintObj.attr("title",token.doc),$("<span></span>").text(token.doc.trim()).appendTo($hintObj).addClass("jshint-jsdoc")))}function formatHints(hints,query){return hints.map(function(token){var $hintObj=$("<span>").addClass("brackets-js-hints brackets-hints");if(!type.property&&!token.builtin&&void 0!==token.depth)switch(token.depth){case 0:$hintObj.addClass("priority-high");break;case 1:$hintObj.addClass("priority-medium");break;case 2:$hintObj.addClass("priority-low");break;default:$hintObj.addClass("priority-lowest")}return token.guess&&$hintObj.addClass("guess-hint"),token.keyword&&$hintObj.addClass("keyword-hint"),token.literal&&$hintObj.addClass("literal-hint"),token.stringRanges?token.stringRanges.forEach(function(item){item.matched?$hintObj.append($("<span>").append(_.escape(item.text)).addClass("matched-hint")):$hintObj.append(_.escape(item.text))}):$hintObj.text(token.value),$hintObj.data("token",token),formatTypeDataForToken($hintObj,token),$hintObj})}return setConfig.config.debug&&console.debug("Hints",_.pluck(hints,"label")),trimmedQuery=_.trim(query,HintUtils.SINGLE_QUOTE+HintUtils.DOUBLE_QUOTE),{hints:formattedHints=hints?formatHints(hints,trimmedQuery):[],match:null,selectInitial:!0,handleWideResults:hints.handleWideResults}}function JSHints(){}function setCachedHintContext(hints,cursor,type,token){cachedHints=hints,cachedCursor=cursor,cachedType=type,cachedToken=token}function resetCachedHintContext(){cachedHints=null,cachedCursor=null,cachedType=null,cachedToken=null}function isInlineScriptSupported(document){var language=LanguageManager.getLanguageForPath(document.file.fullPath).getId();return-1!==_inlineScriptLanguages.indexOf(language)}function isInlineScript(editor){return"javascript"===editor.getModeForSelection()}function getStringMatcher(){return matcher||(matcher=new StringMatch.StringMatcher({preferPrefixMatches:!0})),matcher}function hintsArePending(deferredHints){return deferredHints&&!deferredHints.hasOwnProperty("hints")&&"pending"===deferredHints.state()}function getSessionHints(query,cursor,type,token,$deferredHints){var hintResults=session.getHints(query,getStringMatcher());if(hintResults.needGuesses){var guessesResponse=ScopeManager.requestGuesses(session,session.editor.document);return $deferredHints||($deferredHints=$.Deferred()),guessesResponse.done(function(){if(hintsArePending($deferredHints)){setCachedHintContext((hintResults=session.getHints(query,getStringMatcher())).hints,cursor,type,token);var hintResponse=getHintResponse(cachedHints,query,type);$deferredHints.resolveWith(null,[hintResponse])}}).fail(function(){hintsArePending($deferredHints)&&$deferredHints.reject()}),$deferredHints}if(hintsArePending($deferredHints)){setCachedHintContext(hintResults.hints,cursor,type,token);var hintResponse=getHintResponse(cachedHints,query,type);return $deferredHints.resolveWith(null,[hintResponse]),null}return setCachedHintContext(hintResults.hints,cursor,type,token),getHintResponse(cachedHints,query,type)}Phoenix.isNativeApp&&brackets.getModule(["languageTools/LSPClient"],function(LSPClient){_lspClient=LSPClient,LSPClient.on(LSPClient.EVENT_LANGUAGE_SERVER_STARTED,function(){ScopeManager.handleProjectClose(),_reinstallActiveEditorListeners&&_reinstallActiveEditorListeners()}),LSPClient.on(LSPClient.EVENT_LANGUAGE_SERVER_STOPPED,function(){_reinstallActiveEditorListeners&&_reinstallActiveEditorListeners()})}),PreferencesManager.definePreference("jscodehints.detectedExclusions","array",[],{description:Strings.DESCRIPTION_DETECTED_EXCLUSIONS}),PreferencesManager.definePreference("jscodehints.inferenceTimeout","number",3e4,{description:Strings.DESCRIPTION_INFERENCE_TIMEOUT}),PreferencesManager.definePreference("jscodehints.noHintsOnDot","boolean",!1,{description:Strings.DESCRIPTION_NO_HINTS_ON_DOT}),PreferencesManager.definePreference("codehint.JSHints","boolean",!0,{description:Strings.DESCRIPTION_JS_HINTS}),PreferencesManager.definePreference("jscodehints.typedetails","boolean",!0,{description:Strings.DESCRIPTION_JS_HINTS_TYPE_DETAILS}),PreferencesManager.on("change","codehint.JSHints",function(){jsHintsEnabled=_areHintsEnabled()}),PreferencesManager.on("change","showCodeHints",function(){jsHintsEnabled=_areHintsEnabled()}),PreferencesManager.on("change","jscodehints.noHintsOnDot",function(){noHintsOnDot=!!PreferencesManager.get("jscodehints.noHintsOnDot")}),PreferencesManager.on("change","jscodehints.typedetails",function(){hintDetailsEnabled=PreferencesManager.get("jscodehints.typedetails")}),setConfig.config={},JSHints.prototype.needNewHints=function(session){var cursor=session.getCursor(),type=session.getType();return!cachedHints||!cachedCursor||!cachedType||cachedCursor.line!==cursor.line||type.property!==cachedType.property||type.context!==cachedType.context||type.showFunctionType!==cachedType.showFunctionType||type.functionCallPos&&cachedType.functionCallPos&&type.functionCallPos.ch!==cachedType.functionCallPos.ch},JSHints.prototype.shouldCloseHints=function(session){var cursor=session.getCursor(),token=session.getToken(cursor),lastToken=cachedToken;return!cachedCursor||cursor.line!==cachedCursor.line||(null===token.type&&(token=session.getNextTokenOnLine(cursor)),lastToken&&null===lastToken.type&&(lastToken=session.getNextTokenOnLine(cachedCursor)),!lastToken||!token||token.type!==lastToken.type||(token.string.length>=lastToken.string.length?0!==token.string.indexOf(lastToken.string):0!==lastToken.string.indexOf(token.string)))},JSHints.prototype.hasHints=function(editor,key){if(session&&HintUtils.hintableKey(key,!noHintsOnDot)){if(isInlineScriptSupported(session.editor.document)&&!isInlineScript(session.editor))return!1;var cursor=session.getCursor(),token=session.getToken(cursor);if(token&&HintUtils.hintable(token))return!session.isFunctionName()&&(this.needNewHints(session)&&(resetCachedHintContext(),matcher=null),!0)}return!1},JSHints.prototype.getHints=function(key){var cursor=session.getCursor(),token=session.getToken(cursor);if(token&&HintUtils.hintableKey(key,!noHintsOnDot)&&HintUtils.hintable(token)){var type=session.getType(),query=session.getQuery();if(CodeHintManager.isOpen()&&this.shouldCloseHints(session))return null;if(this.needNewHints(session)){key&&(ScopeManager.handleFileChange([{from:cursor,to:cursor,text:[key]}]),ignoreChange=!0);var scopeResponse=ScopeManager.requestHints(session,session.editor.document),$deferredHints=$.Deferred(),scopeSession=session;return scopeResponse.done(function(){hintsArePending($deferredHints)&&(scopeSession===session?getSessionHints(query,cursor,type,token,$deferredHints):$deferredHints.reject()),scopeSession=null}).fail(function(){hintsArePending($deferredHints)&&$deferredHints.reject(),scopeSession=null}),$deferredHints}if(cachedHints)return getSessionHints(query,cursor,type,token)}return null},JSHints.prototype.insertHint=function($hintObj){var hint,completion=$hintObj.data("token").value,cursor=session.getCursor(),query=session.getQuery(),start={line:cursor.line,ch:cursor.ch-query.length},end={line:cursor.line,ch:cursor.ch},invalidPropertyName=!1;if(session.getType().property){var tokenizer=Acorn.tokenizer(completion),currentToken=tokenizer.getToken();if(currentToken.type===Acorn.tokTypes.name||currentToken.type.keyword?(currentToken=tokenizer.getToken()).type!==Acorn.tokTypes.eof&&(invalidPropertyName=!0):invalidPropertyName=!0,invalidPropertyName){var dotCursor=session.findPreviousDot();dotCursor&&(completion='["'+completion+'"]',start.line=dotCursor.line,start.ch=dotCursor.ch-1)}}return session.editor._codeMirror.replaceRange(completion,start,end),!1},AppInit.appReady(function(){function initializeSession(editor,previousEditor){session=new Session(editor),ScopeManager.handleEditorChange(session,editor.document,previousEditor?previousEditor.document:null),phProvider.setSession(session),cachedHints=null}function installEditorListeners(editor,previousEditor){if(resetCachedHintContext(),!jsHintsEnabled)return;const languageId=editor?LanguageManager.getLanguageForPath(editor.document.file.fullPath).getId():null;_lspServesLanguage(languageId)&&-1===_inlineScriptLanguages.indexOf(languageId)?session=null:editor&&HintUtils.isSupportedLanguage(languageId)?(initializeSession(editor,previousEditor),editor.on(HintUtils.eventName("change"),function(event,editor,changeList){ignoreChange||ScopeManager.handleFileChange(changeList),ignoreChange=!1})):session=null}function uninstallEditorListeners(editor){editor&&editor.off(HintUtils.eventName("change"))}function handleActiveEditorChange(event,current,previous){previous&&previous.document.off(HintUtils.eventName("languageChanged")),current&¤t.document.on(HintUtils.eventName("languageChanged"),function(){uninstallEditorListeners(current),installEditorListeners(current)}),uninstallEditorListeners(previous),installEditorListeners(current,previous)}function JSJumpToDefProvider(){}const jumpTokenTypes=["variable","variable-2","variable-3","property","def","string"];function quickEditHelper(){var offset=session.getCursor(),response;return ScopeManager.requestJumptoDef(session,session.editor.document,offset)}JSJumpToDefProvider.prototype.canJumpToDef=function(editor,optionalPosition){let pos=optionalPosition||editor.getCursorPos(),token=editor.getToken(pos);return!!(token&&token.type&&jumpTokenTypes.includes(token.type))},JSJumpToDefProvider.prototype.doJumpToDef=function(){var handleJumpResponse;if(!session||"javascript"!==session.editor.getModeForSelection())return null;var result=new $.Deferred;function requestJumpToDef(session,offset){var response=ScopeManager.requestJumptoDef(session,session.editor.document,offset);response.hasOwnProperty("promise")&&response.promise.done(handleJumpResponse).fail(function(){result.reject()})}function setJumpSelection(start,end){session.editor.setSelection(start,end,!0),result.resolve(!0)}handleJumpResponse=function(jumpResp){if(jumpResp.resultFile)if(jumpResp.resultFile!==jumpResp.file){var resolvedPath=ScopeManager.getResolvedPath(jumpResp.resultFile);resolvedPath&&CommandManager.execute(Commands.FILE_OPEN,{fullPath:resolvedPath}).done(function(){setJumpSelection(jumpResp.start,jumpResp.end)})}else setJumpSelection(jumpResp.start,jumpResp.end);else result.reject()};let offset=session.getCursor();return requestJumpToDef(session,offset),result.promise()},brackets._jsCodeHintsHelper=quickEditHelper,brackets._configureJSCodeHints=setConfig,ExtensionUtils.loadStyleSheet(module,"styles/brackets-js-hints.css"),EditorManager.on(HintUtils.eventName("activeEditorChange"),handleActiveEditorChange),ProjectManager.on("beforeProjectClose",function(){ScopeManager.handleProjectClose()}),ProjectManager.on("projectOpen",function(){ScopeManager.handleProjectOpen()}),_reinstallActiveEditorListeners=function(){const activeEditor=EditorManager.getActiveEditor();uninstallEditorListeners(activeEditor),installEditorListeners(activeEditor)},installEditorListeners(EditorManager.getActiveEditor()),ParameterHintsManager.registerHintProvider(phProvider,["javascript"],0);var jdProvider=new JSJumpToDefProvider;JumpToDefManager.registerJumpToDefProvider(jdProvider,["javascript"],0);var jsHints=new JSHints;CodeHintManager.registerHintProvider(jsHints,HintUtils.SUPPORTED_LANGUAGES,0),exports.getSession=getSession,exports.jsHintProvider=jsHints,exports._phProvider=phProvider,window.phProvider=phProvider,exports.initializeSession=initializeSession,exports.handleJumpToDefinition=jdProvider.doJumpToDef.bind(jdProvider)})}),define("HintUtils2",function(require,exports,module){function formatParameterHint(params,appendSeparators,appendParameter,typesOnly){var result="",pendingOptional=!1;return params.forEach(function(value,i){var param=value.type,separators="";value.isOptional&&(pendingOptional&&(separators+="]"),pendingOptional=!0),i>0&&(separators+=", "),value.isOptional&&(separators+="["),appendSeparators&&appendSeparators(separators),result+=separators,typesOnly||(param+=" "+value.name),appendParameter&&appendParameter(param,i),result+=param}),pendingOptional&&(appendSeparators&&appendSeparators("]"),result+="]"),result}exports.formatParameterHint=formatParameterHint}),define("ParameterHintsProvider",function(require,exports,module){var ScopeManager=brackets.getModule("JSUtils/ScopeManager"),OVERWRITE_EXISTING_HINT=!1;function JSParameterHintsProvider(){this.hintState={},this.hintStack=[],this.preserveHintStack=null,this.session=null}JSParameterHintsProvider.prototype.setSession=function(value){this.session=value},JSParameterHintsProvider.prototype.isHintDisplayed=function(){return!0===this.hintState.visible},JSParameterHintsProvider.prototype.pushHintOnStack=function(){this.hintStack.push(this.hintState)},JSParameterHintsProvider.prototype.popHintFromStack=function(){return this.hintStack.length>0&&(this.hintState=this.hintStack.pop(),this.hintState.visible=!1,!0)},JSParameterHintsProvider.prototype.clearFunctionHintStack=function(){this.hintStack=[]},JSParameterHintsProvider.prototype.hasFunctionCallPosChanged=function(functionCallPos){var oldFunctionCallPos=this.hintState.functionCallPos;return void 0===oldFunctionCallPos||oldFunctionCallPos.line!==functionCallPos.line||oldFunctionCallPos.ch!==functionCallPos.ch},JSParameterHintsProvider.prototype.cleanHintState=function(){this.hintState.visible&&(this.preserveHintStack||this.clearFunctionHintStack())},JSParameterHintsProvider.prototype._getParameterHint=function(pushExistingHint,hint,functionInfo){var result=$.Deferred(),pushHint;if(!(functionInfo=functionInfo||this.session.getFunctionInfo()).inFunctionCall)return this.cleanHintState(),result.reject(null);if(this.hasFunctionCallPosChanged(functionInfo.functionCallPos))pushExistingHint&&this.isHintDisplayed()&&(this.pushHintOnStack(),this.preserveHintStack=!0),this.cleanHintState(),this.preserveHintStack=!1;else if(this.isHintDisplayed())return result.reject(null);this.hintState.functionCallPos=functionInfo.functionCallPos;var request=null;hint?(this.session.setFnType(hint),(request=$.Deferred()).resolveWith(null,[hint])):request=ScopeManager.requestParameterHint(this.session,functionInfo.functionCallPos);var self=this;return request.done(function(fnType){var hints=self.session.getParameterHint(functionInfo.functionCallPos);hints.functionCallPos=functionInfo.functionCallPos,result.resolve(hints)}).fail(function(){self.hintState={},result.reject(null)}),result},JSParameterHintsProvider.prototype.hasParameterHints=function(){var functionInfo;return this.session.getFunctionInfo().inFunctionCall},JSParameterHintsProvider.prototype.getParameterHints=function(explicit,onCursorActivity){var functionInfo=this.session.getFunctionInfo(),result=null;if(!onCursorActivity){if(functionInfo.inFunctionCall){var token=this.session.getToken();if(token&&"("===token.string||explicit)return this._getParameterHint()}else this.cleanHintState();return $.Deferred().reject(null)}if(!functionInfo.inFunctionCall)return this.cleanHintState(),$.Deferred().reject(null);if(this.hasFunctionCallPosChanged(functionInfo.functionCallPos))if(this.popHintFromStack()){var poppedFunctionCallPos=this.hintState.functionCallPos,currentFunctionCallPos=this.functionInfo.functionCallPos;if(poppedFunctionCallPos.line===currentFunctionCallPos.line&&poppedFunctionCallPos.ch===currentFunctionCallPos.ch)return this.preserveHintStack=!0,result=this._getParameterHint(!1,this.hintState.fnType,functionInfo),this.preserveHintStack=!1,result}else this.cleanHintState();var hints=this.session.getParameterHint(functionInfo.functionCallPos);return hints.functionCallPos=functionInfo.functionCallPos,$.Deferred().resolve(hints)},exports.JSParameterHintsProvider=JSParameterHintsProvider});