Skip to content

Commit 5ac3ac6

Browse files
committed
refactor: . Inline LinkResolver.resolve(), which is now misleading
LinkResolver now resolves links at run-time, not during construction of Link objects - so there is no value in having LinkResolver construction Links. This also simplifies TasksFile.ts and ListItem.ts, and makes test behaviour a bit clearer.
1 parent 7038ca2 commit 5ac3ac6

File tree

4 files changed

+10
-18
lines changed

4 files changed

+10
-18
lines changed

src/Scripting/TasksFile.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { type CachedMetadata, type FrontMatterCache, type Reference, getAllTags, parseFrontMatterTags } from 'obsidian';
2-
import type { Link } from '../Task/Link';
3-
import { LinkResolver } from '../Task/LinkResolver';
2+
import { Link } from '../Task/Link';
43

54
export type OptionalTasksFile = TasksFile | undefined;
65

@@ -36,7 +35,7 @@ export class TasksFile {
3635
}
3736

3837
private createLinks(obsidianRawLinks: Reference[] | undefined) {
39-
return obsidianRawLinks?.map((link) => LinkResolver.getInstance().resolve(link, this.path)) ?? [];
38+
return obsidianRawLinks?.map((link) => new Link(link, this.path)) ?? [];
4039
}
4140

4241
/**

src/Task/LinkResolver.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import type { Reference } from 'obsidian';
2-
import { Link } from './Link';
32

43
export type GetFirstLinkpathDestFn = (rawLink: Reference, sourcePath: string) => string | null;
54

@@ -25,11 +24,6 @@ export class LinkResolver {
2524
public resetGetFirstLinkpathDestFn() {
2625
this.getFirstLinkpathDestFn = defaultGetFirstLinkpathDestFn;
2726
}
28-
29-
public resolve(rawLink: Reference, pathContainingLink: string) {
30-
return new Link(rawLink, pathContainingLink);
31-
}
32-
3327
public getDestinationPath(rawLink: Reference, pathContainingLink: string) {
3428
return this.getFirstLinkpathDestFn(rawLink, pathContainingLink) ?? undefined;
3529
}

src/Task/ListItem.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@ import type { TasksFile } from '../Scripting/TasksFile';
33
import type { Task } from './Task';
44
import type { TaskLocation } from './TaskLocation';
55
import { TaskRegularExpressions } from './TaskRegularExpressions';
6-
import type { Link } from './Link';
7-
import { LinkResolver } from './LinkResolver';
6+
import { Link } from './Link';
87

98
export class ListItem {
109
// The original line read from file.
@@ -211,7 +210,7 @@ export class ListItem {
211210
public get outlinks(): Readonly<Link[]> {
212211
return this.rawLinksInFileBody
213212
.filter((link) => link.position.start.line === this.lineNumber)
214-
.map((link) => LinkResolver.getInstance().resolve(link, this.file.path));
213+
.map((link) => new Link(link, this.file.path));
215214
}
216215

217216
/**

tests/Task/LinkResolver.test.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type { Reference } from 'obsidian';
22
import link_in_file_body from '../Obsidian/__test_data__/link_in_file_body.json';
33
import { LinkResolver } from '../../src/Task/LinkResolver';
4+
import { Link } from '../../src/Task/Link';
45

56
describe('LinkResolver', () => {
67
let rawLink: Reference;
@@ -10,15 +11,14 @@ describe('LinkResolver', () => {
1011
});
1112

1213
it('should resolve a link via local instance', () => {
13-
const resolver = new LinkResolver();
14-
const link = resolver.resolve(rawLink, link_in_file_body.filePath);
14+
const link = new Link(rawLink, link_in_file_body.filePath);
1515

1616
expect(link.originalMarkdown).toEqual('[[yaml_tags_is_empty]]');
1717
expect(link.destinationPath).toBeNull();
1818
});
1919

2020
it('should resolve a link via global instance', () => {
21-
const link = LinkResolver.getInstance().resolve(rawLink, link_in_file_body.filePath);
21+
const link = new Link(rawLink, link_in_file_body.filePath);
2222

2323
expect(link.originalMarkdown).toEqual('[[yaml_tags_is_empty]]');
2424
expect(link.destinationPath).toBeNull();
@@ -28,20 +28,20 @@ describe('LinkResolver', () => {
2828
const resolver = LinkResolver.getInstance();
2929
resolver.setGetFirstLinkpathDestFn(() => 'Hello World.md');
3030

31-
const link = resolver.resolve(rawLink, link_in_file_body.filePath);
31+
const link = new Link(rawLink, link_in_file_body.filePath);
3232
expect(link.destinationPath).toEqual('Hello World.md');
3333
});
3434

3535
it('should allow the global instance to be reset', () => {
3636
const globalInstance = LinkResolver.getInstance();
3737
globalInstance.setGetFirstLinkpathDestFn(() => 'From Global Instance.md');
3838

39-
const link1 = globalInstance.resolve(rawLink, link_in_file_body.filePath);
39+
const link1 = new Link(rawLink, link_in_file_body.filePath);
4040
expect(link1.destinationPath).toEqual('From Global Instance.md');
4141

4242
globalInstance.resetGetFirstLinkpathDestFn();
4343

44-
const link2 = globalInstance.resolve(rawLink, link_in_file_body.filePath);
44+
const link2 = new Link(rawLink, link_in_file_body.filePath);
4545
expect(link2.destinationPath).toBeNull();
4646
});
4747
});

0 commit comments

Comments
 (0)