Contar linhas de código, comentários e linhas vazias
Descubra quanto de um arquivo é código de fato: a função de exemplo dá 6 linhas, sendo 4 de código, 1 de comentário e 1 em branco, segundo as regras de comentário da linguagem que você escolher. 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
- Idioma
- Javascript
- Total de linhas
- 6
- Linhas em branco
- 1
- Linhas de comentário
- 1
- Linhas de código
- 4
Meça um trecho ou arquivo-fonte completo com as regras de comentários da linguagem de programação escolhida. O contador coloca cada linha física em uma única categoria: vazia, comentário ou código, além de informar o total. Ele reconhece comentários comuns de linha e bloco, ignora marcadores dentro de strings entre aspas e considera como código uma linha que também tenha comentário. Assim, você obtém resultados repetíveis para relatórios, revisões, migrações e automações.
Escolha a linguagem e preserve o texto-fonte
Envie o código exatamente como ele aparece e selecione a linguagem na lista aceita. A escolha é importante porque os mesmos caracteres têm significados diferentes: cerquilha inicia comentários em Python e shell, duas barras em JavaScript e Java, dois hífens em SQL, enquanto HTML usa marcadores em pares. O contador aplica a tabela selecionada, sem tentar deduzir pela extensão ou pelo conteúdo.
Ele separa linhas com LF, CRLF ou retorno de carro. Uma quebra final cria uma linha física vazia e entra na contagem; uma string vazia também representa uma linha vazia. Não remova comentários nem apare o texto inteiro se esses detalhes devem ser medidos.
Uma linguagem fora da lista produz erro de entrada, evitando que uma regra genérica forneça números enganosos.
Entenda a classificação de cada linha
Cada linha física pertence uma única vez a uma categoria exclusiva. Uma linha somente com espaços ou tabulações é vazia, exceto quando está dentro de um comentário de bloco aberto. Uma linha que contém apenas comentário conta como comentário.
Se houver qualquer elemento de código, ela conta como código, mesmo com comentário no final ou no meio. Portanto, as três categorias sempre somam o total. Comentários de bloco continuam ativos até o marcador de fechamento; código antes da abertura ou depois do fechamento faz a linha ser código.
O analisador acompanha aspas simples, duplas, crases e escapes com barra invertida. Por isso, uma URL com duas barras ou uma string com cerquilha permanece código. Trata-se de linhas físicas, não de instruções: várias instruções em uma linha valem uma linha de código, e uma instrução dividida pode valer várias.
Use os totais com critérios consistentes
A resposta traz a linguagem normalizada e os totais de linhas, linhas vazias, comentários e código. Você pode validar o resultado somando as três categorias e comparando com o total. Considere linhas de código apenas como indicação aproximada de volume, comentários como contexto documental e linhas vazias como contexto de formatação, nunca como medida direta de qualidade ou produtividade.
Arquivos gerados, dependências, testes e estilos compactos alteram bastante os números. Em relatórios de repositório, defina primeiro os arquivos incluídos, processe cada um com a linguagem correta e agregue sob uma política documentada. A implementação não procura arquivos, não infere extensões e não usa rede, relógio ou aleatoriedade.
Casos de uso
Preparar um inventário do repositório
Classifique arquivos-fonte e agregue totais consistentes de código, comentários e linhas vazias em um relatório interno.
Estimar o escopo de uma migração
Compare o volume físico de componentes selecionados antes de planejar uma troca de linguagem ou framework.
Acompanhar mudanças em código gerado
Registre categorias determinísticas e sinalize alterações inesperadas no volume de código ou comentários.
Perguntas frequentes
Quanto custa uma contagem?
A experiência no navegador executa localmente a mesma lógica determinística.
Uma linha com código e comentário final conta duas vezes?
Não. Ela conta uma vez como código, mantendo todas as categorias mutuamente exclusivas.
Marcadores dentro de strings são tratados como comentários?
Não. Marcadores em strings reconhecidas entre aspas são considerados parte do código.
Como são contados comentários de bloco com várias linhas?
Linhas somente do bloco contam como comentários; uma linha que também contenha código conta como código.
A linguagem de programação é detectada sozinha?
Não. Você escolhe a linguagem na lista e as regras de comentário dela são aplicadas. Nada é adivinhado pelo nome do arquivo ou pelo conteúdo, então o mesmo texto sempre dá a mesma contagem e um trecho ambíguo não é julgado pelas regras erradas.
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/dev2/count-lines-of-code \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"function add(a, b) {\n // Return the sum\n return a + b;\n}\n","language":"javascript"}'const res = await fetch("https://api.kit.forhosting.com/dev2/count-lines-of-code", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "function add(a, b) {\n // Return the sum\n return a + b;\n}\n",
"language": "javascript"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev2/count-lines-of-code",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "function add(a, b) {\n // Return the sum\n return a + b;\n}\n",
"language": "javascript"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev2/count-lines-of-code", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"function add(a, b) {\\n // Return the sum\\n return a + b;\\n}\\n","language":"javascript"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"function add(a, b) {\n // Return the sum\n return a + b;\n}\n","language":"javascript"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev2/count-lines-of-code", 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": "function add(a, b) {\n // Return the sum\n return a + b;\n}\n",
"language": "javascript"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.count_lines_of_code",
"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.
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
Use os totais com critérios consistentes
Ela examina somente o texto enviado; entradas iguais produzem o mesmo JSON, e as regras de exclusão permanecem sob seu controle.
Perguntas técnicas
O que acontece quando a linguagem é desconhecida?
A capacidade retorna um erro invalid_input informando que a linguagem não foi reconhecida, sem adivinhar regras.