Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .csharpierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"printWidth": 180
}
1 change: 1 addition & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ trim_trailing_whitespace = false
insert_final_newline = false
indent_style = space
indent_size = 4
max_line_length = 180

# Microsoft .NET properties
csharp_new_line_before_members_in_object_initializers = false
Expand Down
4 changes: 2 additions & 2 deletions .llm/context.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,8 @@ editing any skill with `pwsh -NoProfile -File scripts/generate-skills-index.ps1`
enforces this; file-level usings are sanctioned only for namespaceless
assembly-attribute files and `[assembly: ...]` preambles such as `InternalsVisibleTo`
(#124).
2. Format every modified `.cs` file with CSharpier 1.1.2
(`dotnet tool run csharpier -- format <paths>`); treat formatting as a gate.
2. Format every modified `.cs` file with CSharpier 1.1.2 (print width 180 in
`.csharpierrc`; `dotnet tool run csharpier -- format <paths>`); gate on it.
3. Resolve analyzer warnings before review.
4. Prefer explicit namespaces so the window's namespace/type tree stays predictable.
5. Avoid runtime reflection and stringly-typed lookups; wire menu items, property
Expand Down
69 changes: 15 additions & 54 deletions Editor/DataVisualizer/Data/DataVisualizerSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,14 @@ namespace WallstopStudios.DataVisualizer.Editor.Data
using Utilities;
using WallstopStudios.DataVisualizer;

[CreateAssetMenu(
fileName = "DataVisualizerSettings",
menuName = "Wallstop Studios/DxVisualizer/DxVisualizer Settings",
order = 1
)]
[CreateAssetMenu(fileName = "DataVisualizerSettings", menuName = "Wallstop Studios/DxVisualizer/DxVisualizer Settings", order = 1)]
public sealed class DataVisualizerSettings : ScriptableObject
{
public const string DefaultDataFolderPath = "Assets/Data";

public string DataFolderPath => _dataFolderPath;

[Tooltip(
"If true, window state (selection, order, collapse) is saved in a special ScriptableObject. If false, state is saved within this settings asset file."
)]
[Tooltip("If true, window state (selection, order, collapse) is saved in a special ScriptableObject. If false, state is saved within this settings asset file.")]
public bool persistStateInSettingsAsset;

[Tooltip("If true, when selecting an Object, it will be selected in the Inspector.")]
Expand All @@ -31,9 +25,7 @@ public sealed class DataVisualizerSettings : ScriptableObject
[ReadOnly]
public string themeGuid = string.Empty;

[Tooltip(
"Path relative to the project root (e.g., Assets/Data) where DataObject assets might be located or created."
)]
[Tooltip("Path relative to the project root (e.g., Assets/Data) where DataObject assets might be located or created.")]
[SerializeField]
internal string _dataFolderPath = DefaultDataFolderPath;

Expand Down Expand Up @@ -111,17 +103,11 @@ public void HydrateFrom(DataVisualizerUserState userState)
lastSelectedTypeFullName = userState.lastSelectedTypeFullName;
namespaceOrder = PersistedStateCopy.CloneStrings(userState.namespaceOrder);
typeOrders = PersistedStateCopy.CloneNamespaceTypeOrders(userState.typeOrders);
lastObjectSelections = PersistedStateCopy.CloneLastObjectSelections(
userState.lastObjectSelections
);
namespaceCollapseStates = PersistedStateCopy.CloneNamespaceCollapseStates(
userState.namespaceCollapseStates
);
lastObjectSelections = PersistedStateCopy.CloneLastObjectSelections(userState.lastObjectSelections);
namespaceCollapseStates = PersistedStateCopy.CloneNamespaceCollapseStates(userState.namespaceCollapseStates);
objectOrders = PersistedStateCopy.CloneTypeObjectOrders(userState.objectOrders);
managedTypeNames = PersistedStateCopy.CloneStrings(userState.managedTypeNames);
labelFilterConfigs = PersistedStateCopy.CloneTypeLabelFilterConfigs(
userState.labelFilterConfigs
);
labelFilterConfigs = PersistedStateCopy.CloneTypeLabelFilterConfigs(userState.labelFilterConfigs);
processorStates = PersistedStateCopy.CloneProcessorStates(userState.processorStates);
MarkDirty();
}
Expand All @@ -134,11 +120,7 @@ public bool SetNamespaceCollapsed(string namespaceKey, bool isCollapsed)
}

namespaceCollapseStates ??= new List<NamespaceCollapseState>();
bool changed = NamespaceCollapseState.SetCollapsed(
namespaceCollapseStates,
namespaceKey,
isCollapsed
);
bool changed = NamespaceCollapseState.SetCollapsed(namespaceCollapseStates, namespaceKey, isCollapsed);
if (changed)
{
MarkDirty();
Expand All @@ -160,9 +142,7 @@ public bool RemoveNamespaceCollapseState(string namespaceKey)

internal List<string> GetOrCreateObjectOrderList(string typeFullName)
{
TypeObjectOrder entry = objectOrders.Find(o =>
string.Equals(o.TypeFullName, typeFullName, StringComparison.Ordinal)
);
TypeObjectOrder entry = objectOrders.Find(o => string.Equals(o.TypeFullName, typeFullName, StringComparison.Ordinal));
if (entry != null)
{
return entry.ObjectGuids;
Expand All @@ -181,9 +161,7 @@ internal bool SetLastObjectForType(string typeFullName, string guid)
}

lastObjectSelections ??= new List<LastObjectSelectionEntry>();
int existingIndex = lastObjectSelections.FindIndex(e =>
string.Equals(e.typeFullName, typeFullName, StringComparison.Ordinal)
);
int existingIndex = lastObjectSelections.FindIndex(e => string.Equals(e.typeFullName, typeFullName, StringComparison.Ordinal));
if (string.IsNullOrWhiteSpace(guid))
{
if (existingIndex < 0)
Expand All @@ -196,14 +174,7 @@ internal bool SetLastObjectForType(string typeFullName, string guid)
return true;
}

if (
0 <= existingIndex
&& string.Equals(
lastObjectSelections[existingIndex].objectGuid,
guid,
StringComparison.Ordinal
)
)
if (0 <= existingIndex && string.Equals(lastObjectSelections[existingIndex].objectGuid, guid, StringComparison.Ordinal))
{
return false;
}
Expand All @@ -214,9 +185,7 @@ internal bool SetLastObjectForType(string typeFullName, string guid)
}
else
{
lastObjectSelections.Add(
new LastObjectSelectionEntry { typeFullName = typeFullName, objectGuid = guid }
);
lastObjectSelections.Add(new LastObjectSelectionEntry { typeFullName = typeFullName, objectGuid = guid });
}

MarkDirty();
Expand All @@ -230,16 +199,12 @@ internal string GetLastObjectForType(string typeFullName)
return null;
}

return lastObjectSelections
?.Find(e => string.Equals(e.typeFullName, typeFullName, StringComparison.Ordinal))
?.objectGuid;
return lastObjectSelections?.Find(e => string.Equals(e.typeFullName, typeFullName, StringComparison.Ordinal))?.objectGuid;
}

internal List<string> GetOrCreateTypeOrderList(string namespaceKey)
{
NamespaceTypeOrder entry = typeOrders.Find(o =>
string.Equals(o.namespaceKey, namespaceKey, StringComparison.Ordinal)
);
NamespaceTypeOrder entry = typeOrders.Find(o => string.Equals(o.namespaceKey, namespaceKey, StringComparison.Ordinal));
if (entry != null)
{
return entry.typeNames;
Expand All @@ -252,17 +217,13 @@ internal List<string> GetOrCreateTypeOrderList(string namespaceKey)

internal bool HasCollapseState(string namespaceKey)
{
NamespaceCollapseState entry = namespaceCollapseStates.Find(o =>
string.Equals(o.namespaceKey, namespaceKey, StringComparison.Ordinal)
);
NamespaceCollapseState entry = namespaceCollapseStates.Find(o => string.Equals(o.namespaceKey, namespaceKey, StringComparison.Ordinal));
return entry != null;
}

internal NamespaceCollapseState GetOrCreateCollapseState(string namespaceKey)
{
NamespaceCollapseState entry = namespaceCollapseStates.Find(o =>
string.Equals(o.namespaceKey, namespaceKey, StringComparison.Ordinal)
);
NamespaceCollapseState entry = namespaceCollapseStates.Find(o => string.Equals(o.namespaceKey, namespaceKey, StringComparison.Ordinal));
if (entry != null)
{
return entry;
Expand Down
64 changes: 14 additions & 50 deletions Editor/DataVisualizer/Data/DataVisualizerUserState.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,19 +34,14 @@ public static DataVisualizerUserState FromJson(string json)

try
{
DataVisualizerUserState userState = JsonUtility.FromJson<DataVisualizerUserState>(
json
);
DataVisualizerUserState userState = JsonUtility.FromJson<DataVisualizerUserState>(json);
if (userState == null)
{
return userState;
}

LegacyUserState legacyUserState = JsonUtility.FromJson<LegacyUserState>(json);
if (
string.IsNullOrWhiteSpace(userState.lastSelectedTypeFullName)
&& !string.IsNullOrWhiteSpace(legacyUserState?.lastSelectedTypeName)
)
if (string.IsNullOrWhiteSpace(userState.lastSelectedTypeFullName) && !string.IsNullOrWhiteSpace(legacyUserState?.lastSelectedTypeName))
{
userState.lastSelectedTypeFullName = legacyUserState.lastSelectedTypeName;
}
Expand All @@ -71,25 +66,17 @@ public void HydrateFrom(DataVisualizerSettings settings)
lastSelectedTypeFullName = settings.lastSelectedTypeFullName;
namespaceOrder = PersistedStateCopy.CloneStrings(settings.namespaceOrder);
typeOrders = PersistedStateCopy.CloneNamespaceTypeOrders(settings.typeOrders);
lastObjectSelections = PersistedStateCopy.CloneLastObjectSelections(
settings.lastObjectSelections
);
namespaceCollapseStates = PersistedStateCopy.CloneNamespaceCollapseStates(
settings.namespaceCollapseStates
);
lastObjectSelections = PersistedStateCopy.CloneLastObjectSelections(settings.lastObjectSelections);
namespaceCollapseStates = PersistedStateCopy.CloneNamespaceCollapseStates(settings.namespaceCollapseStates);
objectOrders = PersistedStateCopy.CloneTypeObjectOrders(settings.objectOrders);
managedTypeNames = PersistedStateCopy.CloneStrings(settings.managedTypeNames);
labelFilterConfigs = PersistedStateCopy.CloneTypeLabelFilterConfigs(
settings.labelFilterConfigs
);
labelFilterConfigs = PersistedStateCopy.CloneTypeLabelFilterConfigs(settings.labelFilterConfigs);
processorStates = PersistedStateCopy.CloneProcessorStates(settings.processorStates);
}

public List<string> GetOrCreateObjectOrderList(string typeFullName)
{
TypeObjectOrder entry = objectOrders.Find(o =>
string.Equals(o.TypeFullName, typeFullName, StringComparison.Ordinal)
);
TypeObjectOrder entry = objectOrders.Find(o => string.Equals(o.TypeFullName, typeFullName, StringComparison.Ordinal));
if (entry != null)
{
return entry.ObjectGuids;
Expand All @@ -108,9 +95,7 @@ public bool SetLastObjectForType(string typeFullName, string guid)
}

lastObjectSelections ??= new List<LastObjectSelectionEntry>();
int existingIndex = lastObjectSelections.FindIndex(e =>
string.Equals(e.typeFullName, typeFullName, StringComparison.Ordinal)
);
int existingIndex = lastObjectSelections.FindIndex(e => string.Equals(e.typeFullName, typeFullName, StringComparison.Ordinal));
if (string.IsNullOrWhiteSpace(guid))
{
if (existingIndex < 0)
Expand All @@ -122,14 +107,7 @@ public bool SetLastObjectForType(string typeFullName, string guid)
return true;
}

if (
0 <= existingIndex
&& string.Equals(
lastObjectSelections[existingIndex].objectGuid,
guid,
StringComparison.Ordinal
)
)
if (0 <= existingIndex && string.Equals(lastObjectSelections[existingIndex].objectGuid, guid, StringComparison.Ordinal))
{
return false;
}
Expand All @@ -140,9 +118,7 @@ public bool SetLastObjectForType(string typeFullName, string guid)
}
else
{
lastObjectSelections.Add(
new LastObjectSelectionEntry { typeFullName = typeFullName, objectGuid = guid }
);
lastObjectSelections.Add(new LastObjectSelectionEntry { typeFullName = typeFullName, objectGuid = guid });
}

return true;
Expand All @@ -155,16 +131,12 @@ public string GetLastObjectForType(string typeFullName)
return null;
}

return lastObjectSelections
?.Find(e => string.Equals(e.typeFullName, typeFullName, StringComparison.Ordinal))
?.objectGuid;
return lastObjectSelections?.Find(e => string.Equals(e.typeFullName, typeFullName, StringComparison.Ordinal))?.objectGuid;
}

public List<string> GetOrCreateTypeOrderList(string namespaceKey)
{
NamespaceTypeOrder entry = typeOrders.Find(o =>
string.Equals(o.namespaceKey, namespaceKey, StringComparison.Ordinal)
);
NamespaceTypeOrder entry = typeOrders.Find(o => string.Equals(o.namespaceKey, namespaceKey, StringComparison.Ordinal));
if (entry != null)
{
return entry.typeNames;
Expand All @@ -177,9 +149,7 @@ public List<string> GetOrCreateTypeOrderList(string namespaceKey)

public bool HasCollapseState(string namespaceKey)
{
NamespaceCollapseState entry = namespaceCollapseStates.Find(o =>
string.Equals(o.namespaceKey, namespaceKey, StringComparison.Ordinal)
);
NamespaceCollapseState entry = namespaceCollapseStates.Find(o => string.Equals(o.namespaceKey, namespaceKey, StringComparison.Ordinal));
return entry != null;
}

Expand All @@ -191,11 +161,7 @@ public bool SetNamespaceCollapsed(string namespaceKey, bool isCollapsed)
}

namespaceCollapseStates ??= new List<NamespaceCollapseState>();
return NamespaceCollapseState.SetCollapsed(
namespaceCollapseStates,
namespaceKey,
isCollapsed
);
return NamespaceCollapseState.SetCollapsed(namespaceCollapseStates, namespaceKey, isCollapsed);
}

public bool RemoveNamespaceCollapseState(string namespaceKey)
Expand All @@ -205,9 +171,7 @@ public bool RemoveNamespaceCollapseState(string namespaceKey)

public NamespaceCollapseState GetOrCreateCollapseState(string namespaceKey)
{
NamespaceCollapseState entry = namespaceCollapseStates.Find(o =>
string.Equals(o.namespaceKey, namespaceKey, StringComparison.Ordinal)
);
NamespaceCollapseState entry = namespaceCollapseStates.Find(o => string.Equals(o.namespaceKey, namespaceKey, StringComparison.Ordinal));
if (entry != null)
{
return entry;
Expand Down
6 changes: 1 addition & 5 deletions Editor/DataVisualizer/Data/LastObjectSelectionEntry.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,7 @@ public sealed class LastObjectSelectionEntry

public LastObjectSelectionEntry Clone()
{
return new LastObjectSelectionEntry
{
typeFullName = typeFullName ?? string.Empty,
objectGuid = objectGuid ?? string.Empty,
};
return new LastObjectSelectionEntry { typeFullName = typeFullName ?? string.Empty, objectGuid = objectGuid ?? string.Empty };
}
}
}
29 changes: 5 additions & 24 deletions Editor/DataVisualizer/Data/NamespaceCollapseState.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,29 +9,17 @@ public sealed class NamespaceCollapseState
public string namespaceKey = string.Empty;
public bool isCollapsed;

public static bool SetCollapsed(
List<NamespaceCollapseState> states,
string namespaceKey,
bool isCollapsed
)
public static bool SetCollapsed(List<NamespaceCollapseState> states, string namespaceKey, bool isCollapsed)
{
if (states == null || string.IsNullOrWhiteSpace(namespaceKey))
{
return false;
}

NamespaceCollapseState entry = states.Find(state =>
string.Equals(state?.namespaceKey, namespaceKey, StringComparison.Ordinal)
);
NamespaceCollapseState entry = states.Find(state => string.Equals(state?.namespaceKey, namespaceKey, StringComparison.Ordinal));
if (entry == null)
{
states.Add(
new NamespaceCollapseState
{
namespaceKey = namespaceKey,
isCollapsed = isCollapsed,
}
);
states.Add(new NamespaceCollapseState { namespaceKey = namespaceKey, isCollapsed = isCollapsed });
return true;
}

Expand All @@ -51,19 +39,12 @@ public static bool Remove(List<NamespaceCollapseState> states, string namespaceK
return false;
}

return 0
< states.RemoveAll(state =>
string.Equals(state?.namespaceKey, namespaceKey, StringComparison.Ordinal)
);
return 0 < states.RemoveAll(state => string.Equals(state?.namespaceKey, namespaceKey, StringComparison.Ordinal));
}

public NamespaceCollapseState Clone()
{
return new NamespaceCollapseState
{
namespaceKey = namespaceKey ?? string.Empty,
isCollapsed = isCollapsed,
};
return new NamespaceCollapseState { namespaceKey = namespaceKey ?? string.Empty, isCollapsed = isCollapsed };
}
}
}
Loading
Loading