Browse Source

Merge pull request #1501 from RooVetGit/strip_all_boms

Strip all BOMs
Matt Rubens 10 months ago
parent
commit
10fca7b404
1 changed files with 12 additions and 2 deletions
  1. 12 2
      src/integrations/editor/DiffViewProvider.ts

+ 12 - 2
src/integrations/editor/DiffViewProvider.ts

@@ -105,7 +105,7 @@ export class DiffViewProvider {
 		const edit = new vscode.WorkspaceEdit()
 		const edit = new vscode.WorkspaceEdit()
 		const rangeToReplace = new vscode.Range(0, 0, endLine + 1, 0)
 		const rangeToReplace = new vscode.Range(0, 0, endLine + 1, 0)
 		const contentToReplace = accumulatedLines.slice(0, endLine + 1).join("\n") + "\n"
 		const contentToReplace = accumulatedLines.slice(0, endLine + 1).join("\n") + "\n"
-		edit.replace(document.uri, rangeToReplace, stripBom(stripBom(contentToReplace)))
+		edit.replace(document.uri, rangeToReplace, this.stripAllBOMs(contentToReplace))
 		await vscode.workspace.applyEdit(edit)
 		await vscode.workspace.applyEdit(edit)
 		// Update decorations
 		// Update decorations
 		this.activeLineController.setActiveLine(endLine)
 		this.activeLineController.setActiveLine(endLine)
@@ -132,7 +132,7 @@ export class DiffViewProvider {
 			finalEdit.replace(
 			finalEdit.replace(
 				document.uri,
 				document.uri,
 				new vscode.Range(0, 0, document.lineCount, 0),
 				new vscode.Range(0, 0, document.lineCount, 0),
-				stripBom(stripBom(accumulatedContent)),
+				this.stripAllBOMs(accumulatedContent),
 			)
 			)
 			await vscode.workspace.applyEdit(finalEdit)
 			await vscode.workspace.applyEdit(finalEdit)
 			// Clear all decorations at the end (after applying final edit)
 			// Clear all decorations at the end (after applying final edit)
@@ -341,6 +341,16 @@ export class DiffViewProvider {
 		}
 		}
 	}
 	}
 
 
+	private stripAllBOMs(input: string): string {
+		let result = input
+		let previous
+		do {
+			previous = result
+			result = stripBom(result)
+		} while (result !== previous)
+		return result
+	}
+
 	// close editor if open?
 	// close editor if open?
 	async reset() {
 	async reset() {
 		this.editType = undefined
 		this.editType = undefined