diff options
| author | Mohamed Bassem <me@mbassem.com> | 2025-02-01 20:31:29 +0000 |
|---|---|---|
| committer | Mohamed Bassem <me@mbassem.com> | 2025-02-01 20:31:29 +0000 |
| commit | 1395545a0777860ffee0e0db709433b63b176fbd (patch) | |
| tree | 0cae80e3852ff01fcfe980d67b63a5aa7d32801e /packages/shared | |
| parent | a698aeaaebbaca14202670dd1efbbf666e360b8a (diff) | |
| download | karakeep-1395545a0777860ffee0e0db709433b63b176fbd.tar.zst | |
fix: Fix search query parsing to allow and/or to be identifiers. Fixes #935
Diffstat (limited to 'packages/shared')
| -rw-r--r-- | packages/shared/searchQueryParser.test.ts | 10 | ||||
| -rw-r--r-- | packages/shared/searchQueryParser.ts | 9 |
2 files changed, 15 insertions, 4 deletions
diff --git a/packages/shared/searchQueryParser.test.ts b/packages/shared/searchQueryParser.test.ts index 7430d58f..17accd1e 100644 --- a/packages/shared/searchQueryParser.test.ts +++ b/packages/shared/searchQueryParser.test.ts @@ -198,6 +198,16 @@ describe("Search Query Parser", () => { inverse: true, }, }); + // Tags starting with qualifiers should be treated correctly + expect(parseSearchQuery("#android")).toEqual({ + result: "full", + text: "", + matcher: { + type: "tagName", + tagName: "android", + inverse: false, + }, + }); expect(parseSearchQuery("list:my-list")).toEqual({ result: "full", text: "", diff --git a/packages/shared/searchQueryParser.ts b/packages/shared/searchQueryParser.ts index dd4ff957..3d8a1519 100644 --- a/packages/shared/searchQueryParser.ts +++ b/packages/shared/searchQueryParser.ts @@ -2,6 +2,7 @@ import { alt, alt_sc, apply, + kleft, kmid, kright, lrec_sc, @@ -35,8 +36,8 @@ enum TokenType { // Rules are in order of priority const lexerRules: [RegExp, TokenType][] = [ - [/^and/i, TokenType.And], - [/^or/i, TokenType.Or], + [/^\s+and/i, TokenType.And], + [/^\s+or/i, TokenType.Or], [/^#/, TokenType.Hash], [/^(is|url|list|after|before):/, TokenType.Qualifier], @@ -263,8 +264,8 @@ EXP.setPattern( seq( alt( tok(TokenType.Space), - kmid(tok(TokenType.Space), tok(TokenType.And), tok(TokenType.Space)), - kmid(tok(TokenType.Space), tok(TokenType.Or), tok(TokenType.Space)), + kleft(tok(TokenType.And), tok(TokenType.Space)), + kleft(tok(TokenType.Or), tok(TokenType.Space)), ), MATCHER, ), |
