From 874fb60bc67b5a751b8ba4960dfd1e91e0aaff34 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Tue, 31 May 2016 09:38:05 +0200 Subject: [PATCH] path#join is concat and a normalize --- src/vs/base/common/paths.ts | 53 +++++++++++++------------------------ 1 file changed, 19 insertions(+), 34 deletions(-) diff --git a/src/vs/base/common/paths.ts b/src/vs/base/common/paths.ts index 8b352d2a84e..57757422e74 100644 --- a/src/vs/base/common/paths.ts +++ b/src/vs/base/common/paths.ts @@ -209,44 +209,29 @@ export function getRoot(path: string, sep: string = '/'): string { return ''; } -export function join(...parts: string[]): string { - - var rootLen = getRoot(parts[0]).length, - root: string; - - // simply preserve things like c:/, //localhost/, file:///, http://, etc - root = parts[0].substr(0, rootLen); - parts[0] = parts[0].substr(rootLen); - - var allParts: string[] = [], - endsWithSep = /[\\\/]$/.test(parts[parts.length - 1]); - - for (var i = 0; i < parts.length; i++) { - allParts.push.apply(allParts, parts[i].split(/\/|\\/)); - } - - for (var i = 0; i < allParts.length; i++) { - var part = allParts[i]; - if (part === '.' || part.length === 0) { - allParts.splice(i, 1); - i -= 1; - } else if (part === '..' && !!allParts[i - 1] && allParts[i - 1] !== '..') { - allParts.splice(i - 1, 2); - i -= 2; +export const join: (...parts: string[]) => string = function () { + + let value = ''; + for (let i = 0; i < arguments.length; i++) { + let part = arguments[i]; + if (i > 0) { + // add the separater between two parts unless + // there already is one + let last = value.charCodeAt(value.length - 1); + if (last !== _slash && last !== _backslash) { + let next = part.charCodeAt(0); + if (next !== _slash && next !== _backslash) { + + value += sep; + } + } } + value += part; } - if (endsWithSep) { - allParts.push(''); - } - - var ret = allParts.join('/'); - if (root) { - ret = root.replace(/\/|\\/g, '/') + ret; - } + return normalize(value); +}; - return ret; -} export function isUNC(path: string): boolean { if (!isWindows || !path) { -- GitLab