aboutsummaryrefslogtreecommitdiffstats
path: root/packages
diff options
context:
space:
mode:
authorMohamed Bassem <me@mbassem.com>2025-02-01 20:31:29 +0000
committerMohamed Bassem <me@mbassem.com>2025-02-01 20:31:29 +0000
commit1395545a0777860ffee0e0db709433b63b176fbd (patch)
tree0cae80e3852ff01fcfe980d67b63a5aa7d32801e /packages
parenta698aeaaebbaca14202670dd1efbbf666e360b8a (diff)
downloadkarakeep-1395545a0777860ffee0e0db709433b63b176fbd.tar.zst
fix: Fix search query parsing to allow and/or to be identifiers. Fixes #935
Diffstat (limited to 'packages')
-rw-r--r--packages/shared/searchQueryParser.test.ts10
-rw-r--r--packages/shared/searchQueryParser.ts9
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,
),