3 files changed
+74
-8
No files matched your search
Generated
+2
-2
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "dioxus",
|
"name": "dioxus",
|
||||||
"version": "0.0.2",
|
"version": "0.0.3",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "dioxus",
|
"name": "dioxus",
|
||||||
"version": "0.0.2",
|
"version": "0.0.3",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"dioxus-ext": "./pkg",
|
"dioxus-ext": "./pkg",
|
||||||
|
|||||||
@@ -22,10 +22,15 @@ pub fn format_rsx(raw: String, use_tabs: bool, indent_size: usize) -> String {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[wasm_bindgen]
|
#[wasm_bindgen]
|
||||||
pub fn format_selection(raw: String, use_tabs: bool, indent_size: usize) -> String {
|
pub fn format_selection(
|
||||||
|
raw: String,
|
||||||
|
use_tabs: bool,
|
||||||
|
indent_size: usize,
|
||||||
|
base_indent: usize,
|
||||||
|
) -> String {
|
||||||
let block = dioxus_autofmt::fmt_block(
|
let block = dioxus_autofmt::fmt_block(
|
||||||
&raw,
|
&raw,
|
||||||
0,
|
base_indent,
|
||||||
IndentOptions::new(
|
IndentOptions::new(
|
||||||
if use_tabs {
|
if use_tabs {
|
||||||
IndentType::Tabs
|
IndentType::Tabs
|
||||||
|
|||||||
@@ -57,14 +57,75 @@ function fmtSelection() {
|
|||||||
const editor = vscode.window.activeTextEditor;
|
const editor = vscode.window.activeTextEditor;
|
||||||
if (!editor) return;
|
if (!editor) return;
|
||||||
|
|
||||||
const unformatted = editor.document.getText(editor.selection);
|
if (editor.document.languageId !== "rust") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (unformatted.length == 0) {
|
let end_line = editor.selection.end.line;
|
||||||
|
|
||||||
|
// Select full lines of selection
|
||||||
|
let selection_range = new vscode.Range(
|
||||||
|
editor.selection.start.line,
|
||||||
|
0,
|
||||||
|
end_line,
|
||||||
|
editor.document.lineAt(end_line).range.end.character
|
||||||
|
);
|
||||||
|
|
||||||
|
let unformatted = editor.document.getText(selection_range);
|
||||||
|
|
||||||
|
if (unformatted.trim().length == 0) {
|
||||||
vscode.window.showWarningMessage("Please select rsx invoking this command!");
|
vscode.window.showWarningMessage("Please select rsx invoking this command!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const fileDir = editor.document.fileName.slice(0, editor.document.fileName.lastIndexOf('\\'));
|
// If number of closing braces is lower than opening braces, expand selection to end of initial block
|
||||||
|
while ((unformatted.match(/{/g) || []).length > (unformatted.match(/}/g) || []).length && end_line < editor.document.lineCount - 1) {
|
||||||
|
end_line += 1;
|
||||||
|
|
||||||
|
selection_range = new vscode.Range(
|
||||||
|
editor.selection.start.line,
|
||||||
|
0,
|
||||||
|
end_line,
|
||||||
|
editor.document.lineAt(end_line).range.end.character
|
||||||
|
);
|
||||||
|
|
||||||
|
unformatted = editor.document.getText(selection_range);
|
||||||
|
}
|
||||||
|
|
||||||
|
let tabSize: number;
|
||||||
|
if (typeof editor.options.tabSize === 'number') {
|
||||||
|
tabSize = editor.options.tabSize;
|
||||||
|
} else {
|
||||||
|
tabSize = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
let end_above = Math.max(editor.selection.start.line - 1, 0);
|
||||||
|
|
||||||
|
let lines_above = editor.document.getText(
|
||||||
|
new vscode.Range(
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
end_above,
|
||||||
|
editor.document.lineAt(end_above).range.end.character
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Calculate indent for current selection
|
||||||
|
let base_indentation = (lines_above.match(/{/g) || []).length - (lines_above.match(/}/g) || []).length - 1;
|
||||||
|
|
||||||
|
try {
|
||||||
|
let formatted = dioxus.format_selection(unformatted, !editor.options.insertSpaces, tabSize, base_indentation);
|
||||||
|
for(let i = 0; i <= base_indentation; i++) {
|
||||||
|
formatted = (editor.options.insertSpaces ? " ".repeat(tabSize) : "\t") + formatted;
|
||||||
|
}
|
||||||
|
if (formatted.length > 0) {
|
||||||
|
editor.edit(editBuilder => {
|
||||||
|
editBuilder.replace(selection_range, formatted);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
vscode.window.showErrorMessage(`Errors occurred while formatting. Make sure you have the most recent Dioxus-CLI installed and you have selected valid rsx with your cursor! \n${error}`);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,7 +143,7 @@ function fmtDocumentOnSave(e: vscode.TextDocumentWillSaveEvent) {
|
|||||||
|
|
||||||
function fmtDocument(document: vscode.TextDocument) {
|
function fmtDocument(document: vscode.TextDocument) {
|
||||||
try {
|
try {
|
||||||
if (document.languageId !== "rust" || document.uri.scheme !== "file") {
|
if (document.languageId !== "rust") {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user