Normalizzare indentazione testo
Righe rientrate di 2, 4 e 6 spazi vengono lette come livelli 1, 2 e 3 di un'unità di 2 spazi, e ogni riga viene riscritta per rispettarla esattamente. Ciò che segue il rientro non viene mai toccato. Gratis nel suo browser.
- Gratis
- Funziona nel suo browser
- Senza registrazione
- I suoi dati restano sul dispositivo
Esegui gratis nel browser
Esempio risolto
- Testo
- def foo(): if True: bar() baz() return
- Input
- def foo(): if True: bar() baz() return
- Stile di rientro
- spaces
- Unità di rientro
- 2
- Unità rilevata
- 2
Gli spazi bianchi iniziali incoerenti sono uno dei mal di testa più comuni quando si incolla codice in revisioni, dump di configurazione e blocchi di documentazione. Uno snippet può mescolare passi a due e quattro spazi o, peggio, tabulazioni su alcune righe e spazi su altre, finché un linter o un collega non rifiuta il file. Questo normalizzatore di indentazione del testo accetta testo semplice multilinea, classifica ogni riga non vuota in base a come è scritta l'indentazione iniziale, rileva un'unica unità di base — il massimo comun divisore dei conteggi di spazi, oppure una tabulazione — e riscrive ogni riga in modo che l'indentazione sia un multiplo esatto di tale unità.
Come funzionano il rilevamento dell'unità di base e la riscrittura dei livelli
L'algoritmo normalizza prima le terminazioni di riga Windows CRLF e CR legacy in un'unica forma LF, poi divide il documento in righe. Le righe completamente vuote restano vuote e non contribuiscono a nessuno stile di indentazione. Per ogni riga non vuota si misura la sequenza iniziale di spazi e tabulazioni: se entrambi i caratteri compaiono in quella sequenza, o se vi compare altro spazio bianco Unicode, la riga è trattata come mista e l'intera richiesta fallisce con un messaggio chiaro che indica il numero di riga.
Se alcune righe non vuote sono indentate con spazi e altre con tabulazioni, il documento non ha un unico stile chiaro ed è pure rifiutato — la conversione deve essere deliberata, non indovinata. Quando ogni riga indentata usa spazi, l'unità di base è il massimo comun divisore di tutti i conteggi positivi di spazi iniziali; se nulla è indentato, l'unità predefinita per il report è di due spazi. Quando ogni riga indentata usa tabulazioni, l'unità di base è una tabulazione e ogni tabulazione iniziale conta come un livello.
Il livello di ogni riga viene poi ricalcolato come conteggio diviso per l'unità (esatto per il MCD dei conteggi di spazi osservati, conteggi interi di tabulazioni in modalità tab), e la riga viene riscritta con un prefisso puro di spazi ripetuti di lunghezza livello per unità di output, oppure di tabulazioni ripetute di lunghezza livello. Il contenuto dopo l'indentazione iniziale non viene mai alterato: spazi interni, spazi finali e token di codice restano identici byte per byte.
Casi d'uso
Pulire codice e config incollati prima del commit
Gli sviluppatori incollano snippet con passi misti a due e quattro spazi; lo strumento riscrive ogni riga a un'unità di base e riporta la profondità massima di indentazione per la revisione.
Domande frequenti
Come sceglie lo strumento l'unità di base dell'indentazione?
Per le righe indentate con spazi usa il massimo comun divisore di tutti i conteggi positivi di spazi iniziali (unità di report predefinita due se nulla è indentato). Per le righe a tabulazioni l'unità è una tabulazione per livello.
Cosa succede se alcune righe usano tabulazioni e altre spazi?
Un mix a livello di documento di tabulazioni e spazi non ha un pattern unico chiaro; converta prima a un solo stile, poi normalizzi.
Posso convertire l'indentazione da due spazi a quattro spazi?
I livelli rilevati sono preservati e ogni livello viene riscritto con quattro spazi.
La normalizzazione modifica il codice dentro una riga?
No. Viene riscritta solo la sequenza di indentazione iniziale. Spaziatura interna, spazi finali e tutti i caratteri non di indentazione restano invariati.
Che fine fanno le righe vuote e gli a capo di Windows?
Le righe completamente vuote restano vuote e non contano nel riconoscere lo stile di indentazione. Gli a capo di Windows e dei formati più vecchi vengono uniformati prima della misura, quindi non causano mai differenze.
Strumenti correlati
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/text/text-indentation-normalize \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"def foo():\n if True:\n bar()\n baz()"}'const res = await fetch("https://api.kit.forhosting.com/text/text-indentation-normalize", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "def foo():\n if True:\n bar()\n baz()"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/text/text-indentation-normalize",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "def foo():\n if True:\n bar()\n baz()"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/text/text-indentation-normalize", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"def foo():\\n if True:\\n bar()\\n baz()"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"def foo():\n if True:\n bar()\n baz()"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/text/text-indentation-normalize", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"text": "def foo():\n if True:\n bar()\n baz()"
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "text.text_indentation_normalize",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Limiti
max_tokens | 20000 |
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |
Note tecniche
Quando la stessa riga o l'intero documento mescola tabulazioni e spazi senza un pattern chiaro, l'attività fallisce con invalid_input invece di indovinare in silenzio. Il target_unit opzionale Le consente di riscalare i livelli basati sugli spazi (ad esempio da due a quattro) senza cambiare l'albero logico di profondità.
Come funzionano il rilevamento dell'unità di base e la riscrittura dei livelli
Il target_unit opzionale si applica solo ai documenti in stile spazi: i livelli sono preservati e l'output usa quel numero di spazi per livello, che è come convertire un albero a due spazi in uno a quattro in una sola chiamata. L'input in stile tabulazioni ignora target_unit così le tabulazioni non vengono espanse in silenzio.
Contratto di input, campi di risposta e comportamento degli errori
Preferisca inviare il corpo multilinea grezzo piuttosto che collassare le newline in anticipo quando vuole una semantica reale di indentazione per riga; una singola riga lunga ha solo un'indentazione da normalizzare. Invii con POST un corpo JSON con un campo stringa obbligatorio text (alias input, value, string, s, content e body). Il valore deve essere una stringa non vuota dopo il trim globale degli spazi bianchi e non deve superare centomila caratteri, così un singolo incolla non esaurisce la memoria del Worker o del browser. Il target_unit opzionale è un intero positivo da uno a trentadue; i non interi e i valori fuori intervallo falliscono la validazione. In caso di successo la risposta restituisce input come la stringa originale, text come il risultato multilinea riscritto unito con LF, indent_style come spaces, tabs o none, indent_unit come la dimensione effettiva dell'unità di output, detected_unit come l'unità dedotta prima di qualsiasi override di destinazione, line_count come il numero di righe incluse le vuote, indented_lines come quante righe avevano un livello positivo, max_level come il livello di indentazione più profondo, levels come l'array di profondità intera per riga allineato a lines, lines come l'array ordinato delle stringhe di riga riscritte, e message come un breve riepilogo di stile, unità, conteggio righe e livello massimo. La validazione fallita — text assente, valori non stringa, contenuto vuoto, payload eccessivo, target_unit non valido, mix tab/spazio sulla stessa riga, o mix di stili a livello di documento — restituisce invalid_input e non viene mai addebitata. Il prezzo è un fisso di $0.002 per richiesta riuscita con unità item. In integrazione, asserisca su text o lines per il contenuto pulito, confronti opzionalmente levels e indent_unit per le regressioni, e tratti invalid_input come un conflitto di stile lato client su incolli misti, non come un evento di fatturazione.
Quando usare questo strumento e come differisce da ricerche affini
Usi questa capacità quando l'intento di ricerca è normalizzare i livelli di indentazione del testo, correggere indentazione incoerente online, convertire un incolla irregolare di due e quattro spazi in un'unica unità, o rilevare lo stile di indentazione a tabulazione versus spazio prima di un commit. Tenga presenti gli spazi finali e le colonne di allineamento interne — questo strumento riscrive solo la sequenza di indentazione iniziale, non gli spazi di allineamento dentro la riga. Non è un formattatore di codice completo, né un pretty printer consapevole del linguaggio, né un eliminatore di righe vuote, né un String.trim globale che distruggerebbe la struttura intenzionale. I controlli di andata e ritorno per i test sono semplici: fornisca un blocco di tre righe con zero, due e quattro spazi iniziali e si aspetti indent_unit due con levels zero, uno e due; fornisca blocchi annidati indentati solo con tabulazioni e si aspetti indent_style tabs con livelli interi che corrispondono ai conteggi di tabulazioni; invii deliberatamente una riga che inizia con tabulazione e poi spazi, o una riga a tabulazione accanto a una sorella a spazi, e confermi invalid_input che menziona il mix di tabulazioni e spazi. Preferisca str.trim_lines quando deve solo rimuovere spazi iniziali e finali da ogni riga senza preservare un albero di profondità; preferisca data.json_format quando il payload è JSON da pretty-print con indentazione fissa; preferisca questa capacità quando gli esseri umani hanno già scritto testo gerarchico semplice o blocchi simili a codice e serve un'unità di base coerente. Le attività fallite che restituiscono invalid_input non consumano saldo prepagato, il che mantiene economica la validazione dei form e i test negativi di CI.
Casi di integrazione
Preprocessori di CI e linter
Le pipeline rifiutano presto tabulazioni e spazi misti con invalid_input, oppure normalizzano alberi solo a spazi verso un target_unit di progetto prima dei controlli di stile.
Documentazione, tutorial e fixture per esercizi
Autori e docenti generano esempi multilinea indentati di riferimento e casi di errore di stile misto per editor, strumenti LMS e test golden.
Domande tecniche
Quanto costa normalizzare l'indentazione del testo?
Lo strumento nel browser è gratuito. Le richieste API usano saldo KIT prepagato a $0.002 per chiamata riuscita; l'input non valido non viene addebitato.