提交 bc9064f1 编写于 作者: B Benjamin Pasero

slightly better workspace saving format

上级 86fb1a39
......@@ -28,7 +28,7 @@ export interface IUserHomeProvider {
userHome: string;
}
export function getPathLabel(resource: URI | string, rootProvider?: IRootProvider, userHomeProvider?: IUserHomeProvider, toOSPath = true): string {
export function getPathLabel(resource: URI | string, rootProvider?: IRootProvider, userHomeProvider?: IUserHomeProvider): string {
if (!resource) {
return null;
}
......@@ -46,7 +46,7 @@ export function getPathLabel(resource: URI | string, rootProvider?: IRootProvide
if (isEqual(baseResource.fsPath, resource.fsPath, !platform.isLinux /* ignorecase */)) {
pathLabel = ''; // no label if pathes are identical
} else {
pathLabel = normalize(ltrim(resource.fsPath.substr(baseResource.fsPath.length), nativeSep), toOSPath);
pathLabel = normalize(ltrim(resource.fsPath.substr(baseResource.fsPath.length), nativeSep), true);
}
if (hasMultipleRoots) {
......@@ -58,12 +58,12 @@ export function getPathLabel(resource: URI | string, rootProvider?: IRootProvide
}
// convert c:\something => C:\something
if (platform.isWindows && resource.fsPath && resource.fsPath[1] === ':') {
return normalize(resource.fsPath.charAt(0).toUpperCase() + resource.fsPath.slice(1), toOSPath);
if (hasDriveLetter(resource.fsPath)) {
return normalize(normalizeDriveLetter(resource.fsPath), true);
}
// normalize and tildify (macOS, Linux only)
let res = normalize(resource.fsPath, toOSPath);
let res = normalize(resource.fsPath, true);
if (!platform.isWindows && userHomeProvider) {
res = tildify(res, userHomeProvider.userHome);
}
......@@ -71,6 +71,18 @@ export function getPathLabel(resource: URI | string, rootProvider?: IRootProvide
return res;
}
function hasDriveLetter(path: string): boolean {
return platform.isWindows && path && path[1] === ':';
}
export function normalizeDriveLetter(path: string): string {
if (hasDriveLetter(path)) {
return path.charAt(0).toUpperCase() + path.slice(1);
}
return path;
}
export function tildify(path: string, userHome: string): string {
if (path && (platform.isMacintosh || platform.isLinux) && isEqualOrParent(path, userHome, !platform.isLinux /* ignorecase */)) {
path = `~${path.substr(userHome.length)}`;
......
......@@ -16,13 +16,13 @@ import { isLinux, isMacintosh, isWindows } from 'vs/base/common/platform';
import { delSync, readdirSync } from 'vs/base/node/extfs';
import Event, { Emitter } from 'vs/base/common/event';
import { ILogService } from 'vs/platform/log/common/log';
import { isEqual, isEqualOrParent } from 'vs/base/common/paths';
import { isEqual, isEqualOrParent, normalize } from 'vs/base/common/paths';
import { coalesce } from 'vs/base/common/arrays';
import { createHash } from 'crypto';
import * as json from 'vs/base/common/json';
import * as jsonEdit from 'vs/base/common/jsonEdit';
import { applyEdit } from 'vs/base/common/jsonFormatter';
import { getPathLabel } from 'vs/base/common/labels';
import { normalizeDriveLetter } from 'vs/base/common/labels';
const SLASH = '/';
......@@ -227,7 +227,11 @@ export class WorkspacesMainService implements IWorkspacesMainService {
// - convert to slashes if we want to use slashes for paths
if (isWindows) {
if (isAbsolute(folder.path)) {
folder.path = getPathLabel(folder.path, void 0, void 0, !useSlashesForPath /* toOSPath */);
if (useSlashesForPath) {
folder.path = normalize(folder.path, false /* do not use OS path separator */);
}
folder.path = normalizeDriveLetter(folder.path);
} else if (useSlashesForPath) {
folder.path = folder.path.replace(/[\\]/g, SLASH);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册