From d6e4cd312e97b03d4e01a756949f977c630270ef Mon Sep 17 00:00:00 2001 From: Kieran David Evans Date: Wed, 24 Sep 2025 13:42:40 +0100 Subject: [PATCH] An attempt at class attr refs --- .../References/RimworldReferenceProvider.cs | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/dotnet/ReSharperPlugin.RimworldDev/References/RimworldReferenceProvider.cs b/src/dotnet/ReSharperPlugin.RimworldDev/References/RimworldReferenceProvider.cs index d24c37e..c6b7b13 100644 --- a/src/dotnet/ReSharperPlugin.RimworldDev/References/RimworldReferenceProvider.cs +++ b/src/dotnet/ReSharperPlugin.RimworldDev/References/RimworldReferenceProvider.cs @@ -56,12 +56,29 @@ public ReferenceCollection GetReferences(ITreeNode element, ReferenceCollection return GetReferenceForDeclaredElement(element, oldReferences); } + var rimworldSymbolScope = ScopeHelper.RimworldScope; + var allSymbolScopes = ScopeHelper.AllScopes; + + // an attempt to pick up class attributes and provide references to the class itself + if (element.Parent != null && element.NodeType.ToString() == "STRING" && + element.Parent.Parent is IXmlAttribute xmlAttr && + string.Equals(xmlAttr.AttributeName, "Class", StringComparison.OrdinalIgnoreCase)) + { + var className = element.GetText().Trim('"'); + if (string.IsNullOrWhiteSpace(className)) return new ReferenceCollection(); + + var typeElement = className.Contains(".") + ? ScopeHelper.GetScopeForClass(className).GetTypeElementByCLRName(className) + : rimworldSymbolScope.GetElementsByShortName(className).FirstOrDefault(); + + if (typeElement == null) return new ReferenceCollection(); + return new ReferenceCollection(new RimworldXmlReference(typeElement, element)); + } + if (element.NodeType.ToString() == "TEXT") return GetReferencesForText(element, oldReferences); if (element is not XmlIdentifier identifier) return new ReferenceCollection(); if (element.GetSourceFile() is not { } sourceFile) return new ReferenceCollection(); - var rimworldSymbolScope = ScopeHelper.RimworldScope; - var allSymbolScopes = ScopeHelper.AllScopes; var hierarchy = RimworldXMLItemProvider.GetHierarchy(identifier);