Merge pull request #148 from DogeDark/fix-formatting-single-file
Fix formatting a single file with --file flag
This commit is contained in:
2 files changed
+29
-11
No files matched your search
@@ -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
|
||||
|
||||
@@ -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(())
|
||||
|
||||
Reference in new issue
Block a user