import os import re import networkx as nx def build_class_graph(directory): """Builds a directed acyclic graph of class dependencies.""" # Create a graph to store the dependencies graph = nx.DiGraph() # Find all .gd files in the directory for root, dirs, files in os.walk(directory): for file in files: if not file.endswith(".gd"): continue file_path = os.path.join(root, file) # Find the class name in the file with open(file_path, "r", encoding='utf8') as f: contents = f.read() match = re.search(r"^class_name\s+(\w+)", contents, re.MULTILINE) if not match: continue class_name = match.group(1) graph.add_node(class_name) # Find the dependencies of the class for dep_match in re.finditer( r"^\s*extends\s+(\w+)", contents, re.MULTILINE ): dep_name = dep_match.group(1) if is_ignored_types(dep_name) or dep_name == class_name: continue print(dep_name) graph.add_edge(class_name, dep_name) for dep_match in re.finditer( r"^.*:\s*(\w+).*\n", contents, re.MULTILINE ): dep_name = dep_match.group(1) if is_ignored_types(dep_name) or dep_name == class_name: continue print(dep_name) graph.add_edge(class_name, dep_name) for dep_match in re.finditer( r"^.*->\s*(\w+).*\n", contents, re.MULTILINE ): dep_name = dep_match.group(1) if is_ignored_types(dep_name) or dep_name == class_name: continue print(dep_name) graph.add_edge(class_name, dep_name) for dep_match in re.finditer( r"^.*Array\[(\w+)].*\n", contents, re.MULTILINE ): dep_name = dep_match.group(1) if is_ignored_types(dep_name) or dep_name == class_name: continue print(dep_name) graph.add_edge(class_name, dep_name) return graph def find_circular_dependencies(directory): """Finds circular dependencies between classes in the directory.""" graph = build_class_graph(directory) for cycle in nx.simple_cycles(graph): print(cycle) # From https://docs.godotengine.org/en/stable/classes/index.html def is_ignored_types(t): return t in ["@GDScript", "@GlobalScope", "Node", "AcceptDialog", "AnimatableBody2D", "AnimatableBody3D", "AnimatedSprite2D", "AnimatedSprite3D", "AnimationPlayer", "AnimationTree", "Area2D", "Area3D", "AspectRatioContainer", "AudioListener2D", "AudioListener3D", "AudioStreamPlayer", "AudioStreamPlayer2D", "AudioStreamPlayer3D", "BackBufferCopy", "BaseButton", "Bone2D", "BoneAttachment3D", "BoxContainer", "Button", "Camera2D", "Camera3D", "CanvasGroup", "CanvasItem", "CanvasLayer", "CanvasModulate", "CenterContainer", "CharacterBody2D", "CharacterBody3D", "CheckBox", "CheckButton", "CodeEdit", "CollisionObject2D", "CollisionObject3D", "CollisionPolygon2D", "CollisionPolygon3D", "CollisionShape2D", "CollisionShape3D", "ColorPicker", "ColorPickerButton", "ColorRect", "ConeTwistJoint3D", "ConfirmationDialog", "Container", "Control", "CPUParticles2D", "CPUParticles3D", "CSGBox3D", "CSGCombiner3D", "CSGCylinder3D", "CSGMesh3D", "CSGPolygon3D", "CSGPrimitive3D", "CSGShape3D", "CSGSphere3D", "CSGTorus3D", "DampedSpringJoint2D", "Decal", "DirectionalLight2D", "DirectionalLight3D", "EditorCommandPalette", "EditorFileDialog", "EditorFileSystem", "EditorInspector", "EditorInterface", "EditorPlugin", "EditorProperty", "EditorResourcePicker", "EditorResourcePreview", "EditorScriptPicker", "EditorSpinSlider", "FileDialog", "FileSystemDock", "FlowContainer", "FogVolume", "Generic6DOFJoint3D", "GeometryInstance3D", "GPUParticles2D", "GPUParticles3D", "GPUParticlesAttractor3D", "GPUParticlesAttractorBox3D", "GPUParticlesAttractorSphere3D", "GPUParticlesAttractorVectorField3D", "GPUParticlesCollision3D", "GPUParticlesCollisionBox3D", "GPUParticlesCollisionHeightField3D", "GPUParticlesCollisionSDF3D", "GPUParticlesCollisionSphere3D", "GraphEdit", "GraphNode", "GridContainer", "GridMap", "GrooveJoint2D", "HBoxContainer", "HFlowContainer", "HingeJoint3D", "HScrollBar", "HSeparator", "HSlider", "HSplitContainer", "HTTPRequest", "ImporterMeshInstance3D", "InstancePlaceholder", "ItemList", "Joint2D", "Joint3D", "Label", "Label3D", "Light2D", "Light3D", "LightmapGI", "LightmapProbe", "LightOccluder2D", "Line2D", "LineEdit", "LinkButton", "MarginContainer", "Marker2D", "Marker3D", "MenuBar", "MenuButton", "MeshInstance2D", "MeshInstance3D", "MissingNode", "MultiMeshInstance2D", "MultiMeshInstance3D", "MultiplayerSpawner", "MultiplayerSynchronizer", "NavigationAgent2D", "NavigationAgent3D", "NavigationLink2D", "NavigationLink3D", "NavigationObstacle2D", "NavigationObstacle3D", "NavigationRegion2D", "NavigationRegion3D", "NinePatchRect", "Node2D", "Node3D", "OccluderInstance3D", "OmniLight3D", "OpenXRHand", "OptionButton", "Panel", "PanelContainer", "ParallaxBackground", "ParallaxLayer", "Path2D", "Path3D", "PathFollow2D", "PathFollow3D", "PhysicalBone2D", "PhysicalBone3D", "PhysicsBody2D", "PhysicsBody3D", "PinJoint2D", "PinJoint3D", "PointLight2D", "Polygon2D", "Popup", "PopupMenu", "PopupPanel", "ProgressBar", "Range", "RayCast2D", "RayCast3D", "ReferenceRect", "ReflectionProbe", "RemoteTransform2D", "RemoteTransform3D", "ResourcePreloader", "RichTextLabel", "RigidBody2D", "RigidBody3D", "RootMotionView", "ScriptCreateDialog", "ScriptEditor", "ScriptEditorBase", "ScrollBar", "ScrollContainer", "Separator", "ShaderGlobalsOverride", "ShapeCast2D", "ShapeCast3D", "Skeleton2D", "Skeleton3D", "SkeletonIK3D", "Slider", "SliderJoint3D", "SoftBody3D", "SpinBox", "SplitContainer", "SpotLight3D", "SpringArm3D", "Sprite2D", "Sprite3D", "SpriteBase3D", "StaticBody2D", "StaticBody3D", "SubViewport", "SubViewportContainer", "TabBar", "TabContainer", "TextEdit", "TextureButton", "TextureProgressBar", "TextureRect", "TileMap", "Timer", "TouchScreenButton", "Tree", "VBoxContainer", "VehicleBody3D", "VehicleWheel3D", "VFlowContainer", "VideoStreamPlayer", "Viewport", "VisibleOnScreenEnabler2D", "VisibleOnScreenEnabler3D", "VisibleOnScreenNotifier2D", "VisibleOnScreenNotifier3D", "VisualInstance3D", "VoxelGI", "VScrollBar", "VSeparator", "VSlider", "VSplitContainer", "Window", "WorldEnvironment", "XRAnchor3D", "XRCamera3D", "XRController3D", "XRNode3D", "XROrigin3D", "Resource", "AnimatedTexture", "Animation", "AnimationLibrary", "AnimationNode", "AnimationNodeAdd2", "AnimationNodeAdd3", "AnimationNodeAnimation", "AnimationNodeBlend2", "AnimationNodeBlend3", "AnimationNodeBlendSpace1D", "AnimationNodeBlendSpace2D", "AnimationNodeBlendTree", "AnimationNodeOneShot", "AnimationNodeOutput", "AnimationNodeStateMachine", "AnimationNodeStateMachinePlayback", "AnimationNodeStateMachineTransition", "AnimationNodeSync", "AnimationNodeTimeScale", "AnimationNodeTimeSeek", "AnimationNodeTransition", "AnimationRootNode", "ArrayMesh", "ArrayOccluder3D", "AtlasTexture", "AudioBusLayout", "AudioEffect", "AudioEffectAmplify", "AudioEffectBandLimitFilter", "AudioEffectBandPassFilter", "AudioEffectCapture", "AudioEffectChorus", "AudioEffectCompressor", "AudioEffectDelay", "AudioEffectDistortion", "AudioEffectEQ", "AudioEffectEQ10", "AudioEffectEQ21", "AudioEffectEQ6", "AudioEffectFilter", "AudioEffectHighPassFilter", "AudioEffectHighShelfFilter", "AudioEffectLimiter", "AudioEffectLowPassFilter", "AudioEffectLowShelfFilter", "AudioEffectNotchFilter", "AudioEffectPanner", "AudioEffectPhaser", "AudioEffectPitchShift", "AudioEffectRecord", "AudioEffectReverb", "AudioEffectSpectrumAnalyzer", "AudioEffectStereoEnhance", "AudioStream", "AudioStreamGenerator", "AudioStreamMicrophone", "AudioStreamMP3", "AudioStreamOggVorbis", "AudioStreamPolyphonic", "AudioStreamRandomizer", "AudioStreamWAV", "BaseMaterial3D", "BitMap", "BoneMap", "BoxMesh", "BoxOccluder3D", "BoxShape3D", "ButtonGroup", "CameraAttributes", "CameraAttributesPhysical", "CameraAttributesPractical", "CameraTexture", "CanvasItemMaterial", "CanvasTexture", "CapsuleMesh", "CapsuleShape2D", "CapsuleShape3D", "CircleShape2D", "CodeHighlighter", "CompressedCubemap", "CompressedCubemapArray", "CompressedTexture2D", "CompressedTexture2DArray", "CompressedTexture3D", "CompressedTextureLayered", "ConcavePolygonShape2D", "ConcavePolygonShape3D", "ConvexPolygonShape2D", "ConvexPolygonShape3D", "CryptoKey", "CSharpScript", "Cubemap", "CubemapArray", "Curve", "Curve2D", "Curve3D", "CurveTexture", "CurveXYZTexture", "CylinderMesh", "CylinderShape3D", "EditorNode3DGizmoPlugin", "EditorSettings", "EditorSyntaxHighlighter", "Environment", "FastNoiseLite", "FogMaterial", "Font", "FontFile", "FontVariation", "GDExtension", "GDScript", "GLTFAccessor", "GLTFAnimation", "GLTFBufferView", "GLTFCamera", "GLTFDocument", "GLTFDocumentExtension", "GLTFDocumentExtensionConvertImporterMesh", "GLTFLight", "GLTFMesh", "GLTFNode", "GLTFSkeleton", "GLTFSkin", "GLTFSpecGloss", "GLTFState", "GLTFTexture", "GLTFTextureSampler", "Gradient", "GradientTexture1D", "GradientTexture2D", "HeightMapShape3D", "Image", "ImageTexture", "ImageTexture3D", "ImageTextureLayered", "ImmediateMesh", "ImporterMesh", "InputEvent", "InputEventAction", "InputEventFromWindow", "InputEventGesture", "InputEventJoypadButton", "InputEventJoypadMotion", "InputEventKey", "InputEventMagnifyGesture", "InputEventMIDI", "InputEventMouse", "InputEventMouseButton", "InputEventMouseMotion", "InputEventPanGesture", "InputEventScreenDrag", "InputEventScreenTouch", "InputEventShortcut", "InputEventWithModifiers", "JSON", "LabelSettings", "LightmapGIData", "Material", "Mesh", "MeshLibrary", "MeshTexture", "MissingResource", "MultiMesh", "NavigationMesh", "NavigationPolygon", "Noise", "NoiseTexture2D", "Occluder3D", "OccluderPolygon2D", "OggPacketSequence", "OpenXRAction", "OpenXRActionMap", "OpenXRActionSet", "OpenXRInteractionProfile", "OpenXRIPBinding", "OptimizedTranslation", "ORMMaterial3D", "PackedDataContainer", "PackedScene", "PanoramaSkyMaterial", "ParticleProcessMaterial", "PhysicalSkyMaterial", "PhysicsMaterial", "PlaceholderCubemap", "PlaceholderCubemapArray", "PlaceholderMaterial", "PlaceholderMesh", "PlaceholderTexture2D", "PlaceholderTexture2DArray", "PlaceholderTexture3D", "PlaceholderTextureLayered", "PlaneMesh", "PointMesh", "PolygonOccluder3D", "PolygonPathFinder", "PortableCompressedTexture2D", "PrimitiveMesh", "PrismMesh", "ProceduralSkyMaterial", "QuadMesh", "QuadOccluder3D", "RDShaderFile", "RDShaderSPIRV", "RectangleShape2D", "RibbonTrailMesh", "RichTextEffect", "SceneReplicationConfig", "Script", "ScriptExtension", "SegmentShape2D", "SeparationRayShape2D", "SeparationRayShape3D", "Shader", "ShaderInclude", "ShaderMaterial", "Shape2D", "Shape3D", "Shortcut", "SkeletonModification2D", "SkeletonModification2DCCDIK", "SkeletonModification2DFABRIK", "SkeletonModification2DJiggle", "SkeletonModification2DLookAt", "SkeletonModification2DPhysicalBones", "SkeletonModification2DStackHolder", "SkeletonModification2DTwoBoneIK", "SkeletonModificationStack2D", "SkeletonProfile", "SkeletonProfileHumanoid", "Skin", "Sky", "SphereMesh", "SphereOccluder3D", "SphereShape3D", "SpriteFrames", "StandardMaterial3D", "StyleBox", "StyleBoxEmpty", "StyleBoxFlat", "StyleBoxLine", "StyleBoxTexture", "SyntaxHighlighter", "SystemFont", "TextMesh", "Texture", "Texture2D", "Texture2DArray", "Texture3D", "TextureLayered", "Theme", "TileMapPattern", "TileSet", "TileSetAtlasSource", "TileSetScenesCollectionSource", "TileSetSource", "TorusMesh", "Translation", "TubeTrailMesh", "VideoStream", "VideoStreamPlayback", "VideoStreamTheora", "ViewportTexture", "VisualShader", "VisualShaderNode", "VisualShaderNodeBillboard", "VisualShaderNodeBooleanConstant", "VisualShaderNodeBooleanParameter", "VisualShaderNodeClamp", "VisualShaderNodeColorConstant", "VisualShaderNodeColorFunc", "VisualShaderNodeColorOp", "VisualShaderNodeColorParameter", "VisualShaderNodeComment", "VisualShaderNodeCompare", "VisualShaderNodeConstant", "VisualShaderNodeCubemap", "VisualShaderNodeCubemapParameter", "VisualShaderNodeCurveTexture", "VisualShaderNodeCurveXYZTexture", "VisualShaderNodeCustom", "VisualShaderNodeDerivativeFunc", "VisualShaderNodeDeterminant", "VisualShaderNodeDistanceFade", "VisualShaderNodeDotProduct", "VisualShaderNodeExpression", "VisualShaderNodeFaceForward", "VisualShaderNodeFloatConstant", "VisualShaderNodeFloatFunc", "VisualShaderNodeFloatOp", "VisualShaderNodeFloatParameter", "VisualShaderNodeFresnel", "VisualShaderNodeGlobalExpression", "VisualShaderNodeGroupBase", "VisualShaderNodeIf", "VisualShaderNodeInput", "VisualShaderNodeIntConstant", "VisualShaderNodeIntFunc", "VisualShaderNodeIntOp", "VisualShaderNodeIntParameter", "VisualShaderNodeIs", "VisualShaderNodeLinearSceneDepth", "VisualShaderNodeMix", "VisualShaderNodeMultiplyAdd", "VisualShaderNodeOuterProduct", "VisualShaderNodeOutput", "VisualShaderNodeParameter", "VisualShaderNodeParameterRef", "VisualShaderNodeParticleAccelerator", "VisualShaderNodeParticleBoxEmitter", "VisualShaderNodeParticleConeVelocity", "VisualShaderNodeParticleEmit", "VisualShaderNodeParticleEmitter", "VisualShaderNodeParticleMeshEmitter", "VisualShaderNodeParticleMultiplyByAxisAngle", "VisualShaderNodeParticleOutput", "VisualShaderNodeParticleRandomness", "VisualShaderNodeParticleRingEmitter", "VisualShaderNodeParticleSphereEmitter", "VisualShaderNodeProximityFade", "VisualShaderNodeRandomRange", "VisualShaderNodeRemap", "VisualShaderNodeResizableBase", "VisualShaderNodeSample3D", "VisualShaderNodeScreenUVToSDF", "VisualShaderNodeSDFRaymarch", "VisualShaderNodeSDFToScreenUV", "VisualShaderNodeSmoothStep", "VisualShaderNodeStep", "VisualShaderNodeSwitch", "VisualShaderNodeTexture", "VisualShaderNodeTexture2DArray", "VisualShaderNodeTexture2DArrayParameter", "VisualShaderNodeTexture2DParameter", "VisualShaderNodeTexture3D", "VisualShaderNodeTexture3DParameter", "VisualShaderNodeTextureParameter", "VisualShaderNodeTextureParameterTriplanar", "VisualShaderNodeTextureSDF", "VisualShaderNodeTextureSDFNormal", "VisualShaderNodeTransformCompose", "VisualShaderNodeTransformConstant", "VisualShaderNodeTransformDecompose", "VisualShaderNodeTransformFunc", "VisualShaderNodeTransformOp", "VisualShaderNodeTransformParameter", "VisualShaderNodeTransformVecMult", "VisualShaderNodeUIntConstant", "VisualShaderNodeUIntFunc", "VisualShaderNodeUIntOp", "VisualShaderNodeUIntParameter", "VisualShaderNodeUVFunc", "VisualShaderNodeUVPolarCoord", "VisualShaderNodeVarying", "VisualShaderNodeVaryingGetter", "VisualShaderNodeVaryingSetter", "VisualShaderNodeVec2Constant", "VisualShaderNodeVec2Parameter", "VisualShaderNodeVec3Constant", "VisualShaderNodeVec3Parameter", "VisualShaderNodeVec4Constant", "VisualShaderNodeVec4Parameter", "VisualShaderNodeVectorBase", "VisualShaderNodeVectorCompose", "VisualShaderNodeVectorDecompose", "VisualShaderNodeVectorDistance", "VisualShaderNodeVectorFunc", "VisualShaderNodeVectorLen", "VisualShaderNodeVectorOp", "VisualShaderNodeVectorRefract", "VoxelGIData", "World2D", "World3D", "WorldBoundaryShape2D", "WorldBoundaryShape3D", "X509Certificate", "Object", "AESContext", "AnimationTrackEditPlugin", "AStar2D", "AStar3D", "AStarGrid2D", "AudioEffectInstance", "AudioEffectSpectrumAnalyzerInstance", "AudioServer", "AudioStreamGeneratorPlayback", "AudioStreamPlayback", "AudioStreamPlaybackOggVorbis", "AudioStreamPlaybackPolyphonic", "AudioStreamPlaybackResampled", "CallbackTweener", "CameraFeed", "CameraServer", "CharFXTransform", "ClassDB", "ConfigFile", "Crypto", "DirAccess", "DisplayServer", "DTLSServer", "EditorDebuggerPlugin", "EditorDebuggerSession", "EditorExportPlatform", "EditorExportPlugin", "EditorFeatureProfile", "EditorFileSystemDirectory", "EditorFileSystemImportFormatSupportQuery", "EditorImportPlugin", "EditorInspectorPlugin", "EditorNode3DGizmo", "EditorPaths", "EditorResourceConversionPlugin", "EditorResourcePreviewGenerator", "EditorSceneFormatImporter", "EditorSceneFormatImporterBlend", "EditorSceneFormatImporterFBX", "EditorSceneFormatImporterGLTF", "EditorScenePostImport", "EditorScenePostImportPlugin", "EditorScript", "EditorSelection", "EditorTranslationParserPlugin", "EditorUndoRedoManager", "EditorVCSInterface", "EncodedObjectAsID", "ENetConnection", "ENetMultiplayerPeer", "ENetPacketPeer", "Engine", "EngineDebugger", "EngineProfiler", "Expression", "FileAccess", "GDExtensionManager", "Geometry2D", "Geometry3D", "GodotSharp", "HashingContext", "HMACContext", "HTTPClient", "ImageFormatLoader", "ImageFormatLoaderExtension", "Input", "InputMap", "IntervalTweener", "IP", "JavaClass", "JavaClassWrapper", "JavaScriptBridge", "JavaScriptObject", "JNISingleton", "JSONRPC", "KinematicCollision2D", "KinematicCollision3D", "Lightmapper", "LightmapperRD", "MainLoop", "Marshalls", "MeshDataTool", "MethodTweener", "MobileVRInterface", "MovieWriter", "MultiplayerAPI", "MultiplayerAPIExtension", "MultiplayerPeer", "MultiplayerPeerExtension", "Mutex", "NavigationMeshGenerator", "NavigationPathQueryParameters2D", "NavigationPathQueryParameters3D", "NavigationPathQueryResult2D", "NavigationPathQueryResult3D", "NavigationServer2D", "NavigationServer3D", "Node", "Node3DGizmo", "OfflineMultiplayerPeer", "OggPacketSequencePlayback", "OpenXRInterface", "OS", "PackedDataContainerRef", "PacketPeer", "PacketPeerDTLS", "PacketPeerExtension", "PacketPeerStream", "PacketPeerUDP", "PCKPacker", "Performance", "PhysicsDirectBodyState2D", "PhysicsDirectBodyState2DExtension", "PhysicsDirectBodyState3D", "PhysicsDirectBodyState3DExtension", "PhysicsDirectSpaceState2D", "PhysicsDirectSpaceState2DExtension", "PhysicsDirectSpaceState3D", "PhysicsDirectSpaceState3DExtension", "PhysicsPointQueryParameters2D", "PhysicsPointQueryParameters3D", "PhysicsRayQueryParameters2D", "PhysicsRayQueryParameters3D", "PhysicsServer2D", "PhysicsServer2DExtension", "PhysicsServer2DManager", "PhysicsServer3D", "PhysicsServer3DExtension", "PhysicsServer3DManager", "PhysicsServer3DRenderingServerHandler", "PhysicsShapeQueryParameters2D", "PhysicsShapeQueryParameters3D", "PhysicsTestMotionParameters2D", "PhysicsTestMotionParameters3D", "PhysicsTestMotionResult2D", "PhysicsTestMotionResult3D", "ProjectSettings", "PropertyTweener", "RandomNumberGenerator", "RDAttachmentFormat", "RDFramebufferPass", "RDPipelineColorBlendState", "RDPipelineColorBlendStateAttachment", "RDPipelineDepthStencilState", "RDPipelineMultisampleState", "RDPipelineRasterizationState", "RDPipelineSpecializationConstant", "RDSamplerState", "RDShaderSource", "RDTextureFormat", "RDTextureView", "RDUniform", "RDVertexAttribute", "RefCounted", "RegEx", "RegExMatch", "RenderingDevice", "RenderingServer", "Resource", "ResourceFormatLoader", "ResourceFormatSaver", "ResourceImporter", "ResourceLoader", "ResourceSaver", "ResourceUID", "SceneMultiplayer", "SceneState", "SceneTree", "SceneTreeTimer", "ScriptLanguage", "ScriptLanguageExtension", "Semaphore", "SkinReference", "StreamPeer", "StreamPeerBuffer", "StreamPeerExtension", "StreamPeerGZIP", "StreamPeerTCP", "StreamPeerTLS", "SurfaceTool", "TCPServer", "TextLine", "TextParagraph", "TextServer", "TextServerAdvanced", "TextServerDummy", "TextServerExtension", "TextServerFallback", "TextServerManager", "ThemeDB", "Thread", "TileData", "Time", "TLSOptions", "TranslationServer", "TreeItem", "TriangleMesh", "Tween", "Tweener", "UDPServer", "UndoRedo", "UPNP", "UPNPDevice", "WeakRef", "WebRTCDataChannel", "WebRTCDataChannelExtension", "WebRTCMultiplayerPeer", "WebRTCPeerConnection", "WebRTCPeerConnectionExtension", "WebSocketMultiplayerPeer", "WebSocketPeer", "WebXRInterface", "WorkerThreadPool", "XMLParser", "XRInterface", "XRInterfaceExtension", "XRPose", "XRPositionalTracker", "XRServer", "ZIPPacker", "ZIPReader", "AABB", "Array", "Basis", "bool", "Callable", "Color", "Dictionary", "float", "int", "NodePath", "Object", "PackedByteArray", "PackedColorArray", "PackedFloat32Array", "PackedFloat64Array", "PackedInt32Array", "PackedInt64Array", "PackedStringArray", "PackedVector2Array", "PackedVector3Array", "Plane", "Projection", "Quaternion", "Rect2", "Rect2i", "RID", "Signal", "String", "StringName", "Transform2D", "Transform3D", "Variant", "Vector2", "Vector2i", "Vector3", "Vector3i", "Vector4", "Vector4i" ] # Example usage find_circular_dependencies("C:\\Workspace\\TL2\\gd_client\\scripts")