From e9a46cfc76e400ece01668a734272ca5c3f70ebb Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Mon, 22 Dec 2025 01:19:28 +0000 Subject: [PATCH 1/2] refactor: centralize quote-utils to use generated kwlist.ts - Remove hardcoded RESERVED_WORDS from quote-utils.ts - Import RESERVED_KEYWORDS and TYPE_FUNC_NAME_KEYWORDS from kwlist.ts - Add explicit Set type annotations to kwlist.ts exports for proper TypeScript compatibility - QuoteUtils.needsQuotes() now uses the centralized keyword sets Co-Authored-By: Dan Lynch --- packages/deparser/src/kwlist.ts | 8 ++++---- packages/deparser/src/utils/quote-utils.ts | 20 +++----------------- 2 files changed, 7 insertions(+), 21 deletions(-) diff --git a/packages/deparser/src/kwlist.ts b/packages/deparser/src/kwlist.ts index a4d8abd0..64c55207 100644 --- a/packages/deparser/src/kwlist.ts +++ b/packages/deparser/src/kwlist.ts @@ -522,10 +522,10 @@ export const kwlist = { ] } as const; -export const RESERVED_KEYWORDS = new Set(kwlist.RESERVED_KEYWORD ?? []); -export const UNRESERVED_KEYWORDS = new Set(kwlist.UNRESERVED_KEYWORD ?? []); -export const COL_NAME_KEYWORDS = new Set(kwlist.COL_NAME_KEYWORD ?? []); -export const TYPE_FUNC_NAME_KEYWORDS = new Set(kwlist.TYPE_FUNC_NAME_KEYWORD ?? []); +export const RESERVED_KEYWORDS: Set = new Set(kwlist.RESERVED_KEYWORD ?? []); +export const UNRESERVED_KEYWORDS: Set = new Set(kwlist.UNRESERVED_KEYWORD ?? []); +export const COL_NAME_KEYWORDS: Set = new Set(kwlist.COL_NAME_KEYWORD ?? []); +export const TYPE_FUNC_NAME_KEYWORDS: Set = new Set(kwlist.TYPE_FUNC_NAME_KEYWORD ?? []); export function keywordKindOf(word: string): KeywordKind { const w = word.toLowerCase(); diff --git a/packages/deparser/src/utils/quote-utils.ts b/packages/deparser/src/utils/quote-utils.ts index babb5384..a9855efc 100644 --- a/packages/deparser/src/utils/quote-utils.ts +++ b/packages/deparser/src/utils/quote-utils.ts @@ -1,18 +1,4 @@ -const RESERVED_WORDS = new Set([ - 'all', 'analyse', 'analyze', 'and', 'any', 'array', 'as', 'asc', 'asymmetric', - 'authorization', 'binary', 'both', 'case', 'cast', 'check', 'collate', 'collation', - 'column', 'concurrently', 'constraint', 'create', 'cross', 'current_catalog', - 'current_date', 'current_role', 'current_schema', 'current_time', 'current_timestamp', - 'current_user', 'default', 'deferrable', 'desc', 'distinct', 'do', 'else', 'end', - 'except', 'false', 'fetch', 'for', 'foreign', 'freeze', 'from', 'full', 'grant', - 'group', 'having', 'ilike', 'in', 'initially', 'inner', 'intersect', 'into', 'is', - 'isnull', 'join', 'lateral', 'leading', 'left', 'like', 'limit', 'localtime', - 'localtimestamp', 'natural', 'not', 'notnull', 'null', 'offset', 'on', 'only', - 'or', 'order', 'outer', 'overlaps', 'placing', 'primary', 'references', 'returning', - 'right', 'select', 'session_user', 'similar', 'some', 'symmetric', 'table', 'tablesample', - 'then', 'to', 'trailing', 'true', 'union', 'unique', 'user', 'using', 'variadic', - 'verbose', 'when', 'where', 'window', 'with' -]); +import { RESERVED_KEYWORDS, TYPE_FUNC_NAME_KEYWORDS } from '../kwlist'; export class QuoteUtils { static needsQuotes(value: string): boolean { @@ -22,7 +8,7 @@ export class QuoteUtils { const lowerValue = value.toLowerCase(); - if (RESERVED_WORDS.has(lowerValue)) { + if (RESERVED_KEYWORDS.has(lowerValue) || TYPE_FUNC_NAME_KEYWORDS.has(lowerValue)) { return true; } @@ -93,4 +79,4 @@ export class QuoteUtils { return !/^\\x[0-9a-fA-F]+$/i.test(value) && value.includes('\\'); } -} \ No newline at end of file +} From d12faed6d8ef40ceaa5d2f6e00a2aa5676c58ef8 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Mon, 22 Dec 2025 02:07:27 +0000 Subject: [PATCH 2/2] fix: update keywords.ts generator to include Set type annotations The generated kwlist.ts needs explicit Set type annotations for TypeScript compatibility when calling .has() with string arguments. Co-Authored-By: Dan Lynch --- packages/deparser/scripts/keywords.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/deparser/scripts/keywords.ts b/packages/deparser/scripts/keywords.ts index 46e5557b..3bd2ad68 100644 --- a/packages/deparser/scripts/keywords.ts +++ b/packages/deparser/scripts/keywords.ts @@ -88,10 +88,10 @@ export type KeywordKind = export const kwlist = ${JSON.stringify(keywordsByKind, null, 2) .replace(/"([A-Z_]+)"/g, "$1")} as const; -export const RESERVED_KEYWORDS = new Set(kwlist.RESERVED_KEYWORD ?? []); -export const UNRESERVED_KEYWORDS = new Set(kwlist.UNRESERVED_KEYWORD ?? []); -export const COL_NAME_KEYWORDS = new Set(kwlist.COL_NAME_KEYWORD ?? []); -export const TYPE_FUNC_NAME_KEYWORDS = new Set(kwlist.TYPE_FUNC_NAME_KEYWORD ?? []); +export const RESERVED_KEYWORDS: Set = new Set(kwlist.RESERVED_KEYWORD ?? []); +export const UNRESERVED_KEYWORDS: Set = new Set(kwlist.UNRESERVED_KEYWORD ?? []); +export const COL_NAME_KEYWORDS: Set = new Set(kwlist.COL_NAME_KEYWORD ?? []); +export const TYPE_FUNC_NAME_KEYWORDS: Set = new Set(kwlist.TYPE_FUNC_NAME_KEYWORD ?? []); export function keywordKindOf(word: string): KeywordKind { const w = word.toLowerCase();