Normalizar indentação de texto
Linhas com 2, 4 e 6 espaços são lidas como níveis 1, 2 e 3 de uma unidade de 2 espaços, e cada linha é reescrita para seguir essa unidade à risca. O que vem depois do recuo nunca é alterado. Grátis no seu navegador.
- Grátis
- Funciona no seu navegador
- Sem cadastro
- Seus dados não saem do seu aparelho
Executar grátis
Exemplo resolvido
- Texto
- def foo(): if True: bar() baz() return
- Entrada
- def foo(): if True: bar() baz() return
- Estilo de recuo
- spaces
- Unidade de recuo
- 2
- Unidade detectada
- 2
Espaços em branco iniciais inconsistentes estão entre as dores de cabeça mais comuns ao colar código em revisões, dumps de configuração e blocos de documentação. Um trecho pode misturar passos de dois e quatro espaços ou, pior, tabs em algumas linhas e espaços em outras, até um linter ou um colega rejeitar o arquivo. Este normalizador de indentação de texto aceita texto simples multilinha, classifica cada linha não vazia pela forma como a indentação inicial está escrita, detecta uma única unidade base — o máximo divisor comum das contagens de espaços, ou um tab — e reescreve cada linha para que a indentação seja um múltiplo exato dessa unidade.
Como funcionam a detecção da unidade base e a reescrita de níveis
O algoritmo primeiro normaliza finais de linha Windows CRLF e CR legados para uma única forma LF e depois divide o documento em linhas. Linhas totalmente em branco permanecem em branco e não contribuem com estilo de indentação. Para cada linha não vazia mede-se a sequência inicial de espaços e tabs: se ambos os caracteres aparecem nessa sequência, ou se outro espaço em branco Unicode aparece ali, a linha é tratada como mista e toda a solicitação falha com uma mensagem clara que indica o número da linha.
Se algumas linhas não vazias estão indentadas com espaços e outras com tabs, o documento não tem um único estilo claro e também é rejeitado — a conversão deve ser deliberada, não adivinhada. Quando toda linha indentada usa espaços, a unidade base é o máximo divisor comum de todas as contagens positivas de espaços iniciais; se nada está indentado, a unidade padrão para relatório é de dois espaços. Quando toda linha indentada usa tabs, a unidade base é um tab e cada tab inicial conta como um nível.
O nível de cada linha é então recalculado como contagem dividida pela unidade (exato para o MDC das contagens de espaços observadas, contagens inteiras de tabs no modo tab), e a linha é reescrita com um prefixo puro de espaços repetidos de comprimento nível vezes unidade de saída, ou de tabs repetidos de comprimento nível. O conteúdo após a indentação inicial nunca é alterado: espaços interiores, espaços finais e tokens de código permanecem idênticos byte a byte.
Casos de uso
Limpar código e config colados antes do commit
Desenvolvedores colam trechos com passos mistos de dois e quatro espaços; a ferramenta reescreve cada linha para uma unidade base e reporta a profundidade máxima de indentação para revisão.
Perguntas frequentes
Como a ferramenta escolhe a unidade base de indentação?
Em linhas indentadas com espaços usa o máximo divisor comum de todas as contagens positivas de espaços iniciais (unidade de relatório padrão dois quando nada está indentado). Em linhas com tabs a unidade é um tab por nível.
O que acontece se algumas linhas usam tabs e outras espaços?
Uma mistura no documento de tabs e espaços não tem um padrão único claro; converta primeiro para um só estilo e depois normalize.
Posso converter indentação de dois espaços para quatro espaços?
Os níveis detectados são preservados e cada nível é reescrito com quatro espaços.
A normalização altera o código dentro de uma linha?
Não. Só a sequência de indentação inicial é reescrita. Espaçamento interior, espaços finais e todos os caracteres que não são indentação permanecem inalterados.
O que acontece com linhas em branco e quebras de linha do Windows?
Linhas totalmente em branco continuam em branco e não contam na hora de detectar o estilo de indentação. Quebras de linha do Windows e de formatos antigos viram um único padrão antes da medição, então nunca causam divergência.
Ferramentas relacionadas
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
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)Exemplo de requisição
{
"text": "def foo():\n if True:\n bar()\n baz()"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "text.text_indentation_normalize",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Limites
max_tokens | 20000 |
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |
Notas técnicas
Quando a mesma linha ou o documento inteiro mistura tabs e espaços sem um padrão claro, a tarefa falha com invalid_input em vez de adivinhar em silêncio. O target_unit opcional permite redimensionar níveis baseados em espaços (por exemplo de dois para quatro) sem alterar a árvore lógica de profundidade.
Como funcionam a detecção da unidade base e a reescrita de níveis
O target_unit opcional aplica-se apenas a documentos com estilo de espaços: os níveis são preservados e a saída usa essa quantidade de espaços por nível, que é como você converte uma árvore de dois espaços em uma de quatro em uma única chamada. Entrada com estilo de tabs ignora target_unit para não expandir tabs em silêncio.
Contrato de entrada, campos de resposta e comportamento de erro
Prefira enviar o corpo multilinha bruto em vez de colapsar quebras de linha de antemão quando quiser semântica real de indentação por linha; uma única linha longa tem apenas uma indentação a normalizar. Envie por POST um corpo JSON com um campo de string obrigatório text (aliases input, value, string, s, content e body). O valor deve ser uma string não vazia após o trim global de espaços em branco e não deve exceder cem mil caracteres, para que uma única colagem não esgote a memória do Worker ou do navegador. O target_unit opcional é um inteiro positivo de um a trinta e dois; não inteiros e valores fora da faixa falham na validação. Em caso de sucesso a resposta devolve input como a string original, text como o resultado multilinha reescrito unido com LF, indent_style como spaces, tabs ou none, indent_unit como o tamanho efetivo da unidade de saída, detected_unit como a unidade inferida antes de qualquer override de destino, line_count como o número de linhas incluindo as em branco, indented_lines como quantas linhas tinham nível positivo, max_level como o nível de indentação mais profundo, levels como o array de profundidade inteira por linha alinhado com lines, lines como o array ordenado de strings de linha reescritas, e message como um resumo breve de estilo, unidade, contagem de linhas e nível máximo. Validação falha — text ausente, valores que não são string, conteúdo vazio, payload excessivo, target_unit inválido, mistura de tab e espaço na mesma linha, ou mistura de estilos no documento — devolve invalid_input e nunca é cobrada. O preço é um fixo de US$ 0,002 por solicitação bem-sucedida com unidade item. Ao integrar, faça assert em text ou lines para o conteúdo limpo, compare opcionalmente levels e indent_unit em regressões, e trate invalid_input como conflito de estilo do cliente em colagens mistas, não como evento de faturamento.
Quando usar esta ferramenta e como ela difere de buscas relacionadas
Use esta capacidade quando a intenção de busca for normalizar níveis de indentação de texto, corrigir indentação inconsistente online, converter uma colagem irregular de dois e quatro espaços em uma única unidade, ou detectar estilo de indentação por tab versus espaço antes de um commit. Leve em conta espaços finais e colunas de alinhamento interiores — esta ferramenta só reescreve a sequência de indentação inicial, não espaços de alinhamento dentro da linha. Não é um formatador de código completo, nem um pretty printer ciente da linguagem, nem um apagador de linhas em branco, nem um String.trim global que destruiria a estrutura intencional. Verificações de ida e volta em testes são simples: envie um bloco de três linhas com zero, dois e quatro espaços iniciais e espere indent_unit dois com levels zero, um e dois; envie blocos aninhados indentados só com tabs e espere indent_style tabs com níveis inteiros que batem com a contagem de tabs; envie de propósito uma linha que começa com tab e depois espaços, ou uma linha com tab ao lado de outra com espaços, e confirme invalid_input mencionando a mistura de tabs e espaços. Prefira str.trim_lines quando só precisar remover espaços no início e no fim de cada linha sem preservar uma árvore de profundidade; prefira data.json_format quando o payload for JSON que deve ser pretty-printed com indentação fixa; prefira esta capacidade quando humanos já escreveram texto hierárquico simples ou blocos semelhantes a código e você precisa de uma unidade base consistente. Tarefas com falha que devolvem invalid_input não consomem saldo pré-pago, o que mantém barata a validação de formulários e testes negativos de CI.
Casos de integração
Preprocessadores de CI e linters
Pipelines rejeitam cedo tabs e espaços mistos com invalid_input, ou normalizam árvores só de espaços para um target_unit do projeto antes das checagens de estilo.
Documentação, tutoriais e fixtures de exercícios
Autores e professores geram exemplos multilinha indentados de referência e casos de erro de estilo misto para editores, ferramentas LMS e testes golden.
Perguntas técnicas
Quanto custa normalizar a indentação de texto?
A ferramenta no navegador é gratuita. Solicitações de API usam saldo KIT pré-pago a US$ 0,002 por chamada bem-sucedida; entrada inválida não é cobrada.