diff options
Diffstat (limited to 'js/baba-yaga/dev/vscode/out')
-rw-r--r-- | js/baba-yaga/dev/vscode/out/extension.d.ts | 4 | ||||
-rw-r--r-- | js/baba-yaga/dev/vscode/out/extension.d.ts.map | 1 | ||||
-rw-r--r-- | js/baba-yaga/dev/vscode/out/extension.js | 333 | ||||
-rw-r--r-- | js/baba-yaga/dev/vscode/out/extension.js.map | 1 |
4 files changed, 339 insertions, 0 deletions
diff --git a/js/baba-yaga/dev/vscode/out/extension.d.ts b/js/baba-yaga/dev/vscode/out/extension.d.ts new file mode 100644 index 0000000..12b5873 --- /dev/null +++ b/js/baba-yaga/dev/vscode/out/extension.d.ts @@ -0,0 +1,4 @@ +import * as vscode from 'vscode'; +export declare function activate(context: vscode.ExtensionContext): Promise<void>; +export declare function deactivate(): void; +//# sourceMappingURL=extension.d.ts.map \ No newline at end of file diff --git a/js/baba-yaga/dev/vscode/out/extension.d.ts.map b/js/baba-yaga/dev/vscode/out/extension.d.ts.map new file mode 100644 index 0000000..bfc4698 --- /dev/null +++ b/js/baba-yaga/dev/vscode/out/extension.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAMjC,wBAAsB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,gBAAgB,iBA6C9D;AAED,wBAAgB,UAAU,SAAK"} \ No newline at end of file diff --git a/js/baba-yaga/dev/vscode/out/extension.js b/js/baba-yaga/dev/vscode/out/extension.js new file mode 100644 index 0000000..6e19efb --- /dev/null +++ b/js/baba-yaga/dev/vscode/out/extension.js @@ -0,0 +1,333 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.deactivate = exports.activate = void 0; +const vscode = __importStar(require("vscode")); +// Tree-sitter parser for Baba Yaga (optional) +let parser; +let BabaYagaLanguage; +async function activate(context) { + console.log('Baba Yaga extension is now active!'); + // Initialize Tree-sitter parser (optional) + const enableTreeSitter = vscode.workspace.getConfiguration('baba-yaga').get('enableTreeSitter'); + if (enableTreeSitter) { + try { + const Parser = require('tree-sitter'); + Parser.init(); + // Note: tree-sitter-baba-yaga grammar would need to be built separately + // For now, we'll use basic features without Tree-sitter + console.log('Tree-sitter enabled but grammar not available'); + } + catch (error) { + console.warn('Tree-sitter not available, using basic features:', error); + } + } + // Register commands + context.subscriptions.push(vscode.commands.registerCommand('baba-yaga.showTypeInfo', showTypeInfo), vscode.commands.registerCommand('baba-yaga.goToDefinition', goToDefinition), vscode.commands.registerCommand('baba-yaga.findReferences', findReferences), vscode.commands.registerCommand('baba-yaga.showFunctionSignature', showFunctionSignature)); + // Register language features + if (vscode.workspace.getConfiguration('baba-yaga').get('enableTypeHints')) { + context.subscriptions.push(vscode.languages.registerHoverProvider('baba-yaga', new BabaYagaHoverProvider()), vscode.languages.registerCompletionItemProvider('baba-yaga', new BabaYagaCompletionProvider(), '.', ':', '>')); + } + if (vscode.workspace.getConfiguration('baba-yaga').get('enableFunctionReferences')) { + context.subscriptions.push(vscode.languages.registerDefinitionProvider('baba-yaga', new BabaYagaDefinitionProvider()), vscode.languages.registerReferenceProvider('baba-yaga', new BabaYagaReferenceProvider())); + } + if (vscode.workspace.getConfiguration('baba-yaga').get('enableErrorChecking')) { + context.subscriptions.push(vscode.languages.registerDiagnosticCollection('baba-yaga', new BabaYagaDiagnosticProvider())); + } +} +exports.activate = activate; +function deactivate() { } +exports.deactivate = deactivate; +// Built-in functions and their signatures +const builtinFunctions = new Map([ + ['io.out', { name: 'io.out', kind: 'function', signature: 'io.out(value: any) -> void', description: 'Print value to console' }], + ['io.in', { name: 'io.in', kind: 'function', signature: 'io.in() -> String', description: 'Read input from console' }], + ['map', { name: 'map', kind: 'function', signature: 'map(func: (T) -> U, list: [T]) -> [U]', description: 'Apply function to each element' }], + ['filter', { name: 'filter', kind: 'function', signature: 'filter(pred: (T) -> Bool, list: [T]) -> [T]', description: 'Filter list by predicate' }], + ['reduce', { name: 'reduce', kind: 'function', signature: 'reduce(func: (acc: T, item: T) -> T, init: T, list: [T]) -> T', description: 'Fold list to single value' }], + ['append', { name: 'append', kind: 'function', signature: 'append(list: [T], item: T) -> [T]', description: 'Add item to end of list' }], + ['set', { name: 'set', kind: 'function', signature: 'set(table: Table, key: String, value: any) -> Table', description: 'Set table property' }], + ['merge', { name: 'merge', kind: 'function', signature: 'merge(table1: Table, table2: Table) -> Table', description: 'Merge two tables' }], + ['shape', { name: 'shape', kind: 'function', signature: 'shape(value: any) -> Table', description: 'Get value metadata' }] +]); +// String functions +const stringFunctions = ['concat', 'split', 'join', 'length', 'substring', 'replace', 'trim', 'upper', 'lower']; +stringFunctions.forEach(func => { + builtinFunctions.set(`str.${func}`, { + name: `str.${func}`, + kind: 'function', + signature: `str.${func}(...args) -> String`, + description: `String ${func} operation` + }); +}); +// Math functions +const mathFunctions = ['abs', 'sign', 'floor', 'ceil', 'round', 'trunc', 'min', 'max', 'clamp', 'pow', 'sqrt', 'exp', 'log', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan', 'atan2', 'deg', 'rad', 'random', 'randomInt']; +mathFunctions.forEach(func => { + builtinFunctions.set(`math.${func}`, { + name: `math.${func}`, + kind: 'function', + signature: `math.${func}(...args) -> Number`, + description: `Math ${func} operation` + }); +}); +// Keywords +const keywords = new Map([ + ['when', { name: 'when', kind: 'keyword', description: 'Pattern matching expression' }], + ['then', { name: 'then', kind: 'keyword', description: 'Pattern match result' }], + ['is', { name: 'is', kind: 'keyword', description: 'Pattern match operator' }], + ['Ok', { name: 'Ok', kind: 'keyword', description: 'Success result constructor' }], + ['Err', { name: 'Err', kind: 'keyword', description: 'Error result constructor' }], + ['true', { name: 'true', kind: 'keyword', description: 'Boolean true value' }], + ['false', { name: 'false', kind: 'keyword', description: 'Boolean false value' }], + ['PI', { name: 'PI', kind: 'keyword', description: 'Mathematical constant π' }], + ['INFINITY', { name: 'INFINITY', kind: 'keyword', description: 'Positive infinity' }], + ['and', { name: 'and', kind: 'keyword', description: 'Logical AND operator' }], + ['or', { name: 'or', kind: 'keyword', description: 'Logical OR operator' }], + ['xor', { name: 'xor', kind: 'keyword', description: 'Logical XOR operator' }] +]); +// Types +const types = new Map([ + ['Bool', { name: 'Bool', kind: 'type', description: 'Boolean type (true/false)' }], + ['Int', { name: 'Int', kind: 'type', description: 'Integer type' }], + ['Float', { name: 'Float', kind: 'type', description: 'Floating-point type' }], + ['String', { name: 'String', kind: 'type', description: 'String type' }], + ['List', { name: 'List', kind: 'type', description: 'List type [T]' }], + ['Table', { name: 'Table', kind: 'type', description: 'Table type {key: value}' }], + ['Result', { name: 'Result', kind: 'type', description: 'Result type (Ok T | Err String)' }], + ['Number', { name: 'Number', kind: 'type', description: 'Numeric supertype (Int | Float)' }] +]); +// Hover Provider +class BabaYagaHoverProvider { + provideHover(document, position, token) { + const wordRange = document.getWordRangeAtPosition(position); + if (!wordRange) + return null; + const word = document.getText(wordRange); + // Check built-in functions + const builtin = builtinFunctions.get(word); + if (builtin) { + return new vscode.Hover([ + `**${builtin.name}**`, + `\`${builtin.signature}\``, + builtin.description || '' + ]); + } + // Check keywords + const keyword = keywords.get(word); + if (keyword) { + return new vscode.Hover([ + `**${keyword.name}** (keyword)`, + keyword.description || '' + ]); + } + // Check types + const type = types.get(word); + if (type) { + return new vscode.Hover([ + `**${type.name}** (type)`, + type.description || '' + ]); + } + // Check for function definitions in the document + const functionDef = findFunctionDefinition(document, word); + if (functionDef) { + return new vscode.Hover([ + `**${word}** (function)`, + `\`${functionDef.signature}\``, + functionDef.description || '' + ]); + } + return null; + } +} +// Completion Provider +class BabaYagaCompletionProvider { + provideCompletionItems(document, position, token, context) { + const items = []; + // Add built-in functions + builtinFunctions.forEach((func, name) => { + const item = new vscode.CompletionItem(name, vscode.CompletionItemKind.Function); + item.detail = func.signature; + item.documentation = func.description; + items.push(item); + }); + // Add keywords + keywords.forEach((keyword, name) => { + const item = new vscode.CompletionItem(name, vscode.CompletionItemKind.Keyword); + item.documentation = keyword.description; + items.push(item); + }); + // Add types + types.forEach((type, name) => { + const item = new vscode.CompletionItem(name, vscode.CompletionItemKind.TypeParameter); + item.documentation = type.description; + items.push(item); + }); + // Add operators + const operators = ['+', '-', '*', '/', '%', '=', '!=', '>', '<', '>=', '<=', '->', '..', ':', 'and', 'or', 'xor']; + operators.forEach(op => { + const item = new vscode.CompletionItem(op, vscode.CompletionItemKind.Operator); + items.push(item); + }); + return items; + } +} +// Definition Provider +class BabaYagaDefinitionProvider { + provideDefinition(document, position, token) { + const wordRange = document.getWordRangeAtPosition(position); + if (!wordRange) + return null; + const word = document.getText(wordRange); + // Find function definition in the document + const functionDef = findFunctionDefinition(document, word); + if (functionDef) { + return new vscode.Location(document.uri, functionDef.range); + } + return null; + } +} +// Reference Provider +class BabaYagaReferenceProvider { + provideReferences(document, position, context, token) { + const wordRange = document.getWordRangeAtPosition(position); + if (!wordRange) + return null; + const word = document.getText(wordRange); + const references = []; + // Find all references in the document + const text = document.getText(); + const regex = new RegExp(`\\b${word}\\b`, 'g'); + let match; + while ((match = regex.exec(text)) !== null) { + const startPos = document.positionAt(match.index); + const endPos = document.positionAt(match.index + match[0].length); + references.push(new vscode.Location(document.uri, new vscode.Range(startPos, endPos))); + } + return references; + } +} +// Diagnostic Provider +class BabaYagaDiagnosticProvider { + constructor() { + this.diagnosticCollection = vscode.languages.createDiagnosticCollection('baba-yaga'); + vscode.workspace.onDidChangeTextDocument(this.onDidChangeTextDocument, this); + } + onDidChangeTextDocument(event) { + if (event.document.languageId === 'baba-yaga') { + this.updateDiagnostics(event.document); + } + } + updateDiagnostics(document) { + const diagnostics = []; + const text = document.getText(); + // Basic syntax checking + const lines = text.split('\n'); + lines.forEach((line, index) => { + // Check for missing semicolons + if (line.trim() && !line.trim().startsWith('//') && !line.trim().endsWith(';') && !line.trim().endsWith('{') && !line.trim().endsWith('}')) { + const range = new vscode.Range(index, line.length, index, line.length); + diagnostics.push(new vscode.Diagnostic(range, 'Missing semicolon', vscode.DiagnosticSeverity.Warning)); + } + }); + this.diagnosticCollection.set(document.uri, diagnostics); + } +} +// Helper functions +function findFunctionDefinition(document, functionName) { + const text = document.getText(); + const lines = text.split('\n'); + for (let i = 0; i < lines.length; i++) { + const line = lines[i]; + const match = line.match(new RegExp(`\\b${functionName}\\s*:\\s*(.+?)\\s*->\\s*(.+?)\\s*;`)); + if (match) { + const signature = `${functionName} : ${match[1]} -> ${match[2]}`; + const startPos = document.positionAt(text.indexOf(line)); + const endPos = document.positionAt(text.indexOf(line) + line.length); + return { + signature, + range: new vscode.Range(startPos, endPos), + description: `Function defined at line ${i + 1}` + }; + } + } + return null; +} +// Command implementations +async function showTypeInfo() { + const editor = vscode.window.activeTextEditor; + if (!editor || editor.document.languageId !== 'baba-yaga') + return; + const position = editor.selection.active; + const wordRange = editor.document.getWordRangeAtPosition(position); + if (!wordRange) + return; + const word = editor.document.getText(wordRange); + const type = builtinFunctions.get(word) || keywords.get(word) || types.get(word); + if (type) { + vscode.window.showInformationMessage(`${word}: ${type.description || type.signature || type.name}`); + } +} +async function goToDefinition() { + const editor = vscode.window.activeTextEditor; + if (!editor || editor.document.languageId !== 'baba-yaga') + return; + const position = editor.selection.active; + const wordRange = editor.document.getWordRangeAtPosition(position); + if (!wordRange) + return; + const word = editor.document.getText(wordRange); + const functionDef = findFunctionDefinition(editor.document, word); + if (functionDef) { + editor.selection = new vscode.Selection(functionDef.range.start, functionDef.range.end); + editor.revealRange(functionDef.range); + } +} +async function findReferences() { + const editor = vscode.window.activeTextEditor; + if (!editor || editor.document.languageId !== 'baba-yaga') + return; + const position = editor.selection.active; + const wordRange = editor.document.getWordRangeAtPosition(position); + if (!wordRange) + return; + const word = editor.document.getText(wordRange); + await vscode.commands.executeCommand('editor.action.referenceSearch.trigger'); +} +async function showFunctionSignature() { + const editor = vscode.window.activeTextEditor; + if (!editor || editor.document.languageId !== 'baba-yaga') + return; + const position = editor.selection.active; + const wordRange = editor.document.getWordRangeAtPosition(position); + if (!wordRange) + return; + const word = editor.document.getText(wordRange); + const builtin = builtinFunctions.get(word); + if (builtin) { + vscode.window.showInformationMessage(`${word}: ${builtin.signature}`); + } +} +//# sourceMappingURL=extension.js.map \ No newline at end of file diff --git a/js/baba-yaga/dev/vscode/out/extension.js.map b/js/baba-yaga/dev/vscode/out/extension.js.map new file mode 100644 index 0000000..103e6a3 --- /dev/null +++ b/js/baba-yaga/dev/vscode/out/extension.js.map @@ -0,0 +1 @@ +{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"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"} \ No newline at end of file |