Normaliser l'indentation texte
Des lignes indentées de 2, 4 et 6 espaces sont lues comme les niveaux 1, 2 et 3 d'une unité de 2 espaces, puis chaque ligne est réécrite pour la respecter exactement. Ce qui suit l'indentation n'est jamais modifié. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Exemple résolu
- Texte
- def foo(): if True: bar() baz() return
- Entrée
- def foo(): if True: bar() baz() return
- Style d'indentation
- spaces
- Unité d'indentation
- 2
- Unité détectée
- 2
Les espaces blancs initiaux incohérents figurent parmi les maux de tête les plus fréquents lors du collage de code dans les revues, les dumps de configuration et les blocs de documentation. Un extrait peut mélanger des pas de deux et de quatre espaces ou, pire, des tabulations sur certaines lignes et des espaces sur d'autres, jusqu'à ce qu'un linter ou un collègue rejette le fichier. Ce normaliseur d'indentation de texte accepte du texte brut multiligne, classe chaque ligne non vide selon la façon dont son indentation de tête est écrite, détecte une seule unité de base — le plus grand commun diviseur des comptes d'espaces, ou une tabulation — et réécrit chaque ligne pour que l'indentation soit un multiple exact de cette unité.
Comment fonctionnent la détection de l'unité de base et la réécriture des niveaux
L'algorithme normalise d'abord les fins de ligne Windows CRLF et CR hérités en une seule forme LF, puis découpe le document en lignes. Les lignes entièrement vides restent vides et ne contribuent à aucun style d'indentation. Pour chaque ligne non vide, la suite initiale d'espaces et de tabulations est mesurée : si les deux caractères apparaissent dans cette suite, ou si un autre espace blanc Unicode y apparaît, la ligne est traitée comme mixte et toute la requête échoue avec un message clair indiquant le numéro de ligne.
Si certaines lignes non vides sont indentées avec des espaces et d'autres avec des tabulations, le document n'a pas de style unique clair et est également rejeté — la conversion doit être délibérée, non devinée. Lorsque chaque ligne indentée utilise des espaces, l'unité de base est le plus grand commun diviseur de tous les comptes positifs d'espaces de tête ; si rien n'est indenté, l'unité par défaut pour le rapport est de deux espaces.
Lorsque chaque ligne indentée utilise des tabulations, l'unité de base est une tabulation et chaque tabulation de tête compte pour un niveau. Le niveau de chaque ligne est ensuite recalculé comme le compte divisé par l'unité (exact pour le PGCD des comptes d'espaces observés, comptes entiers de tabulations en mode tab), et la ligne est réécrite avec un préfixe pur d'espaces répétés de longueur niveau fois unité de sortie, ou de tabulations répétées de longueur niveau.
Le contenu après l'indentation de tête n'est jamais modifié : espaces intérieurs, espaces de fin et jetons de code restent identiques octet par octet.
Cas d’usage
Nettoyer le code et la config collés avant le commit
Les développeurs collent des extraits aux pas mixtes de deux et quatre espaces ; l'outil réécrit chaque ligne sur une unité de base et signale la profondeur maximale d'indentation pour la revue.
Questions fréquentes
Comment l'outil choisit-il l'unité de base d'indentation ?
Pour les lignes indentées par espaces, il utilise le plus grand commun diviseur de tous les comptes positifs d'espaces de tête (unité de rapport par défaut deux si rien n'est indenté). Pour les lignes en tabulations, l'unité est une tabulation par niveau.
Que se passe-t-il si certaines lignes utilisent des tabulations et d'autres des espaces ?
Un mélange au niveau du document de tabulations et d'espaces n'a pas de motif unique clair ; convertissez d'abord vers un seul style, puis normalisez.
Puis-je convertir une indentation de deux espaces en quatre espaces ?
Les niveaux détectés sont conservés et chaque niveau est réécrit avec quatre espaces.
La normalisation modifie-t-elle le code à l'intérieur d'une ligne ?
Non. Seule la suite d'indentation de tête est réécrite. L'espacement intérieur, les espaces de fin et tous les caractères hors indentation restent inchangés.
Que deviennent les lignes vides et les sauts de ligne Windows ?
Les lignes entièrement vides restent vides et ne comptent pas dans la détection du style d'indentation. Les sauts de ligne Windows et les formats plus anciens sont unifiés avant la mesure, ils ne créent donc jamais d'écart.
Outils associés
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre 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)Exemple de requête
{
"text": "def foo():\n if True:\n bar()\n baz()"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "text.text_indentation_normalize",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Limites
max_tokens | 20000 |
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |
Notes techniques
Lorsque la même ligne ou le document entier mélange tabulations et espaces sans motif clair, la tâche échoue avec invalid_input au lieu de deviner en silence. Le target_unit optionnel vous permet de redimensionner les niveaux basés sur les espaces (par exemple de deux à quatre) sans changer l'arbre logique de profondeur.
Comment fonctionnent la détection de l'unité de base et la réécriture des niveaux
Le target_unit optionnel ne s'applique qu'aux documents en style espaces : les niveaux sont conservés et la sortie utilise ce nombre d'espaces par niveau, ce qui permet de convertir un arbre à deux espaces en un arbre à quatre en un seul appel. L'entrée en style tabulations ignore target_unit afin de ne pas développer les tabulations en silence.
Contrat d'entrée, champs de réponse et comportement d'erreur
Préférez envoyer le corps multiligne brut plutôt que de collapser les sauts de ligne à l'avance lorsque vous voulez une sémantique réelle d'indentation par ligne ; une seule longue ligne n'a qu'une indentation à normaliser. Envoyez en POST un corps JSON avec un champ chaîne obligatoire text (alias input, value, string, s, content et body). La valeur doit être une chaîne non vide après trim global des espaces blancs et ne doit pas dépasser cent mille caractères, afin qu'un seul collage n'épuise pas la mémoire du Worker ou du navigateur. Le target_unit optionnel est un entier positif de un à trente-deux ; les non-entiers et les valeurs hors plage échouent à la validation. En cas de succès, la réponse renvoie input comme la chaîne d'origine, text comme le résultat multiligne réécrit joint avec LF, indent_style comme spaces, tabs ou none, indent_unit comme la taille effective de l'unité de sortie, detected_unit comme l'unité déduite avant tout override de cible, line_count comme le nombre de lignes y compris les vides, indented_lines comme le nombre de lignes ayant un niveau positif, max_level comme le niveau d'indentation le plus profond, levels comme le tableau de profondeur entière par ligne aligné sur lines, lines comme le tableau ordonné des chaînes de ligne réécrites, et message comme un court résumé du style, de l'unité, du nombre de lignes et du niveau maximal. Une validation échouée — text manquant, valeurs non chaîne, contenu vide, charge trop grande, target_unit invalide, mélange tabulation/espace sur la même ligne, ou mélange de styles au niveau du document — renvoie invalid_input et n'est jamais facturée. Le tarif est un forfait de $0.002 par requête réussie avec unité item. Lors de l'intégration, affirmez sur text ou lines pour le contenu nettoyé, comparez éventuellement levels et indent_unit pour les régressions, et traitez invalid_input comme un conflit de style côté client sur les collages mixtes, non comme un événement de facturation.
Quand utiliser cet outil et en quoi il diffère des recherches voisines
Utilisez cette capacité lorsque l'intention de recherche est de normaliser les niveaux d'indentation de texte, de corriger une indentation incohérente en ligne, de convertir un collage irrégulier de deux et quatre espaces en une seule unité, ou de détecter le style d'indentation tabulation versus espace avant un commit. Gardez à l'esprit les espaces de fin et les colonnes d'alignement intérieures — cet outil ne réécrit que la suite d'indentation de tête, pas les espaces d'alignement à l'intérieur d'une ligne. Ce n'est pas un formateur de code complet, ni un pretty printer conscient du langage, ni un suppresseur de lignes vides, ni un String.trim global qui détruirait la structure intentionnelle. Les contrôles aller-retour pour les tests sont simples : fournissez un bloc de trois lignes avec zéro, deux et quatre espaces de tête et attendez indent_unit deux avec levels zéro, un et deux ; fournissez des blocs imbriqués indentés uniquement en tabulations et attendez indent_style tabs avec des niveaux entiers correspondant aux comptes de tabulations ; envoyez délibérément une ligne commençant par une tabulation puis des espaces, ou une ligne en tabulation à côté d'une sœur en espaces, et confirmez invalid_input mentionnant le mélange de tabulations et d'espaces. Préférez str.trim_lines lorsque vous devez seulement retirer les espaces de tête et de fin de chaque ligne sans conserver un arbre de profondeur ; préférez data.json_format lorsque la charge est du JSON à pretty-print avec une indentation fixe ; préférez cette capacité lorsque des humains ont déjà écrit du texte hiérarchique brut ou des blocs de type code et que vous avez besoin d'une unité de base cohérente. Les tâches en échec qui renvoient invalid_input ne consomment pas le solde prépayé, ce qui maintient à bas coût la validation de formulaires et les tests négatifs de CI.
Cas d'intégration
Préprocesseurs de CI et de linters
Les pipelines rejettent tôt les mélanges de tabulations et d'espaces avec invalid_input, ou normalisent les arbres en espaces seuls vers un target_unit de projet avant les contrôles de style.
Documentation, tutoriels et fixtures d'exercices
Auteurs et enseignants génèrent des exemples multilignes indentés de référence et des cas d'erreur de style mixte pour éditeurs, outils LMS et tests golden.
Questions techniques
Combien coûte la normalisation de l'indentation de texte ?
L'outil navigateur est gratuit. Les requêtes API utilisent le solde KIT prépayé à $0.002 par appel réussi ; l'entrée invalide n'est pas facturée.