Merge pull request #2 from naninunenoy/AsmdefHelper

AsmdefMultiEditと統合
This commit is contained in:
Nakano Yosuke 2020-04-15 23:49:23 +09:00 committed by GitHub
commit c531785636
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
62 changed files with 426 additions and 32 deletions

42
.editorconfig Normal file
View File

@ -0,0 +1,42 @@
# This file is the top-most EditorConfig file
root = true
# All Files
[*]
indent_style = space
indent_size = 4
end_of_line = lf
charset = utf-8
insert_final_newline = true
trim_trailing_whitespace = true
# CSharp formatting settings:
[*.cs]
csharp_new_line_before_open_brace = none
csharp_new_line_before_else = false
csharp_new_line_before_catch = false
csharp_new_line_before_finally = false
csharp_new_line_before_members_in_object_initializers = false
csharp_new_line_before_members_in_anonymous_types = false
csharp_new_line_between_query_expression_clauses = false
csharp_indent_case_contents = true
csharp_indent_switch_labels = false
csharp_indent_labels = no_change
csharp_space_after_cast = false
csharp_space_after_keywords_in_control_flow_statements = true
csharp_space_between_method_declaration_parameter_list_parentheses = false
csharp_space_between_method_call_parameter_list_parentheses = false
csharp_space_between_parentheses = false
csharp_space_before_colon_in_inheritance_clause = true
csharp_space_after_colon_in_inheritance_clause = true
csharp_space_around_binary_operators = before_and_after
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
csharp_space_between_method_call_name_and_opening_parenthesis = false
csharp_space_between_method_call_empty_parameter_list_parentheses = false
csharp_space_after_comma = true
csharp_space_after_dot = false
csharp_preserve_single_line_statements = true
csharp_preserve_single_line_blocks = true

1
.gitignore vendored
View File

@ -17,6 +17,7 @@
# /[Aa]ssets/AssetStoreTools*
# Autogenerated Jetbrains Rider plugin
.idea/
[Aa]ssets/Plugins/Editor/JetBrains*
# Visual Studio cache directory

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: b97a05875e33e924fa32dff70bc0cff7
guid: 9be64d16812f0684c98bc813d0fab6fd
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -1,6 +1,6 @@
using System.Collections.Generic;
namespace AsmdefGraph.Editor {
namespace AsmdefHelper.DependencyGraph.Editor {
public class AsmdefDependency {
public string DependsFrom { get; }
public IEnumerable<string> DependsTo { get; }

View File

@ -3,11 +3,11 @@ using System.Linq;
using UnityEditor;
using UnityEditor.Compilation;
namespace AsmdefGraph.Editor {
namespace AsmdefHelper.DependencyGraph.Editor {
public class AsmdefGraphEditorWindow : EditorWindow {
[MenuItem("Window/Open Asmdef Graph Window")]
[MenuItem("Window/Asmdef Helper/Open DependencyGraph", priority = 2000)]
public static void Open() {
GetWindow<AsmdefGraphEditorWindow>("AsmdefGraphWindow");
GetWindow<AsmdefGraphEditorWindow>("Asmdef Dependency");
}
void OnEnable() {

View File

@ -1,9 +1,8 @@
using System.Collections.Generic;
using System.Linq;
using UnityEditor.Experimental.GraphView;
using UnityEngine.UIElements;
namespace AsmdefGraph.Editor {
namespace AsmdefHelper.DependencyGraph.Editor {
public class AsmdefGraphView : GraphView {
public AsmdefGraphView(IEnumerable<AsmdefDependency> asmdefs) : base() {
// zoom可能に

View File

@ -1,5 +1,5 @@
{
"name": "AsmdefGraph.Editor",
"name": "AsmdefHelper.DependencyGraph.Editor",
"references": [],
"includePlatforms": [
"Editor"

View File

@ -1,6 +1,6 @@
using UnityEditor.Experimental.GraphView;
namespace AsmdefGraph.Editor {
namespace AsmdefHelper.DependencyGraph.Editor {
public class AsmdefNode : Node {
public readonly Port LeftPort;
public readonly Port RightPort;

View File

@ -1,8 +1,6 @@
{
"name": "AsmdefGraph.Example",
"references": [
"GUID:2bafac87e7f4b9b418d9448d219b01ab"
],
"name": "AsmdefHelper.Example",
"references": [],
"includePlatforms": [],
"excludePlatforms": [],
"allowUnsafeCode": false,

View File

@ -1,5 +1,5 @@
{
"name": "AsmdefGraph.Example.Fuga",
"name": "AsmdefHelper.Example.Fuga",
"references": [
"GUID:4326ab8b7972b7c4abe4e28df1a1c005",
"GUID:119b4cf3f63d4c84d920ceae3917f02c"

View File

@ -2,7 +2,7 @@
using System.Collections.Generic;
using UnityEngine;
namespace AsmdefGraph.Example.Fuga {
namespace AsmdefHelper.Example.Fuga {
public class NewBehaviourScript : MonoBehaviour {
// Start is called before the first frame update
void Start() {

View File

@ -1,5 +1,5 @@
{
"name": "AsmdefGraph.Example.Hoge",
"name": "AsmdefHelper.Example.Hoge",
"references": [
"GUID:4326ab8b7972b7c4abe4e28df1a1c005"
],

View File

@ -2,7 +2,7 @@
using System.Collections.Generic;
using UnityEngine;
namespace AsmdefGraph.Example.Hoge {
namespace AsmdefHelper.Example.Hoge {
public class NewBehaviourScript : MonoBehaviour {
// Start is called before the first frame update
void Start() {

View File

@ -2,7 +2,7 @@
using System.Collections.Generic;
using UnityEngine;
namespace AsmdefGraph.Example {
namespace AsmdefHelper.Example {
public class NewBehaviourScript : MonoBehaviour {
// Start is called before the first frame update
void Start() {

View File

@ -1,5 +1,5 @@
{
"name": "AsmdefGraph.Example.Piyo",
"name": "AsmdefHelper.Example.Piyo",
"references": [
"GUID:4326ab8b7972b7c4abe4e28df1a1c005",
"GUID:119b4cf3f63d4c84d920ceae3917f02c",

View File

@ -2,7 +2,7 @@
using System.Collections.Generic;
using UnityEngine;
namespace AsmdefGraph.Example.Piyo {
namespace AsmdefHelper.Example.Piyo {
public class NewBehaviourScript : MonoBehaviour {
// Start is called before the first frame update
void Start() {

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 44786ea3be4b7284ea613b1e7aafc4ad
guid: a9325e20a8831bf43b94e22a406c4e67
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 9a6f1c1bda271a541b230a51a05a677c
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,17 @@
{
"name": "AsmdefHelper.MultipleEdit.Editor",
"references": [
"GUID:211243abc45174c45b3a6c275ea126b9"
],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: ddba71eed1843ba40a83179bf71e2848
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,55 @@
using System.Collections.Generic;
using System.Linq;
using AsmdefHelper.UnityInternal;
using UnityEditor;
using UnityEditorInternal;
using UnityEngine;
namespace AsmdefHelper.MultipleEdit.Editor {
public class AsmdefMultiEditWindow : EditorWindow {
static IList<InspectorWindowWrapper> windows = new List<InspectorWindowWrapper>();
[MenuItem("Window/Asmdef Helper/Find all asmdef in project")]
public static void Search() {
var browser = CreateInstance<ProjectBrowserWrapper>();
browser.GetProjectBrowser();
browser.SetSearch("t:AssemblyDefinitionAsset");
}
[MenuItem("Window/Asmdef Helper/Open selected asmdef inspector view")]
[MenuItem("Assets/Asmdef Helper/Open selected asmdef inspector view")]
public static void Open() {
var asmdefs = Selection.GetFiltered(typeof(AssemblyDefinitionAsset), SelectionMode.TopLevel);
if (!asmdefs.Any()) {
Debug.Log("no AssemblyDefinitionAsset");
return;
}
CloseWindows();
foreach (var adf in asmdefs) {
Selection.objects = new[] { adf };
var w = CreateInstance<InspectorWindowWrapper>();
w.GetInspectorWindow();
// LockすることでInspectorWindowの表示を固定する
w.Lock(true);
windows.Add(w);
}
}
[MenuItem("Window/Asmdef Helper/Apply all asmdef and close")]
public static void Apply() {
foreach (var w in windows) {
w.AllApply();
w.CloseInspectorWindow();
}
windows.Clear();
}
static void CloseWindows() {
foreach (var w in windows) {
w.CloseInspectorWindow();
}
windows.Clear();
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 06fa8aa0de8ea5442b6454c3a8edfdc6
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 3343c43624a31f447a1961156a2cac6e
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 07e92c78d576a8a458ce4a298eeb512d
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,17 @@
{
"name": "AsmdefHelper.SyncSolution.Editor",
"references": [
"GUID:211243abc45174c45b3a6c275ea126b9"
],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: dcfd308825181f346bc76cac8ae79330
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,57 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
using UnityEditor;
using UnityEngine;
using AsmdefHelper.UnityInternal;
// https://forum.unity.com/threads/solved-unity-not-generating-sln-file-from-assets-open-c-project.538487/
// Thank you Flexford!
namespace AsmdefHelper.SyncSolution.Editor {
public static class SyncSolutionUtilities {
[MenuItem("Window/Asmdef Helper/Sync C# Solution", priority = 3000)]
public static void Sync() {
Sync(true);
}
static void Sync(bool logsEnabled) {
CleanOldFiles(logsEnabled);
Call_SyncSolution(logsEnabled);
Call_SynchronizerSync(logsEnabled);
}
static void CleanOldFiles(bool logsEnabled) {
var assetsDirectoryInfo = new DirectoryInfo(Application.dataPath);
var projectDirectoryInfo = assetsDirectoryInfo.Parent;
var files = GetFilesByExtensions(projectDirectoryInfo, "*.sln", "*.csproj");
foreach (var file in files) {
if (logsEnabled) {
Debug.Log($"Remove old solution file: {file.Name}");
}
file.Delete();
}
}
static void Call_SyncSolution(bool logsEnabled) {
if (logsEnabled) {
Debug.Log($"Coll method: SyncVS.Sync()");
}
SolutionSynchronizerWrapper.SyncSolution();
}
static void Call_SynchronizerSync(bool logsEnabled) {
if (logsEnabled) {
Debug.Log($"Coll method: SyncVS.Synchronizer.Sync()");
}
SolutionSynchronizerWrapper.SynchronizerSync();
}
static IEnumerable<FileInfo> GetFilesByExtensions(DirectoryInfo dir, params string[] extensions) {
extensions = extensions ?? new[] { "*" };
var files = Enumerable.Empty<FileInfo>();
return extensions.Aggregate(files, (current, ext) => current.Concat(dir.GetFiles(ext)));
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: e5785f4c5d9ed634799d54e96aabf408
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 0fce674912e7f8e4994f6f9d4e457d36
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,34 @@
using UnityEditor;
using UnityEditor.Experimental.AssetImporters;
namespace AsmdefHelper.UnityInternal {
public class InspectorWindowWrapper : EditorWindow{
InspectorWindow inspectorWindow;
public void GetInspectorWindow() {
inspectorWindow = CreateWindow<InspectorWindow>();
}
public void Lock(bool isLock) {
if (inspectorWindow != null) {
inspectorWindow.isLocked = isLock;
}
}
public void AllApply() {
foreach (var editor in inspectorWindow.tracker.activeEditors) {
var assetImporterEditor = editor as AssetImporterEditor;
if (assetImporterEditor != null && assetImporterEditor.HasModified()) {
assetImporterEditor.ApplyAndImport();
}
}
}
public void CloseInspectorWindow() {
if (inspectorWindow != null) {
inspectorWindow.Close();
}
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: ab307b553b134091996ec036836c42b8
timeCreated: 1586954046

View File

@ -0,0 +1,17 @@
using UnityEditor;
namespace AsmdefHelper.UnityInternal {
public class ProjectBrowserWrapper : EditorWindow {
ProjectBrowser projectBrowser;
public void GetProjectBrowser() {
projectBrowser = GetWindow<ProjectBrowser>();
}
public void SetSearch(string searchText) {
if (projectBrowser != null) {
projectBrowser.SetSearch(searchText);
}
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 78b9d6d4797040088ab730c9be37c6b9
timeCreated: 1586952941

View File

@ -0,0 +1,22 @@
using UnityEditor;
using UnityEditor.VisualStudioIntegration;
namespace AsmdefHelper.UnityInternal {
public static class SolutionSynchronizerWrapper {
static readonly SolutionSynchronizer synchronizer;
static SolutionSynchronizerWrapper() {
synchronizer = SyncVS.Synchronizer;
}
public static void SyncSolution() {
SyncVS.SyncSolution();
}
public static void SynchronizerSync() {
synchronizer?.Sync();
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: aeb995b6396143f58028eb4aa639c7c4
timeCreated: 1586952223

View File

@ -0,0 +1,15 @@
{
"name": "Unity.InternalAPIEditorBridgeDev.001",
"references": [],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 211243abc45174c45b3a6c275ea126b9
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,6 +1,6 @@
MIT License
Copyright (c) 2019 Nakano Yosuke
Copyright (c) 2020 Nakano Yosuke
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@ -1,5 +1,7 @@
{
"dependencies": {
"com.unity.ide.rider": "1.1.4",
"com.unity.test-framework": "1.1.13",
"com.unity.modules.ai": "1.0.0",
"com.unity.modules.androidjni": "1.0.0",
"com.unity.modules.animation": "1.0.0",

View File

@ -1,2 +1,2 @@
m_EditorVersion: 2019.3.0f1
m_EditorVersionWithRevision: 2019.3.0f1 (ffacea4b84e7)
m_EditorVersion: 2019.3.4f1
m_EditorVersionWithRevision: 2019.3.4f1 (4f139db2fdbd)

View File

@ -1,19 +1,53 @@
# AsmdefGraph
unity assembly definition viewer
# Asmdef Helper
## How to use
<img src="https://user-images.githubusercontent.com/15327448/79349410-24950780-7f71-11ea-94be-056726828ec4.png" width="140" />
[Window] > [Open Asemdef Graph Window]
Unity assembly definition utilities.
<img src="https://github.com/naninunenoy/AsmdefGraph/blob/doc/doc/howto_open.png?raw=true" width="450" />
This library solve inconvenience of assembly definition on unity.
## Dependency Graph
Unity assembly definition viewer.
[Window] > [Asmdef Helper] > [Open DependencyGraph]
Show assembly definition referances in your project like this.
<img src="https://github.com/naninunenoy/AsmdefGraph/blob/doc/doc/asmdefGraph.png?raw=true" width="600" />
<img src="https://user-images.githubusercontent.com/15327448/79340184-e8f44080-7f64-11ea-87f9-3ec90f9c5fa5.png" width="450" />
You need to organize the nodes by yourself.
## Multiple Edit
Open multiple assembly definition inspector views for parallel editing.
1. [Window] > [Asmdef Helper] > [Find all asmdef in project]
2. All asmdef will appear in project browser.
3. Pick up asmdef to edit.
4. [Window] > [Asmdef Helper] > [Open selected asmdef inspector view]
5. Open asmdef inspector views and edit asmdef.
<img src="https://user-images.githubusercontent.com/15327448/79342775-813ff480-7f68-11ea-851d-3e93b5948c0b.gif" width="450" />
## Sync Solution
Refresh .sln/.csproj in your project.
[Window] > [Asmdef Helper] > [Sync C# Solution]
I referred to this: [[SOLVED] Unity not generating .sln file from Assets > Open C# Project
](https://forum.unity.com/threads/solved-unity-not-generating-sln-file-from-assets-open-c-project.538487/)
___
## Environment
Unity 2019.3.4f1
This library use unity internal class, so may be not work (or couse build error) depending your unity vresion.
I referred to this: [【Unity, C#】internalな型やメンバにアクセスするには、多分これが一番早いと思います](https://qiita.com/mob-sakai/items/f3bbc0c45abc31ea7ac0)
## License
MIT