forked from phcode-dev/staging.phcode.dev
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathDefaultProviders.js
More file actions
1 lines (1 loc) · 9.76 KB
/
DefaultProviders.js
File metadata and controls
1 lines (1 loc) · 9.76 KB
1
define(function(require,exports,module){var _=brackets.getModule("thirdparty/lodash"),EditorManager=require("editor/EditorManager"),DocumentManager=require("document/DocumentManager"),ExtensionUtils=require("utils/ExtensionUtils"),CommandManager=require("command/CommandManager"),Commands=require("command/Commands"),TokenUtils=require("utils/TokenUtils"),StringMatch=require("utils/StringMatch"),CodeInspection=require("language/CodeInspection"),PathConverters=require("languageTools/PathConverters"),matcher=new StringMatch.StringMatcher({preferPrefixMatches:!0});function setClient(client){client&&(this.client=client)}function CodeHintsProvider(client){this.client=client,this.query="",this.ignoreQuery=["-","->",">",":","::","(","()",")","[","[]","]","{","{}","}"]}function formatTypeDataForToken($hintObj,token){$hintObj.addClass("brackets-hints-with-type-details"),token.detail?"?"!==token.detail.trim()&&(token.detail.length<30&&$("<span>"+token.detail.split("->").join(":").toString().trim()+"</span>").appendTo($hintObj).addClass("brackets-hints-type-details"),$("<span>"+token.detail.split("->").join(":").toString().trim()+"</span>").appendTo($hintObj).addClass("hint-description")):token.keyword&&$("<span>keyword</span>").appendTo($hintObj).addClass("brackets-hints-keyword"),token.documentation&&($hintObj.attr("title",token.documentation),$("<span></span>").text(token.documentation.trim()).appendTo($hintObj).addClass("hint-doc"))}function filterWithQueryAndMatcher(hints,query){var matchResults;return $.map(hints,function(hint){var searchResult=matcher.match(hint.label,query);if(searchResult)for(var key in hint)searchResult[key]=hint[key];return searchResult})}function ParameterHintsProvider(client){this.client=client}function setJumpPosition(curPos){EditorManager.getCurrentFullEditor().setCursorPos(curPos.line,curPos.ch,!0)}function JumpToDefProvider(client){this.client=client}function LintingProvider(){this._results=new Map,this._promiseMap=new Map,this._validateOnType=!1}function serverRespToSearchModelFormat(msgObj){var referenceModel={},result=$.Deferred();if(!(msgObj&&msgObj.length&&msgObj.cursorPos))return result.reject();referenceModel.results={},referenceModel.numFiles=0;var fulfilled=0;return msgObj.forEach((element,i)=>{var filePath=PathConverters.uriToPath(element.uri);DocumentManager.getDocumentForPath(filePath).done(function(doc){var startRange={line:element.range.start.line,ch:element.range.start.character},endRange={line:element.range.end.line,ch:element.range.end.character},match={start:startRange,end:endRange,highlightOffset:0,line:doc.getLine(element.range.start.line)};referenceModel.results[filePath]||(referenceModel.numFiles=referenceModel.numFiles+1,referenceModel.results[filePath]={matches:[]}),referenceModel.queryInfo&&msgObj.cursorPos.line!==startRange.line||(referenceModel.queryInfo=doc.getRange(startRange,endRange)),referenceModel.results[filePath].matches.push(match)}).always(function(){++fulfilled===msgObj.length&&(referenceModel.numMatches=msgObj.length,referenceModel.allResultsAvailable=!0,result.resolve(referenceModel))})}),result.promise()}function ReferencesProvider(client){this.client=client}ExtensionUtils.loadStyleSheet(module,"styles/default_provider_style.css"),CodeHintsProvider.prototype.setClient=setClient,CodeHintsProvider.prototype.hasHints=function(editor,implicitChar){if(!this.client)return!1;var serverCapabilities=this.client.getServerCapabilities();return!(!serverCapabilities||!serverCapabilities.completionProvider)},CodeHintsProvider.prototype.getHints=function(implicitChar){if(!this.client)return null;var editor=EditorManager.getActiveEditor(),pos=editor.getCursorPos(),docPath=editor.document.file._path,$deferredHints=$.Deferred(),self=this;return this.client.requestHints({filePath:docPath,cursorPos:pos}).done(function(msgObj){var context=TokenUtils.getInitialContext(editor._codeMirror,pos),hints=[];if(self.query=context.token.string.slice(0,context.pos.ch-context.token.start),msgObj){var res,filteredHints=filterWithQueryAndMatcher(msgObj.items,self.query);StringMatch.basicMatchSort(filteredHints),filteredHints.forEach(function(element){var $fHint=$("<span>").addClass("brackets-hints");element.stringRanges?element.stringRanges.forEach(function(item){item.matched?$fHint.append($("<span>").append(_.escape(item.text)).addClass("matched-hint")):$fHint.append(_.escape(item.text))}):$fHint.text(element.label),$fHint.data("token",element),formatTypeDataForToken($fHint,element),hints.push($fHint)})}$deferredHints.resolve({hints:hints})}).fail(function(){$deferredHints.reject()}),$deferredHints},CodeHintsProvider.prototype.insertHint=function($hint){var editor=EditorManager.getActiveEditor(),cursor=editor.getCursorPos(),token=$hint.data("token"),txt=null,query=this.query,shouldIgnoreQuery,inclusion=this.ignoreQuery.includes(query)?"":query,start={line:cursor.line,ch:cursor.ch-inclusion.length},end={line:cursor.line,ch:cursor.ch};return txt=token.label,token.textEdit&&token.textEdit.newText&&(txt=token.textEdit.newText,start={line:token.textEdit.range.start.line,ch:token.textEdit.range.start.character},end={line:token.textEdit.range.end.line,ch:token.textEdit.range.end.character}),editor&&editor.document.replaceRange(txt,start,end),!1},ParameterHintsProvider.prototype.setClient=setClient,ParameterHintsProvider.prototype.hasParameterHints=function(editor,implicitChar){if(!this.client)return!1;var serverCapabilities=this.client.getServerCapabilities();return!(!serverCapabilities||!serverCapabilities.signatureHelpProvider)},ParameterHintsProvider.prototype.getParameterHints=function(){if(!this.client)return null;var editor=EditorManager.getActiveEditor(),pos=editor.getCursorPos(),docPath=editor.document.file._path,$deferredHints=$.Deferred();return this.client.requestParameterHints({filePath:docPath,cursorPos:pos}).done(function(msgObj){let paramList=[],label,activeParameter;if(msgObj){let res;res=msgObj.signatures,activeParameter=msgObj.activeParameter,res&&res.length?(res.forEach(function(element){let param;label=element.documentation,element.parameters.forEach(ele=>{paramList.push({label:ele.label,documentation:ele.documentation})})}),$deferredHints.resolve({parameters:paramList,currentIndex:activeParameter,functionDocumentation:label})):$deferredHints.reject()}else $deferredHints.reject()}).fail(function(){$deferredHints.reject()}),$deferredHints},JumpToDefProvider.prototype.setClient=setClient,JumpToDefProvider.prototype.canJumpToDef=function(editor,implicitChar){if(!this.client)return!1;var serverCapabilities=this.client.getServerCapabilities();return!(!serverCapabilities||!serverCapabilities.definitionProvider)},JumpToDefProvider.prototype.doJumpToDef=function(){if(!this.client)return null;var editor=EditorManager.getFocusedEditor(),pos=editor.getCursorPos(),docPath=editor.document.file._path,docPathUri=PathConverters.pathToUri(docPath),$deferredHints=$.Deferred();return this.client.gotoDefinition({filePath:docPath,cursorPos:pos}).done(function(msgObj){if(Array.isArray(msgObj)&&(msgObj=msgObj[msgObj.length-1]),msgObj&&msgObj.range){var docUri=msgObj.uri,startCurPos={};if(startCurPos.line=msgObj.range.start.line,startCurPos.ch=msgObj.range.start.character,docUri!==docPathUri){let documentPath=PathConverters.uriToPath(docUri);CommandManager.execute(Commands.FILE_OPEN,{fullPath:documentPath}).done(function(){setJumpPosition(startCurPos),$deferredHints.resolve()})}else setJumpPosition(startCurPos),$deferredHints.resolve()}}).fail(function(){$deferredHints.reject()}),$deferredHints},LintingProvider.prototype.setClient=setClient,LintingProvider.prototype.clearExistingResults=function(filePath){var filePathProvided;!!filePath?(this._results.delete(filePath),this._promiseMap.delete(filePath)):(this._results.clear(),this._promiseMap.clear())},LintingProvider.prototype.setInspectionResults=function(msgObj){let diagnostics=msgObj.diagnostics,filePath=PathConverters.uriToPath(msgObj.uri),errors=[];if(errors=diagnostics.map(function(obj){return{pos:{line:obj.range.start.line,ch:obj.range.start.character},message:obj.message,type:1===obj.severity?CodeInspection.Type.ERROR:2===obj.severity?CodeInspection.Type.WARNING:CodeInspection.Type.META}}),this._results.set(filePath,{errors:errors}),this._promiseMap.get(filePath)&&(this._promiseMap.get(filePath).resolve(this._results.get(filePath)),this._promiseMap.delete(filePath)),this._validateOnType){var editor=EditorManager.getActiveEditor(),docPath;filePath===(editor?editor.document.file._path:"")&&CodeInspection.requestRun()}},LintingProvider.prototype.getInspectionResultsAsync=function(fileText,filePath){var result=$.Deferred();return this._results.get(filePath)?result.resolve(this._results.get(filePath)):(this._promiseMap.set(filePath,result),result)},LintingProvider.prototype.getInspectionResults=function(fileText,filePath){return this._results.get(filePath)},ReferencesProvider.prototype.setClient=setClient,ReferencesProvider.prototype.hasReferences=function(){if(!this.client)return!1;var serverCapabilities=this.client.getServerCapabilities();return!(!serverCapabilities||!serverCapabilities.referencesProvider)},ReferencesProvider.prototype.getReferences=function(hostEditor,curPos){var editor=hostEditor||EditorManager.getActiveEditor(),pos=curPos||editor?editor.getCursorPos():null,docPath=editor.document.file._path,result=$.Deferred();return this.client?(this.client.findReferences({filePath:docPath,cursorPos:pos}).done(function(msgObj){msgObj&&msgObj.length?(msgObj.cursorPos=pos,serverRespToSearchModelFormat(msgObj).done(result.resolve).fail(result.reject)):result.reject()}).fail(function(){result.reject()}),result.promise()):result.reject()},exports.CodeHintsProvider=CodeHintsProvider,exports.ParameterHintsProvider=ParameterHintsProvider,exports.JumpToDefProvider=JumpToDefProvider,exports.LintingProvider=LintingProvider,exports.ReferencesProvider=ReferencesProvider,exports.serverRespToSearchModelFormat=serverRespToSearchModelFormat});