MF07 Language Extension (CorpLang)
Extensão completa do VS Code para a linguagem CorpLang (MF07), com suporte total a IntelliSense, autocomplete contextual, documentação hover, signature help e formatação de código.
✨ Recursos
🎯 Autocomplete Inteligente e Contextual
Sugestões Gerais
- Keywords:
class, interface, intent, async intent, var, if, for, while, try, catch, finally, return, import, throw, await
- Tipos Primitivos:
int, float, string, string, bool, dict, list, void
- Tipos Genéricos:
List<T>, Map<K, V>, HashMap<K, V>, Set<T>, Matrix<T>, EmbedList<T>, Optional<T>, Union[T1, T2]
- Funções Built-in:
print(), sout(), log(), type(), len(), parseInt(), waitSeconds(), exceptionStackTrace()
- Modificadores OOP:
private, public, protected, static, extends, implements, super, this, new
- Operadores Lógicos:
and, or, not
- Literais:
true, false, null
Sugestões Contextuais
Após new (instanciação de classes):
var list = new L| // Sugere: List<T>, Logger, Map<K,V>, Set<T>, File, Directory, DateTime, Exception, etc.
Todas as classes core estão disponíveis: Logger, List, Map, Set, Matrix, EmbedList, File, Directory, Requests, Exception, DateTime, e muitas outras!
Após . (métodos e campos de classe):
// Métodos estáticos
Math.| // Sugere: random(), floor(), pi(), factorial(), sqrt(), gcd(), lcm(), isPrime()
Path.| // Sugere: join(), basename(), dirname(), stem(), extension(), cwd(), home()
FileSystem.| // Sugere: readText(), writeText(), exists(), listDir(), readJSON(), writeJSON()
JSON.| // Sugere: parse(), stringify()
Object.| // Sugere: keys(), values(), entries(), clone()
LogLevel.| // Sugere: DEBUG, INFO, WARNING, ERROR, CRITICAL
// Métodos de instância
list.| // Sugere: append(), get(), size(), length(), isEmpty(), clear(), toString()
map.| // Sugere: put(), get(), has(), remove(), keys(), values(), entries(), forEach()
set.| // Sugere: add(), has(), remove(), size(), union(), intersection(), difference()
logger.| // Sugere: debug(), info(), warning(), error(), critical()
file.| // Sugere: readText(), writeText(), exists(), remove(), copyTo(), moveTo()
dir.| // Sugere: ensure(), list(), file(), directory(), remove()
Após import (módulos disponíveis e arquivos locais):
import core.| // Sugere: core.logger, core.math, core.fs, core.path, core.requests, core.json, etc.
import ./| // Sugere: arquivos .mp no mesmo diretório
import ../| // Sugere: arquivos .mp no diretório pai
Após : (anotações de tipo):
var count: | // Sugere: int, string, List<T>, Map<K,V>, Optional<T>, etc.
Dentro de class (membros de classe):
class Dog {
| // Sugere: private var, intent constructor, intent method, static intent
}
📚 Módulos Core Disponíveis (19 módulos)
core.logger - Sistema de logging (Logger, LogLevel, console global)
- Classes:
Logger, LogLevel
- Métodos:
debug(), info(), warning(), error(), critical()
- Campos:
DEBUG, INFO, WARNING, ERROR, CRITICAL
core.math - Funções matemáticas
- Classe:
Math
- Métodos:
random(), floor(), pi(), factorial(), sqrt(), fibonacci(), gcd(), lcm(), isPrime(), clamp(), lerp()
- Campos:
PI_VALUE
core.list - Lista tipada genérica
- Classe:
List<T>
- Métodos:
append(), get(), size(), length(), isEmpty(), clear(), toString()
core.map - Mapa tipado genérico
- Classe:
Map<K, V>
- Métodos:
put(), get(), has(), remove(), clear(), size(), keys(), values(), entries(), forEach()
core.set - Conjunto tipado genérico
- Classe:
Set<T>
- Métodos:
add(), has(), remove(), size(), union(), intersection(), difference()
core.matrix - Matriz 2D tipada
- Classe:
Matrix<T>
- Métodos:
set(), get(), getRows(), getCols(), add(), multiply(), transpose()
core.embedlist - Lista com busca semântica AI
- Classe:
EmbedList<T>
- Métodos:
append(), get(), length(), findSimilar(), enableAI()
core.fs - Sistema de arquivos
- Classes:
FileSystem, File, Directory
- Métodos:
readText(), writeText(), readJSON(), writeJSON(), exists(), listDir(), glob(), copy(), move()
core.path - Manipulação de caminhos
- Classe:
Path
- Métodos:
join(), basename(), dirname(), stem(), extension(), cwd(), home(), normalize(), resolve()
core.requests - Cliente HTTP
- Classes:
Requests, RequestOptions, RequestResponse
- Métodos:
get(), post(), put(), delete(), execute(), setJson(), setText(), setHeaders()
core.socket - Conexões TCP
- Classes:
TcpConnection, SocketStatus
- Métodos:
connect(), send(), receive(), close()
core.exceptions - Exceções
- Classes:
Exception, RuntimeException
- Métodos:
getMessage(), getCause(), printStackTrace(), stackTraceList()
core.datetime - Data e hora
- Classe:
DateTime
- Métodos:
now(), from_timestamp(), format(), to_timestamp(), today()
core.optional - Utilitários Optional
- Classe:
Optional
- Métodos:
isSome(), isNone(), unwrap(), unwrapOr(), map()
core.string - Helpers de string
- Classe:
StringHelpers
- Métodos:
toUpper(), toLower(), trim(), isEmpty(), isBlank(), equalsIgnoreCase()
core.json - JSON parsing
- Classe:
JSON
- Métodos:
parse(), stringify()
core.objects - Manipulação de objetos
- Classe:
Object
- Métodos:
keys(), values(), entries(), clone()
core.utils - Utilitários gerais
- Classe:
Utils
- Métodos:
isNull(), isInstanceOf(), typeOf()
core.collections - Interfaces de coleções
- Interfaces:
ICollection, BaseCollection
📖 Hover Documentation
Passe o mouse sobre qualquer keyword, tipo, função ou classe para ver:
- Título e descrição
- Assinatura da função/construtor
- Exemplo de código completo
- Notas de uso e dicas
Exemplo ao passar o mouse sobre List<T>:
### List<T> - Typed List Collection
Generic list collection with runtime type safety.
Signature: new List<T>()
Example:
var numbers: List<int> = new List()
numbers.append(10)
var first = numbers.get(0)
Methods:
- append(item: T): bool
- get(index: int): T
- length(): int
...
🔧 Signature Help (Parameter Info)
Ao digitar ( após uma função, veja os parâmetros esperados:
print(|) // Mostra: print(...values) - Any number of values to print
type(|) // Mostra: type(value: any) -> string
new List(|) // Mostra: new List<T>() - Creates a typed list
Navegue entre parâmetros com vírgulas.
🎨 Syntax Highlighting
- Keywords destacados:
class, intent, async, if, for, try, catch
- Tipos com cor específica:
int, List<T>, Optional<int>
- Strings com interpolação:
"Hello {name}"
- Comentários:
# linha e /* bloco */
- Números e literais booleanos
- Built-ins destacados:
print, Math, FileSystem
📄 Suporte a Docstrings em Runtime
A extensão captura automaticamente docstrings do seu código e exibe no autocomplete e hover!
1. Três aspas duplas (multilinha)
class User {
"""
Representa um usuário do sistema.
Armazena nome, email e idade.
"""
intent constructor(name: string) {
"""
Cria um novo usuário.
Valida os dados antes de criar.
"""
this.name = name
}
}
2. Três apóstrofos (multilinha)
intent calculateDiscount(price: float): float {
'''
Calcula desconto no preço.
Retorna o valor com desconto aplicado.
'''
return price * 0.9
}
3. Hashtag simples (linha única ou múltipla)
intent getName(): string {
# Retorna o nome do usuário
return this.name
}
intent validateEmail(email: string): bool {
# Valida formato de email
# Verifica presença de @ e domínio
# Retorna true se válido
return email.contains("@")
}
4. Comentário de bloco (estilo C/Java)
intent fetchData(url: string): any {
/*
* Busca dados de uma URL externa
* Retorna objeto JSON ou null se erro
*/
return null
}
Como Funciona:
Quando você digita o autocomplete, a extensão:
- Analisa o documento atual em busca de classes, métodos e funções
- Extrai docstrings logo após declarações
- Exibe no IntelliSense com a documentação completa
Exemplo prático:
class Product {
"""Gerencia informações de produtos"""
private var name: string
# Nome do produto
intent setPrice(value: float) {
# Define o preço do produto (deve ser > 0)
this.price = value
}
}
var product = new Product()
product.| # ← Autocomplete mostra "setPrice" com docstring "Define o preço..."
Cache Inteligente:
- Docstrings são parseadas automaticamente quando você edita
- Cache é invalidado quando o documento muda
- Performance otimizada - parsing só ocorre quando necessário
Veja exemplos completos em examples/docstring-demo.mp!
📝 Snippets Templates
Classes
class - Classe básica
class with constructor - Classe com campo privado, construtor e getter
class extends - Classe com herança e super()
class implements - Classe implementando interface
Funções
intent - Função básica (tipos opcionais)
intent typed - Função com tipos completos
async intent - Função assíncrona com await
intent defaults - Função com parâmetros padrão
Controle de Fluxo
if - Condicional
for / fori - Loop tradicional
for in / foreach - Loop sobre coleção
while - Loop while
try / trycatch typed - Try-catch-finally com exceção tipada
Coleções
new List - Criar e inicializar lista tipada
new Map - Criar e inicializar mapa tipado
new Matrix - Criar e inicializar matriz
Use Ctrl + Shift + P → Format Document para:
- Indentar blocos
{} corretamente
- Adicionar espaços ao redor de operadores (
=, :, ,)
- Adicionar espaços após keywords (
if, for, while)
- Organizar espaçamento entre declarações
🚀 Como Usar
1. Instalar a Extensão
Pressione F5 no VS Code com o projeto aberto para iniciar a extensão em modo de desenvolvimento.
2. Criar arquivo .mp
Crie um arquivo com extensão .mp (exemplo: test.mp)
3. Experimentar Recursos
Autocomplete: Digite e veja sugestões aparecerem automaticamente
var numbers: L| # Digite 'L' e veja sugestões de List<T>, Logger, etc.
Hover: Passe o mouse sobre qualquer palavra-chave ou tipo
var count: int # Passe o mouse sobre 'int' para ver documentação
Signature Help: Digite ( após uma função
print(|) # Parâmetros aparecem automaticamente
Formatação: Ctrl+Shift+P → Format Document
class Dog{var name:string} # Antes
class Dog { # Depois (formatado)
var name: string
}
📝 Exemplos de Código
Veja example.mp para exemplos completos de:
- Classes com herança e interfaces
- Funções assíncronas com await
- Tipos genéricos (List, Map, Set, Matrix)
- Tipos opcionais e union types
- Loops (for, for-in, for-of, while)
- Try-catch-finally com stack traces
- Operações matemáticas e de arquivo
- Logging com níveis
- AI-powered lists com busca semântica
🔍 Características da Linguagem
Tipos Opcionais
# Tipo pode ser omitido (inferido)
var count = 42
var name = "Alice"
# Ou explicitamente declarado
var age: int = 25
var message: string = "Hello"
Funções Assíncronas
async intent fetchData(): dict {
var response = await client.get("/api/data")
return response
}
Tipos Genéricos
var numbers: List<int> = new List()
var users: Map<string, int> = new Map()
var matrix: Matrix<float> = new Matrix(3, 3)
Tratamento de Exceções
try {
throw new Exception("Error", null)
} catch (Exception err) {
print(err.getMessage())
err.printStackTrace()
} finally {
print("Cleanup")
}
Herança e Polimorfismo
class Animal {
intent speak(): string { return "Sound" }
}
class Dog extends Animal {
intent speak(): string { return "Woof!" }
}
🛠️ Estrutura do Projeto
MF07/
├── src/
│ ├── extension.ts # Ativação e registro de providers
│ ├── completion.ts # Autocomplete contextual
│ ├── hover.ts # Documentação hover
│ ├── signatureHelp.ts # Signature help
│ └── formatter.ts # Formatação de código
├── syntaxes/
│ └── .tmLanguage.json # Gramática TextMate (syntax highlighting)
├── language-features.json # Configuração centralizada (keywords, types, functions, modules)
├── language-configuration.json
├── package.json
└── example.mp # Exemplos de código
📦 Dependências
- VS Code API: ^1.106.0
- TypeScript: 5.3.0
- Node.js: ^20.x
🔄 Build & Test
# Instalar dependências
npm install
# Compilar TypeScript
npm run compile
# Watch mode (desenvolvimento)
npm run watch
# Testar extensão
Pressione F5 no VS Code
📄 Licença
MIT License
👨💻 Desenvolvimento
Esta extensão suporta completamente a linguagem CorpLang (MF07) com:
- ✅ 30+ keywords
- ✅ 15+ tipos (primitivos e genéricos)
- ✅ 8+ funções built-in
- ✅ 8+ módulos core
- ✅ 12+ snippets
- ✅ Autocomplete contextual
- ✅ Hover documentation completa
- ✅ Signature help para funções
- ✅ Syntax highlighting avançado
- ✅ Formatação de código
Configuração centralizada em language-features.json permite adicionar novos recursos sem modificar código TypeScript!
Desenvolvido para CorpLang - A Modern Programming Language
| |