PgSQLSignatureHelpProvider.ts41 lines · main
1import { RefObject } from 'react'
2
3import BackwardIterator from './BackwardIterator'
4import type { DatabaseFunction } from '@/data/database-functions/database-functions-query'
5
6// [Joshen] Needs to be fixed
7
8export default function getPgsqlSignatureHelpProvider(_monaco: any, pgInfoRef: RefObject<any>) {
9 return {
10 signatureHelpTriggerCharacters: ['(', ','],
11 provideSignatureHelp: function (model: any, position: any) {
12 // position.column should minus 2 as it returns 2 for first char
13 // position.lineNumber should minus 1
14 const iterator = new BackwardIterator(model, position.column - 2, position.lineNumber - 1)
15
16 let paramCount = iterator.readArguments()
17 if (paramCount < 0) return null
18
19 let ident = iterator.readIdent()
20 if (!ident || ident.match(/^\".*?\"$/)) return null
21
22 let fn = (pgInfoRef.current.functions as DatabaseFunction[]).find(
23 (f) => f.name.toLocaleLowerCase() === ident.toLocaleLowerCase()
24 )
25 if (!fn) return null
26 if (!fn.args || fn.args.length < paramCount) return null
27
28 const activeSignature = 0
29 const activeParameter = Math.min(paramCount, fn.args.length - 1)
30 const signatures = []
31 signatures.push({
32 label: `${fn.name}(${fn.argument_types})`,
33 parameters: fn.args.map((v) => {
34 return { label: v.name }
35 }),
36 })
37
38 return { value: { signatures, activeSignature, activeParameter }, dispose: () => {} }
39 },
40 }
41}