🚀 Recursos Avançados#
Esta página documenta funcionalidades avançadas do Codis que vão além do editor básico.
LSP - Language Server Protocol#
O LSP integra servidores de linguagem externos para fornecer inteligência de código avançada. Gerenciado pela classe LSPManager (src/lsp/client.py).
Servidores Suportados (Auto-detectados)#
| Linguagem | Servidores candidatos (em ordem de preferência) | Instalação | Status |
|---|---|---|---|
| Python | pylsp, pyright-langserver, jedi-language-server |
pip install python-lsp-server[all] |
✅ Completo |
| JavaScript | typescript-language-server, tsserver |
npm install -g typescript-language-server |
✅ |
| TypeScript | typescript-language-server |
npm install -g typescript-language-server |
✅ |
| Rust | rust-analyzer |
rust-analyzer.github.io | ✅ |
| Go | gopls |
go install golang.org/x/tools/gopls@latest |
✅ |
| C/C++ | clangd |
sudo apt install clangd |
✅ |
| JSON | vscode-json-languageserver |
npm install -g vscode-langservers-extracted |
✅ |
| HTML | vscode-html-languageserver |
npm install -g vscode-langservers-extracted |
✅ |
| CSS | vscode-css-languageserver |
npm install -g vscode-langservers-extracted |
✅ |
| Markdown | marksman |
github.com/artempyanykh/marksman | ✅ |
| Java | eclipse.jdt.ls |
eclipse.org/jdt-ls | ⚠️ Limitações conhecidas |
| PHP | intelephense |
npm install -g intelephense |
⚠️ Limitações conhecidas |
| Ruby | solargraph |
gem install solargraph |
⚠️ Limitações conhecidas |
| Lua | lua-language-server |
github.com/LuaLS/lua-language-server | ✅ |
| Bash | bash-language-server |
npm install -g bash-language-server |
✅ |
Legenda: ✅ Testado e funcional · ⚠️ Funcional com limitações conhecidas
Funcionalidades LSP#
| Funcionalidade | Atalho | Requisição LSP |
|---|---|---|
| Hover documentation | Passar mouse | textDocument/hover |
| Autocomplete | Automático | textDocument/completion |
| Ir para definição | F12 |
textDocument/definition |
| Encontrar referências | Shift+F12 |
textDocument/references |
| Hints de parâmetros | Ao digitar ( |
textDocument/signatureHelp |
| Outline do documento | Activity Bar → 📚 | textDocument/documentSymbol |
| Busca de símbolo no workspace | Ctrl+Shift+O |
workspace/symbol |
| Formatar via LSP | Shift+Alt+F |
textDocument/formatting |
| Renomear símbolo | F6 |
textDocument/rename |
| Diagnósticos | Automático | textDocument/publishDiagnostics |
Configuração#
"lsp_enabled": true
O LSP é ativado automaticamente ao abrir um arquivo de uma linguagem suportada. Cada linguagem tem seu próprio processo de servidor LSP independente.
Code Outline#
O painel Code Outline (Activity Bar → 📚) exibe a estrutura hierárquica do arquivo ativo: funções, classes, variáveis, imports e outros símbolos. Atualiza automaticamente quando o arquivo é modificado.
Clicar em qualquer símbolo no outline navega diretamente para a definição no editor.
Bookmarks#
O sistema de bookmarks permite marcar posições específicas nos arquivos para navegação rápida.
Criando Bookmarks#
Ctrl+F2ou Ferramentas → Adicionar Bookmark- Ao criar, um diálogo solicita uma nota opcional para identificar o marcador.
Navegando por Bookmarks#
| Ação | Atalho |
|---|---|
| Próximo bookmark | F2 |
| Bookmark anterior | Shift+F2 |
| Listar todos | Activity Bar → 🔖 |
Painel de Bookmarks#
O painel de Bookmarks (sidebar → 🔖) lista todos os marcadores de todos os arquivos, com:
- Arquivo, linha, coluna e snippet da linha
- Nota associada ao bookmark
- Clique para navegar diretamente
Snippets#
Painel de Snippets#
O painel de Snippets (Ctrl+Shift+J) exibe todos os snippets disponíveis, filtrados pela linguagem do arquivo ativo.
Estrutura de um Snippet#
Snippets são arquivos JSON em ~/.codis/snippets/:
{
"name": "função Python",
"prefix": "def",
"language": "python",
"body": "def ${1:nome}(${2:parâmetros}):\n ${3:pass}",
"description": "Criar uma nova função Python"
}
Campos:
prefix- gatilho de expansão (digitar + Tab)body- corpo do snippet com${N:placeholder}para campos de ediçãolanguage- linguagem específica ou"*"para todas
Inserindo Snippets#
- Digite o prefixo e pressione
Tabpara expandir. - Navegue entre campos com
Tab/Shift+Tab. - O painel de Snippets também permite inserção por clique duplo.
Diff Engine#
Diff: Arquivo vs. Versão Salva#
Ferramentas → Diff: Arquivo vs. Versão Salva compara o conteúdo atual (com modificações não salvas) com a última versão em disco.
Diff: Dois Arquivos#
Ferramentas → Diff: Dois Arquivos abre um seletor de arquivo duplo e exibe o diff lado a lado.
Navegação no Diff#
| Ação | Atalho |
|---|---|
| Próximo hunk | F7 |
| Hunk anterior | Shift+F7 |
O diff engine (src/diff/engine.py) usa o algoritmo de Myers para gerar diffs com linha de contexto.
Find in Files (Busca em Arquivos)#
A busca em arquivos (Ctrl+Shift+F) pesquisa texto em todo o workspace.
Funcionalidades:
- Suporte a expressões regulares
- Filtros de inclusão:
*.py,src/** - Filtros de exclusão:
!node_modules,!*.min.js - Respeita
.gitignorequandorespect_ignore_files: true - Máximo de
search_max_resultsresultados (padrão: 2000)
Atalho no resultado: clique em qualquer resultado para abrir o arquivo na linha correspondente.
Debug Panel#
O Painel de Debug (painel inferior → aba Debug) oferece depuração real de Python via DAP/debugpy: breakpoints (clique na margem do editor), step into/over/out, inspeção de variáveis e call stack, e um console com avaliação de expressões no frame parado.
Guia completo, configurações e resolução de problemas (incluindo conflitos de porta com VS Code): Debug.
Para outras linguagens além de Python, o painel executa o arquivo de forma simples (captura de saída), sem breakpoints/stepping reais por enquanto.
Regex Playground#
Ctrl+Shift+R ou painel inferior → aba Regex abre um playground interativo para testar expressões regulares:
- Campo de padrão regex com syntax highlighting
- Flags:
i(case-insensitive),m(multiline),s(dotall) - Resultado em tempo real: matches destacados no texto de teste
- Botão Aplicar no Editor - substitui no arquivo ativo via
_regex_replace()
Color Picker#
Ctrl+Shift+C abre o seletor de cores. Detecta automaticamente a cor sob o cursor (valores #rrggbb, rgb(), etc.) e inicializa o picker com ela.
Ao confirmar:
- A cor selecionada é inserida no cursor.
- A cor é copiada para o clipboard.
Scratchpad#
O Scratchpad (Ctrl+Shift+N) é um editor de texto temporário persistente - ideal para notas rápidas, código de rascunho ou qualquer texto que não precisa de um arquivo.
O conteúdo é salvo automaticamente e sobrevive ao reinício do Codis.
Code Stats#
O painel 📊 Code Stats (Activity Bar → 📊) exibe estatísticas do workspace:
- Contagem de arquivos por linguagem
- Total de linhas de código
- Tamanho total dos arquivos
- Distribuição por tipo de arquivo (gráfico de barras)
Todo Tree#
O painel ✅ Todo Tree (Activity Bar → ✅) varre todos os arquivos do workspace em busca de comentários TODO, FIXME, HACK, NOTE e exibe uma lista navegável. Clicar em um item abre o arquivo na linha correspondente.
REST Client#
O painel 🌍 REST Client (Activity Bar → 🌍) permite fazer requisições HTTP diretamente do editor:
- Métodos: GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS
- Headers customizáveis
- Body (JSON, form-data, raw)
- Exibição formatada da resposta
Preview / Render Panel#
O painel 🌐 Preview (Activity Bar → 🌐) renderiza o arquivo ativo:
- HTML - renderiza como página web com suporte a CSS e JavaScript local
- Markdown - converte e exibe com formatação rica (detecta tema claro/escuro pelo brilho do tema ativo)
- SVG - renderiza o gráfico diretamente
Atualiza automaticamente ao salvar o arquivo.
Flowchart Panel#
O painel 🔀 Flowchart (Activity Bar → 🔀) gera um fluxograma visual do código ativo automaticamente, usando análise de fluxo de controle.
Pomodoro Timer#
O painel ⏱ Pomodoro (Ctrl+Alt+P) implementa a técnica Pomodoro:
- Temporizadores configuráveis para sessão de trabalho e pausa
- Notificações na barra de status ao fim de cada intervalo
Notas de Sessão#
Ferramentas → Notas de Sessão abre uma janela flutuante de notas persistentes vinculadas ao workspace atual. O conteúdo é salvo automaticamente em ~/.codis/notes_<hash>.txt a cada 600 ms de inatividade.
Histórico de Colagem#
Ctrl+Shift+V abre o histórico das últimas 50 entradas do clipboard. Clique duplo ou pressione Enter para colar o item selecionado no editor ativo.
Ferramentas de Texto#
Via menu Ferramentas:
| Ferramenta | Ação |
|---|---|
| Contador de Palavras | Conta palavras, linhas, chars (seleção ou arquivo) |
| Base64 Encode | Codifica a seleção em Base64 |
| Base64 Decode | Decodifica a seleção de Base64 |
| URL Encode | Percent-encoding da seleção |
| URL Decode | Decodifica percent-encoding |
| MD5 Hash | Calcula MD5 da seleção (copia para clipboard) |
| SHA-256 Hash | Calcula SHA-256 da seleção |
| Inserir Sequência | Insere sequência numérica com passo configurável |
SQL Studio#
O SQL Studio é um ambiente completo de banco de dados integrado ao Codis, disponível na Activity Bar (🗄), na aba inferior (🗄 SQL) e pelo atalho Ctrl+Shift+Q.
Drivers suportados#
| Driver | Instalação | Notas |
|---|---|---|
| SQLite | Embutido no Python | Zero dependências, padrão |
| PostgreSQL | pip install psycopg2-binary |
Host, porta, usuário, senha, database |
| MySQL / MariaDB | pip install pymysql |
Mesmos campos do PostgreSQL |
| DuckDB | pip install duckdb |
Arquivo .duckdb ou :memory: |
Gerenciamento de Conexões#
Conexões são salvas em ~/.codis/sql_connections.json. Cada perfil inclui:
- Nome, driver, caminho (SQLite/DuckDB) ou host/porta/database/usuário/senha (outros)
- Flag somente leitura para conexões SQLite/DuckDB em modo seguro
- Botão 🔗 Testar antes de salvar verifica se a conexão funciona
Editor SQL#
- Syntax highlighting: palavras-chave em azul, strings, números e comentários
--//* */ - Números de linha integrados
- Autocomplete
Ctrl+Space- keywords SQL + tabelas + colunas do esquema ativo F5ouCtrl+Enter- executa a query completa- Botão ▶ Seleção - executa apenas o texto selecionado
- Botão 📊 EXPLAIN - exibe o plano de execução sem rodar a query
- Botão ⬛ Formatar - UPPER-CASE em keywords e quebras de linha semânticas
- Salvar / abrir arquivos
.sqldiretamente
Browser de Esquema#
A coluna lateral esquerda exibe a árvore de tabelas do banco conectado:
📋 nome_tabela- nó expansível🔑 coluna- chave primáriacoluna TIPO!-!indicaNOT NULL- Duplo clique em tabela → insere
SELECT * FROM "tabela" LIMIT 100;no editor - Duplo clique em coluna → insere o nome da coluna no cursor
- Botão direito → menu de contexto com
SELECT *,COUNT(*),DROP TABLE,Ver Esquema DDL - Campo de busca no topo para filtrar tabelas por nome
Grid de Resultados#
- Clique no cabeçalho de qualquer coluna para ordenar
- 📤 CSV - exporta os resultados para arquivo
.csv - 📤 JSON - exporta para arquivo
.jsoncom objetos por linha - Máximo de 5.000 linhas exibidas por query (configurável em
src/ui/sql_studio.py)
Histórico#
Até 500 queries salvas automaticamente em ~/.codis/sql_history.json, acessíveis pelo botão ⏱ Histórico. A janela de histórico mostra timestamp, prévia da query e permite inserção por duplo clique.
Gerenciador de Tarefas#
O Gerenciador de Tarefas (Activity Bar → ✅, sem atalho de teclado dedicado) oferece três visões:
Kanban#
Quadro visual com quatro colunas configuráveis:
Backlog → Em Andamento → Revisão → Concluído
Cada cartão exibe:
- Faixa de cor por prioridade (🔴 Crítico · 🟠 Alto · 🟡 Médio · 🟢 Baixo)
- Título, preview da descrição
- Badge de vencimento com cores por urgência (atraso em vermelho, hoje em amarelo, próximo em laranja)
- Tags coloridas (cor calculada automaticamente por hash do nome)
Duplo clique em qualquer cartão abre o editor. Botão direito → mover para coluna, arquivar, deletar.
Lista#
Tabela com todas as tarefas filtráveis por texto e prioridade, com opção de mostrar tarefas arquivadas.
Agendador de Comandos#
Aba ⏰ Agendador para execução automática de comandos shell:
| Modo | Comportamento |
|---|---|
| Uma vez | Executa em data/hora específica e desabilita após |
| A cada N minutos | Executa a cada N minutos a partir da última execução |
| A cada N horas | Executa a cada N horas |
| Todo dia | Executa diariamente no horário HH:MM configurado |
| Toda semana | Executa no dia da semana + horário HH:MM configurados |
O Scheduler é um thread daemon que verifica as tarefas a cada 10 segundos. Suporta comandos simples (python backup.py) e shell complexos com pipes e redirecionamentos (echo hi | tee log.txt). O botão ▶ Executar Agora força execução imediata da tarefa selecionada.
Agendamentos salvos em ~/.codis/scheduled_tasks.json. O log de execuções exibe saída real com cores verde (sucesso) / vermelho (erro).