obsidian-tasks-group / obsidian-tasks

Task management for the Obsidian knowledge base.
https://publish.obsidian.md/tasks/
MIT License
2.44k stars 228 forks source link

Address increase in cyclic dependencies in src/ #2278

Closed claremacrae closed 1 year ago

claremacrae commented 1 year ago

Description

The introduction of GlobalQuery.ts in #2215 has increased the cyclic dependencies in src/a lot:

yarn add madge
madge --circular --extensions ts ./src
Processed 122 files (1.2s) (15 warnings)

1) Config/GlobalFilter.ts > Config/Settings.ts
2) Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts
3) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > IQuery.ts > Query/Grouper.ts
4) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > IQuery.ts > Query/QueryResult.ts > Query/TaskGroup.ts
5) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > IQuery.ts > Query/QueryResult.ts > Query/TaskGroups.ts > Query/GroupDisplayHeadingSelector.ts > Query/TaskGroupingTreeStorage.ts
6) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > IQuery.ts > Query/QueryResult.ts > Query/TaskGroups.ts > Query/TaskGroupingTree.ts
7) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > IQuery.ts > Query/QueryResult.ts > Query/TaskGroups.ts
8) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > IQuery.ts
9) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > Query/Filter/Filter.ts
10) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > Query/FilterParser.ts > Query/Filter/BacklinkField.ts > Query/Filter/TextField.ts > Query/Filter/Field.ts > Query/Sorter.ts
11) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > Query/FilterParser.ts > Query/Filter/BacklinkField.ts > Query/Filter/TextField.ts
12) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > Query/FilterParser.ts > Query/Filter/BacklinkField.ts
13) Query/FilterParser.ts > Query/Filter/BooleanField.ts
14) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > Query/FilterParser.ts > Query/Filter/BooleanField.ts
15) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > Query/FilterParser.ts > Query/Filter/CreatedDateField.ts > Query/Filter/DateField.ts
16) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > Query/FilterParser.ts > Query/Filter/CreatedDateField.ts
17) Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > Query/FilterParser.ts > Query/Filter/DescriptionField.ts
18) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > Query/FilterParser.ts > Query/Filter/DescriptionField.ts
19) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > Query/FilterParser.ts > Query/Filter/DoneDateField.ts
20) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > Query/FilterParser.ts > Query/Filter/DueDateField.ts
21) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > Query/FilterParser.ts > Query/Filter/FilenameField.ts
22) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > Query/FilterParser.ts > Query/Filter/FolderField.ts
23) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > Query/FilterParser.ts > Query/Filter/FunctionField.ts > Scripting/Expression.ts
24) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > Query/FilterParser.ts > Query/Filter/FunctionField.ts > Scripting/TaskExpression.ts
25) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > Query/FilterParser.ts > Query/Filter/FunctionField.ts
26) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > Query/FilterParser.ts > Query/Filter/HappensDateField.ts
27) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > Query/FilterParser.ts > Query/Filter/HeadingField.ts
28) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > Query/FilterParser.ts > Query/Filter/PathField.ts
29) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > Query/FilterParser.ts > Query/Filter/PriorityField.ts
30) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > Query/FilterParser.ts > Query/Filter/PriorityField.ts > lib/PriorityTools.ts
31) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > Query/FilterParser.ts > Query/Filter/RecurrenceField.ts
32) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > Query/FilterParser.ts > Query/Filter/RecurringField.ts
33) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > Query/FilterParser.ts > Query/Filter/RootField.ts
34) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > Query/FilterParser.ts > Query/Filter/ScheduledDateField.ts
35) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > Query/FilterParser.ts > Query/Filter/StartDateField.ts
36) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > Query/FilterParser.ts > Query/Filter/StatusField.ts
37) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > Query/FilterParser.ts > Query/Filter/StatusNameField.ts
38) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > Query/FilterParser.ts > Query/Filter/StatusTypeField.ts
39) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > Query/FilterParser.ts > Query/Filter/TagsField.ts > Query/Filter/MultiTextField.ts
40) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > Query/FilterParser.ts > Query/Filter/TagsField.ts
41) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > Query/FilterParser.ts > Query/Filter/UrgencyField.ts
42) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts > Query/Sort.ts
43) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Config/GlobalQuery.ts > Query/Query.ts
44) Config/GlobalFilter.ts > Config/Settings.ts > Suggestor/Suggestor.ts
45) Config/Settings.ts > Suggestor/Suggestor.ts
46) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Suggestor/Suggestor.ts
47) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Suggestor/Suggestor.ts > TaskSerializer/DefaultTaskSerializer.ts
48) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > TaskSerializer/DataviewTaskSerializer.ts
49) Task.ts > DateFallback.ts
50) Task.ts > Scripting/TasksDate.ts
51) Task.ts > TaskLineRenderer.ts > File.ts
52) Task.ts > TaskLineRenderer.ts > File.ts > lib/MockDataCreator.ts
53) Task.ts > TaskLineRenderer.ts
54) Task.ts > Urgency.ts
55) Cache.ts > TasksEvents.ts
56) Config/SettingsTab.ts > main.ts

Required Steps

No response

How to Test

yarn add madge
madge --circular --extensions ts ./src
claremacrae commented 1 year ago

Prior to GlobalQuery, it was:

Processed 121 files (1s) (15 warnings)

1) Config/GlobalFilter.ts > Config/Settings.ts
2) Config/GlobalFilter.ts > Config/Settings.ts > Suggestor/Suggestor.ts
3) Config/Settings.ts > Suggestor/Suggestor.ts
4) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Suggestor/Suggestor.ts
5) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Suggestor/Suggestor.ts > TaskSerializer/DefaultTaskSerializer.ts
6) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > TaskSerializer/DataviewTaskSerializer.ts
7) Task.ts > DateFallback.ts
8) Task.ts > Scripting/TasksDate.ts
9) Task.ts > TaskLineRenderer.ts > File.ts
10) Task.ts > TaskLineRenderer.ts > File.ts > lib/MockDataCreator.ts
11) Task.ts > TaskLineRenderer.ts
12) Task.ts > TaskLineRenderer.ts > lib/PriorityTools.ts
13) Task.ts > Urgency.ts
14) Cache.ts > TasksEvents.ts
15) Config/SettingsTab.ts > main.ts
16) Query/FilterParser.ts > Query/Filter/BooleanField.ts
claremacrae commented 1 year ago

This diff...

diff --git a/src/Config/Settings.ts b/src/Config/Settings.ts
index 1144556c..4bb3bb45 100644
--- a/src/Config/Settings.ts
+++ b/src/Config/Settings.ts
@@ -15,7 +15,6 @@ import { StatusSettings } from './StatusSettings';
 import { Feature } from './Feature';
 import type { FeatureFlag } from './Feature';
 import { GlobalFilter } from './GlobalFilter';
-import { GlobalQuery } from './GlobalQuery';

 interface SettingsMap {
     [key: string]: string | boolean;
@@ -91,7 +90,7 @@ export interface Settings {
 }

 const defaultSettings: Settings = {
-    globalQuery: GlobalQuery.empty,
+    globalQuery: '',
     globalFilter: GlobalFilter.empty,
     removeGlobalFilter: false,
     taskFormat: 'tasksPluginEmoji',

Reduces the cyclic dependencies to the previous output::

Processed 122 files (1.2s) (15 warnings)

1) Config/GlobalFilter.ts > Config/Settings.ts
2) Config/GlobalFilter.ts > Config/Settings.ts > Suggestor/Suggestor.ts
3) Config/Settings.ts > Suggestor/Suggestor.ts
4) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Suggestor/Suggestor.ts
5) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > Suggestor/Suggestor.ts > TaskSerializer/DefaultTaskSerializer.ts
6) Task.ts > Config/GlobalFilter.ts > Config/Settings.ts > TaskSerializer/DataviewTaskSerializer.ts
7) Task.ts > DateFallback.ts
8) Task.ts > Scripting/TasksDate.ts
9) Task.ts > TaskLineRenderer.ts > File.ts
10) Task.ts > TaskLineRenderer.ts > File.ts > lib/MockDataCreator.ts
11) Task.ts > TaskLineRenderer.ts
12) Task.ts > TaskLineRenderer.ts > lib/PriorityTools.ts
13) Task.ts > Urgency.ts
14) Cache.ts > TasksEvents.ts
15) Query/FilterParser.ts > Query/Filter/BooleanField.ts
16) Config/SettingsTab.ts > main.ts