@yuebai008/cli
Version:
Command line interface for rapid qg-minigame development
1 lines • 1.99 kB
JavaScript
import*as Common from"../../core/common/common.js";import*as Platform from"../../core/platform/platform.js";import{formatterWorkerPool}from"./FormatterWorkerPool.js";function locationToPosition(t,n,o){return(n?t[n-1]+1:0)+o}function positionToLocation(t,n){const o=Platform.ArrayUtilities.upperBound(t,n-1,Platform.ArrayUtilities.DEFAULT_COMPARATOR);let i;return i=o?n-t[o-1]-1:n,[o,i]}export async function format(t,n,o,i=Common.Settings.Settings.instance().moduleSetting("textEditorIndent").get()){return t.isDocumentOrScriptOrStyleSheet()?formatScriptContent(n,o,i):{formattedContent:o,formattedMapping:new IdentityFormatterSourceMapping}}export async function formatScriptContent(t,n,o=Common.Settings.Settings.instance().moduleSetting("textEditorIndent").get()){const i=n.replace(/\r\n?|[\n\u2028\u2029]/g,"\n").replace(/^\uFEFF/,""),r=formatterWorkerPool(),e=await r.format(t,i,o),a=Platform.StringUtilities.findLineEndingIndexes(i),m=Platform.StringUtilities.findLineEndingIndexes(e.content),s=new FormatterSourceMappingImpl(a,m,e.mapping);return{formattedContent:e.content,formattedMapping:s}}class IdentityFormatterSourceMapping{originalToFormatted(t,n=0){return[t,n]}formattedToOriginal(t,n=0){return[t,n]}}class FormatterSourceMappingImpl{originalLineEndings;formattedLineEndings;mapping;constructor(t,n,o){this.originalLineEndings=t,this.formattedLineEndings=n,this.mapping=o}originalToFormatted(t,n){const o=locationToPosition(this.originalLineEndings,t,n||0),i=this.convertPosition(this.mapping.original,this.mapping.formatted,o);return positionToLocation(this.formattedLineEndings,i)}formattedToOriginal(t,n){const o=locationToPosition(this.formattedLineEndings,t,n||0),i=this.convertPosition(this.mapping.formatted,this.mapping.original,o);return positionToLocation(this.originalLineEndings,i)}convertPosition(t,n,o){const i=Platform.ArrayUtilities.upperBound(t,o,Platform.ArrayUtilities.DEFAULT_COMPARATOR)-1;let r=n[i]+o-t[i];return i<n.length-1&&r>n[i+1]&&(r=n[i+1]),r}}