You've already forked com.unity.ide.cursor
mirror of
https://github.com/boxqkrtm/com.unity.ide.cursor.git
synced 2026-05-14 22:30:10 +00:00
## [2.0.0] - 2019-11-06 - Improved Visual Studio and Visual Studio for Mac automatic discovery - Added support for the VSTU messaging system (start/stop features from Visual Studio) - Added support for solution roundtrip (preserves references to external projects and solution properties) - Added support for VSTU Analyzers (requires Visual Studio 2019 16.3, Visual Studio for Mac 8.3) - Added a warning when using legacy pdb symbol files. - Fixed issues while Opening Visual Studio on Windows - Fixed issues while Opening Visual Studio on Mac ## [1.1.1] - 2019-05-29 Fix Bridge assembly loading with non VS2017 editors ## [1.1.0] - 2019-05-27 Move internal extension handling to package.
93 lines
2.6 KiB
C#
93 lines
2.6 KiB
C#
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Unity Technologies.
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
using System;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
namespace Microsoft.Unity.VisualStudio.Editor
|
|
{
|
|
internal static class FileUtility
|
|
{
|
|
public const char WinSeparator = '\\';
|
|
public const char UnixSeparator = '/';
|
|
|
|
// Safe for packages as we use packageInfo.resolvedPath, so this should work in library package cache as well
|
|
public static string[] FindPackageAssetFullPath(string assetfilter, string filefilter)
|
|
{
|
|
return AssetDatabase.FindAssets(assetfilter)
|
|
.Select(AssetDatabase.GUIDToAssetPath)
|
|
.Where(assetPath => assetPath.Contains(filefilter))
|
|
.Select(asset =>
|
|
{
|
|
var packageInfo = UnityEditor.PackageManager.PackageInfo.FindForAssetPath(asset);
|
|
return Normalize(packageInfo.resolvedPath + asset.Substring(packageInfo.assetPath.Length));
|
|
})
|
|
.ToArray();
|
|
}
|
|
|
|
public static string GetAssetFullPath(string asset)
|
|
{
|
|
var basePath = Path.GetFullPath(Path.Combine(Application.dataPath, ".."));
|
|
return Path.GetFullPath(Path.Combine(basePath, Normalize(asset)));
|
|
}
|
|
|
|
public static string Normalize(string path)
|
|
{
|
|
if (string.IsNullOrEmpty(path))
|
|
return path;
|
|
|
|
if (Path.DirectorySeparatorChar == WinSeparator)
|
|
path = path.Replace(UnixSeparator, WinSeparator);
|
|
|
|
return path.Replace(string.Concat(WinSeparator, WinSeparator), WinSeparator.ToString());
|
|
}
|
|
|
|
internal static bool IsFileInProjectDirectory(string fileName)
|
|
{
|
|
var basePath = Path.GetFullPath(Path.Combine(Application.dataPath, ".."));
|
|
fileName = Normalize(fileName);
|
|
|
|
if (!Path.IsPathRooted(fileName))
|
|
fileName = Path.Combine(basePath, fileName);
|
|
|
|
return string.Equals(Path.GetDirectoryName(fileName), basePath, StringComparison.OrdinalIgnoreCase);
|
|
}
|
|
|
|
public static string FileNameWithoutExtension(string path)
|
|
{
|
|
if (string.IsNullOrEmpty(path))
|
|
{
|
|
return "";
|
|
}
|
|
|
|
var indexOfDot = -1;
|
|
var indexOfSlash = 0;
|
|
for (var i = path.Length - 1; i >= 0; i--)
|
|
{
|
|
if (indexOfDot == -1 && path[i] == '.')
|
|
{
|
|
indexOfDot = i;
|
|
}
|
|
|
|
if (indexOfSlash == 0 && path[i] == '/' || path[i] == '\\')
|
|
{
|
|
indexOfSlash = i + 1;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (indexOfDot == -1)
|
|
{
|
|
indexOfDot = path.Length - 1;
|
|
}
|
|
|
|
return path.Substring(indexOfSlash, indexOfDot - indexOfSlash);
|
|
}
|
|
}
|
|
}
|