# Flink SQL Language Server

A browser language server (LSP) for Apache Flink SQL, in addition to a simple vscode extension.

The language features are mainly implemented by [Antlr4ts](https://github.com/tunnelvisionlabs/antlr4ts).

## Functionality

This Language Server works for Flink SQL file. It has the following language features:
- Completions
- Diagnostics regenerated on each file change or configuration change
- Rename
- References
- FoldingRanges
- Hover
- DocumentFormatting
- CodeAction: QuickFix
- Custom Command
  - extract SQL structure
  - register schemas: auto-completion will include registered schemas

```typescript
// structure would be undefined if uri is invaild
const structure = await commands.executeCommand<StructureResult | undefined>(
        'extension.flinkSQL.extractStructure', // or ServerCommands.EXTRACT_SQL_STRUCTURE
        window.activeTextEditor.document.uri.toString()
);
if (structure) {
  // Do something
}

await commands.executeCommand<void>('extension.flinkSQL.registerSchemas', {
  catalogs: [{ kind: 'catalog', label: 'testCatalog' }],
  databases: [{ kind: 'database', catalog: 'testCatalog', label: 'testDatabase' }],
  tables: [{ kind: 'table', catalog: 'testCatalog', database: 'testDatabase', label: 'testTable' }]
});
```
