forked from phcode-dev/staging.phcode.dev
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathBeautificationManager.js
More file actions
1 lines (1 loc) · 5.8 KB
/
BeautificationManager.js
File metadata and controls
1 lines (1 loc) · 5.8 KB
1
define(function(require,exports,module){const Commands=require("command/Commands"),Strings=require("strings"),StringUtils=require("utils/StringUtils"),AppInit=require("utils/AppInit"),CommandManager=require("command/CommandManager"),LanguageManager=require("language/LanguageManager"),Menus=require("command/Menus"),EditorManager=require("editor/EditorManager"),DocumentManager=require("document/DocumentManager"),ProjectManager=require("project/ProjectManager"),PreferencesManager=require("preferences/PreferencesManager"),ProviderRegistrationHandler=require("features/PriorityBasedRegistration").RegistrationHandler,PREFERENCES_BEAUTIFY_ON_SAVE="BeautifyOnSave",FAILED_EDITOR_TEXT_CHANGED="Beautify failed- editorTextChanged";let _providerRegistrationHandler=new ProviderRegistrationHandler,registerBeautificationProvider=_providerRegistrationHandler.registerProvider.bind(_providerRegistrationHandler),removeBeautificationProvider=_providerRegistrationHandler.removeProvider.bind(_providerRegistrationHandler),beautifyCommand,beautifyOnSaveCommand;function _getEnabledProviders(filepath){let language=LanguageManager.getLanguageForPath(filepath);return _providerRegistrationHandler.getProvidersForLanguageId(language.getId())}async function _getBeautifiedCodeDetails(editor){let enabledProviders=_getEnabledProviders(editor.document.file.fullPath);for(let item of enabledProviders)if(item.provider.beautifyEditorProvider&&item.provider.beautifyTextProvider)try{let beautyObject=await item.provider.beautifyEditorProvider(editor);if(beautyObject)return beautyObject}catch(e){}else console.error("Beautify providers must implement `beautifyEditorProvider` and `beautifyTextProvider` function",item);throw new Error("No Providers beautified text")}function _onActiveEditorChange(_evt,current){current&&_getEnabledProviders(current.document.file.fullPath).length?beautifyCommand.setEnabled(!0):beautifyCommand.setEnabled(!1)}function _replaceText(editor,beautyObject){if(editor.document.getText()!==beautyObject.originalText)throw new Error(FAILED_EDITOR_TEXT_CHANGED);let ranges=beautyObject.ranges||{replaceStart:{line:0,ch:0},replaceEnd:editor.getEndingCursorPos()};if(editor.document.getRange(ranges.replaceStart,ranges.replaceEnd)!==beautyObject.changedText)if(editor.hasSelection())editor.setSelection(ranges.replaceStart,ranges.replaceEnd),editor.replaceSelection(beautyObject.changedText,"around");else{let cursor=editor.getCursorPos();editor.replaceRange(beautyObject.changedText,ranges.replaceStart,ranges.replaceEnd),(beautyObject.cursorOffset||0===beautyObject.cursorOffset)&&(cursor=editor.posFromIndex(beautyObject.cursorOffset)),editor.setCursorPos(cursor.line,cursor.ch)}}function beautifyEditor(editor){return new Promise((resolve,reject)=>{editor?_getBeautifiedCodeDetails(editor).then(beautyObject=>{if(!beautyObject||!beautyObject.changedText)return void reject();let rejected=!1;editor.operation(function(){try{_replaceText(editor,beautyObject)}catch(e){rejected=!0,reject(e)}}),rejected||resolve()}).catch(e=>{reject(e)}):reject()})}async function beautifyText(textToBeautify,filePathOrFileName){let enabledProviders=_getEnabledProviders(filePathOrFileName);for(let item of enabledProviders)if(item.provider.beautifyEditorProvider&&item.provider.beautifyTextProvider)try{let beautyObject=await item.provider.beautifyTextProvider(textToBeautify,filePathOrFileName);if(beautyObject)return beautyObject}catch(e){}else console.error("Beautify providers must implement `beautifyEditorProvider` and `beautifyTextProvider` function",item);throw new Error("No Providers beautified text")}function _beautifyCommand(){let result=new $.Deferred,editor=EditorManager.getActiveEditor();if(!editor)return result.reject(),result.promise();let busyMessage=StringUtils.format(Strings.BEAUTIFY_PROJECT_BUSY_MESSAGE,editor.getFile().name);return ProjectManager.setProjectBusy(!0,busyMessage),beautifyEditor(editor).then(()=>{ProjectManager.setProjectBusy(!1,busyMessage),console.log("Beautified"),result.resolve()}).catch(e=>{let message=editor.hasSelection()?Strings.BEAUTIFY_ERROR_SELECTION:Strings.BEAUTIFY_ERROR;e.message===FAILED_EDITOR_TEXT_CHANGED&&(message=Strings.BEAUTIFY_ERROR_ORIGINAL_CHANGED),editor.displayErrorMessageAtCursor(message),ProjectManager.setProjectBusy(!1,busyMessage),console.warn("No beautify providers responded",e),result.reject()}),result.promise()}function _beautifyOnSave(_evt,doc){let editor=EditorManager.getActiveEditor();_isBeautifyOnSaveEnabled()&&editor&&editor.document.file.fullPath===doc.file.fullPath&&(editor.clearSelection(),_beautifyCommand())}function _isBeautifyOnSaveEnabled(){return"true"===PreferencesManager.getViewState(PREFERENCES_BEAUTIFY_ON_SAVE)}function _toggleBeautifyOnSave(){let beautifyOnSave=_isBeautifyOnSaveEnabled();PreferencesManager.setViewState(PREFERENCES_BEAUTIFY_ON_SAVE,`${!beautifyOnSave}`),beautifyOnSaveCommand.setChecked(!beautifyOnSave)}AppInit.appReady(function(){beautifyCommand=CommandManager.register(Strings.CMD_BEAUTIFY_CODE,Commands.EDIT_BEAUTIFY_CODE,()=>{_beautifyCommand()}),beautifyOnSaveCommand=CommandManager.register(Strings.CMD_BEAUTIFY_CODE_ON_SAVE,Commands.EDIT_BEAUTIFY_CODE_ON_SAVE,()=>{_toggleBeautifyOnSave()});let editMenu=Menus.getMenu(Menus.AppMenuBar.EDIT_MENU),editorContextMenu;editMenu.addMenuItem(Commands.EDIT_BEAUTIFY_CODE,""),editMenu.addMenuItem(Commands.EDIT_BEAUTIFY_CODE_ON_SAVE,""),Menus.getContextMenu(Menus.ContextMenuIds.EDITOR_MENU).addMenuItem(Commands.EDIT_BEAUTIFY_CODE,"",Menus.AFTER,Commands.EDIT_SELECT_ALL),beautifyOnSaveCommand.setChecked(_isBeautifyOnSaveEnabled()),EditorManager.on("activeEditorChange",_onActiveEditorChange),DocumentManager.on("documentSaved.beautificationManager",_beautifyOnSave)}),exports.registerBeautificationProvider=registerBeautificationProvider,exports.removeBeautificationProvider=removeBeautificationProvider,exports.beautifyEditor=beautifyEditor,exports.beautifyText=beautifyText});