# Flink SQL Language Server

[![flink version](https://img.shields.io/badge/flink%20version-1.20-blue)](https://nightlies.apache.org/flink/flink-docs-release-1.20/docs/)
[![npm version](https://img.shields.io/npm/v/flink-sql-language-server)](https://www.npmjs.com/package/flink-sql-language-server)
[![weekly downloads](https://img.shields.io/npm/dw/flink-sql-language-server)](https://www.npmjs.com/package/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
import { EXTRACT_SQL_STRUCTURE } from 'flink-sql-language-server/out-tsc/constants';

// structure would be undefined if uri is invalid
const structure = await commands.executeCommand<StructureResult>(
  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' }]
});
```
