浏览代码

Merge pull request #148 from DogeDark/fix-formatting-single-file

Fix formatting a single file with --file flag
Jon Kelley 2 年之前
父节点
当前提交
571ff5fedf
共有 2 个文件被更改,包括 29 次插入11 次删除
  1. 7 7
      extension/src/main.ts
  2. 22 4
      src/cli/autoformat/mod.rs

+ 7 - 7
extension/src/main.ts

@@ -136,28 +136,26 @@ function fmtDocument(document: vscode.TextDocument) {
 		const [editor,] = vscode.window.visibleTextEditors.filter(editor => editor.document.fileName === document.fileName);
 		if (!editor) return; // Need an editor to apply text edits.
 
-		const text = document.getText();
 		const fileDir = document.fileName.slice(0, document.fileName.lastIndexOf('\\'));
-
-		const child_proc = spawn(serverPath, ["fmt", "--file", text], {
+		const child_proc = spawn(serverPath, ["fmt", "--file", document.fileName], {
 			cwd: fileDir ? fileDir : undefined,
 		});
 
 		let result = '';
 		child_proc.stdout?.on('data', data => result += data);
 
-		type RsxEdit = {
+		/*type RsxEdit = {
 			formatted: string,
 			start: number,
 			end: number
-		}
+		}*/
 
 		child_proc.on('close', () => {
 			if (child_proc.exitCode !== 0) {
 				vscode.window.showWarningMessage(`Errors occurred while formatting. Make sure you have the most recent Dioxus-CLI installed!\nDioxus-CLI exited with exit code ${child_proc.exitCode}\n\nData from Dioxus-CLI:\n${result}`);
 				return;
 			}
-			if (result.length === 0) return;
+			/*if (result.length === 0) return;
 
 			// Used for error message:
 			const originalResult = result;
@@ -245,9 +243,10 @@ function fmtDocument(document: vscode.TextDocument) {
 					undoStopAfter: false,
 					undoStopBefore: false
 				});
+		
 			} catch (err) {
 				vscode.window.showWarningMessage(`Errors occurred while formatting. Make sure you have the most recent Dioxus-CLI installed!\n${err}\n\nData from Dioxus-CLI:\n${originalResult}`);
-			}
+			}*/
 		});
 
 		child_proc.on('error', (err) => {
@@ -259,6 +258,7 @@ function fmtDocument(document: vscode.TextDocument) {
 }
 
 
+
 // I'm using the approach defined in rust-analyzer here
 //
 // We ship the server as part of the extension, but we need to handle external paths and such

+ 22 - 4
src/cli/autoformat/mod.rs

@@ -1,5 +1,5 @@
 use futures::{stream::FuturesUnordered, StreamExt};
-use std::process::exit;
+use std::{fs, process::exit};
 
 use super::*;
 
@@ -44,10 +44,28 @@ impl Autoformat {
             }
         }
 
+        // Format single file
         if let Some(file) = self.file {
-            let edits = dioxus_autofmt::fmt_file(&file);
-            let as_json = serde_json::to_string(&edits).unwrap();
-            println!("{}", as_json);
+            let file_content = fs::read_to_string(&file);
+
+            match file_content {
+                Ok(s) => {
+                    let edits = dioxus_autofmt::fmt_file(&s);
+                    let out = dioxus_autofmt::apply_formats(&s, edits);
+                    match fs::write(&file, out) {
+                        Ok(_) => {
+                            println!("formatted {}", file);
+                        }
+                        Err(e) => {
+                            eprintln!("failed to write formatted content to file: {}", e);
+                        }
+                    }
+                }
+                Err(e) => {
+                    eprintln!("failed to open file: {}", e);
+                    exit(1);
+                }
+            }
         }
 
         Ok(())