@krassowski/jupyterlab-lsp
Version:
Language Server Protocol integration for JupyterLab
36 lines (32 loc) • 1.14 kB
text/typescript
import { RegExpForeignCodeExtractor } from '../../extractors/regexp';
import { IForeignCodeExtractorsRegistry } from '../../extractors/types';
export const SQL_URL_PATTERN = '(?:(?:.*?)://(?:.*))';
// note: -a/--connection_arguments and -f/--file are not supported yet
const single_argument_options = [
'--destination_table',
'--project',
'--use_bqstorage_api',
'--use_rest_api',
'--use_legacy_sql',
'--verbose',
'--params'
];
const zero_argument_options = ['-l', '--connections'];
const COMMAND_PATTERN =
'(?:' +
(zero_argument_options.join('|') +
'|' +
single_argument_options.map(command => command + ' \\w+').join('|')) +
')';
export let foreign_code_extractors: IForeignCodeExtractorsRegistry = {
// general note: to match new lines use [^] instead of dot, unless the target is ES2018, then use /s
python: [
new RegExpForeignCodeExtractor({
language: 'sql',
pattern: `^%%bigquery(?: (?:${SQL_URL_PATTERN}|${COMMAND_PATTERN}|(?:\\w+ << )|(?:\\w+@\\w+)))?\n?((?:.+\n)?(?:[^]*))`,
foreign_capture_groups: [1],
is_standalone: true,
file_extension: 'sql'
})
]
};