Skip to content

Commit 800a863

Browse files
committed
feat: Add 'has id' query
1 parent 4e8fd98 commit 800a863

File tree

4 files changed

+14
-1
lines changed

4 files changed

+14
-1
lines changed

src/Query/Filter/IdField.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,14 @@ export class IdField extends Field {
1111
this.filterInstructions.add('has id', (task: Task) => task.id.length > 0);
1212
}
1313

14+
public canCreateFilterForLine(line: string): boolean {
15+
if (this.filterInstructions.canCreateFilterForLine(line)) {
16+
return true;
17+
}
18+
19+
return super.canCreateFilterForLine(line);
20+
}
21+
1422
public createFilterOrErrorMessage(line: string): FilterOrErrorMessage {
1523
const filterResult = this.filterInstructions.createFilterOrErrorMessage(line);
1624
if (filterResult.filter !== undefined) {

src/Query/FilterParser.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import { RootField } from './Filter/RootField';
2929
import { BacklinkField } from './Filter/BacklinkField';
3030
import { CancelledDateField } from './Filter/CancelledDateField';
3131
import { BlockingField } from './Filter/BlockingField';
32+
import { IdField } from './Filter/IdField';
3233

3334
// When parsing a query the fields are tested one by one according to this order.
3435
// Since BooleanField is a meta-field, which needs to aggregate a few fields together, it is intended to
@@ -61,6 +62,7 @@ export const fieldCreators: EndsWith<BooleanField> = [
6162
() => new UrgencyField(),
6263
() => new RecurrenceField(),
6364
() => new FunctionField(),
65+
() => new IdField(),
6466
() => new BlockingField(),
6567
() => new BooleanField(), // --- Please make sure to keep BooleanField last (see comment above) ---
6668
];

tests/Query/Filter/IdField.test.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ describe('id', () => {
1111

1212
it('by id presence', () => {
1313
// Arrange
14-
const filter = new IdField().createFilterOrErrorMessage('has id');
14+
const line = 'has id';
15+
const filter = new IdField().createFilterOrErrorMessage(line);
16+
expect(idField.canCreateFilterForLine(line)).toEqual(true);
1517

1618
// Act, Assert
1719
testFilter(filter, new TaskBuilder().id(''), false);

tests/Query/Query.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ describe('Query parsing', () => {
8787
'has done date',
8888
'has due date',
8989
'has happens date',
90+
'has id',
9091
'has scheduled date',
9192
'has start date',
9293
'has tag',

0 commit comments

Comments
 (0)