diff --git a/src/tsconfig.strictNullChecks.json b/src/tsconfig.strictNullChecks.json index 7a8cbd429dc..41a010ea970 100644 --- a/src/tsconfig.strictNullChecks.json +++ b/src/tsconfig.strictNullChecks.json @@ -64,6 +64,7 @@ "./vs/base/common/json.ts", "./vs/base/common/jsonEdit.ts", "./vs/base/common/jsonFormatter.ts", + "./vs/base/common/paths.ts", "./vs/base/common/uriIpc.ts", "./vs/base/node/console.ts", "./vs/base/node/crypto.ts", @@ -73,6 +74,7 @@ "./vs/base/node/flow.ts", "./vs/base/node/id.ts", "./vs/base/node/paths.ts", + "./vs/base/node/paths.ts", "./vs/base/node/pfs.ts", "./vs/base/node/ports.ts", "./vs/base/node/processes.ts", @@ -97,6 +99,7 @@ "./vs/base/test/common/json.test.ts", "./vs/base/test/common/jsonEdit.test.ts", "./vs/base/test/common/jsonFormatter.test.ts", + "./vs/base/test/common/paths.test.ts", "./vs/base/test/common/utils.ts", "./vs/base/test/node/processes/fixtures/fork_large.ts", "./vs/base/test/node/processes/fixtures/fork.ts", @@ -115,6 +118,7 @@ "./vs/code/electron-main/keyboard.ts", "./vs/code/electron-main/sharedProcess.ts", "./vs/code/electron-main/theme.ts", + "./vs/code/node/paths.ts", "./vs/code/node/shellEnv.ts", "./vs/code/node/wait.ts", "./vs/code/node/windowsFinder.ts", diff --git a/src/vs/base/common/paths.ts b/src/vs/base/common/paths.ts index b2b255b0f1b..1255aed38cf 100644 --- a/src/vs/base/common/paths.ts +++ b/src/vs/base/common/paths.ts @@ -72,7 +72,10 @@ function _isNormal(path: string, win: boolean): boolean { : !_posixBadPath.test(path); } -export function normalize(path: string, toOSPath?: boolean): string { +export function normalize(path: undefined, toOSPath?: boolean): undefined; +export function normalize(path: null, toOSPath?: boolean): null; +export function normalize(path: string, toOSPath?: boolean): string; +export function normalize(path: string | null | undefined, toOSPath?: boolean): string | null | undefined { if (path === null || path === void 0) { return path; @@ -288,7 +291,7 @@ export function isUNC(path: string): boolean { // Reference: https://en.wikipedia.org/wiki/Filename const INVALID_FILE_CHARS = isWindows ? /[\\/:\*\?"<>\|]/g : /[\\/]/g; const WINDOWS_FORBIDDEN_NAMES = /^(con|prn|aux|clock\$|nul|lpt[0-9]|com[0-9])$/i; -export function isValidBasename(name: string): boolean { +export function isValidBasename(name: string | null | undefined): boolean { if (!name || name.length === 0 || /^\s+$/.test(name)) { return false; // require a name that is not just whitespace } diff --git a/src/vs/base/common/strings.ts b/src/vs/base/common/strings.ts index 7c6a9820fbe..f9f44b040db 100644 --- a/src/vs/base/common/strings.ts +++ b/src/vs/base/common/strings.ts @@ -78,7 +78,7 @@ export function escapeRegExpCharacters(value: string): string { * @param haystack string to trim * @param needle the thing to trim (default is a blank) */ -export function trim(haystack: string, needle: string = ' '): string | undefined { +export function trim(haystack: string, needle: string = ' '): string { let trimmed = ltrim(haystack, needle); return rtrim(trimmed, needle); } diff --git a/src/vs/code/node/paths.ts b/src/vs/code/node/paths.ts index 5774c6b6265..f322145cbac 100644 --- a/src/vs/code/node/paths.ts +++ b/src/vs/code/node/paths.ts @@ -35,7 +35,7 @@ function doValidatePaths(args: string[], gotoLineMode?: boolean): string[] { const result = args.map(arg => { let pathCandidate = String(arg); - let parsedPath: IPathWithLineAndColumn; + let parsedPath: IPathWithLineAndColumn | undefined = undefined; if (gotoLineMode) { parsedPath = parseLineAndColumnAware(pathCandidate); pathCandidate = parsedPath.path; @@ -52,7 +52,7 @@ function doValidatePaths(args: string[], gotoLineMode?: boolean): string[] { return null; // do not allow invalid file names } - if (gotoLineMode) { + if (gotoLineMode && parsedPath) { parsedPath.path = sanitizedFilePath; return toPath(parsedPath); @@ -62,7 +62,7 @@ function doValidatePaths(args: string[], gotoLineMode?: boolean): string[] { }); const caseInsensitive = platform.isWindows || platform.isMacintosh; - const distinct = arrays.distinct(result, e => e && caseInsensitive ? e.toLowerCase() : e); + const distinct = arrays.distinct(result, e => e && caseInsensitive ? e.toLowerCase() : (e || '')); return arrays.coalesce(distinct); } @@ -98,7 +98,7 @@ export interface IPathWithLineAndColumn { export function parseLineAndColumnAware(rawPath: string): IPathWithLineAndColumn { const segments = rawPath.split(':'); // C:\file.txt:: - let path: string; + let path: string | null = null; let line: number | null = null; let column: number | null = null;