diff --git a/src/vs/base/node/encoding.ts b/src/vs/base/node/encoding.ts index d6995d6204042986cf488caf29be98a93e054121..f6b9ae6d7c53ed70771a4fa54053c15090b8cd31 100644 --- a/src/vs/base/node/encoding.ts +++ b/src/vs/base/node/encoding.ts @@ -97,22 +97,22 @@ export function detectEncodingByBOM(file: string): TPromise { const IGNORE_ENCODINGS = ['ascii', 'utf-8', 'utf-16', 'utf-32']; /** - * Detects the encoding from buffer. + * Guesses the encoding from buffer. */ -export function detectEncodingByBuffer(buffer: NodeBuffer): string { - let detected = jschardet.detect(buffer); - if (!detected || !detected.encoding) { +export function guessEncodingByBuffer(buffer: NodeBuffer): string { + let guessed = jschardet.detect(buffer); + if (!guessed || !guessed.encoding) { return null; } - let enc = detected.encoding.toLowerCase(); + let enc = guessed.encoding.toLowerCase(); - // Ignore encodings that cannot detect correctly + // Ignore encodings that cannot guess correctly // (http://chardet.readthedocs.io/en/latest/supported-encodings.html) if (0 <= IGNORE_ENCODINGS.indexOf(enc)) { return null; } - return detected.encoding; + return guessed.encoding; } /** * The encodings that are allowed in a settings file don't match the canonical encoding labels specified by WHATWG. diff --git a/src/vs/base/node/mime.ts b/src/vs/base/node/mime.ts index 714f1bf700d75ef19d4ec7e993d6b7bd05c1d000..e562fb0f1a56ffe6d1f0f57ac78bb7baa898ec39 100644 --- a/src/vs/base/node/mime.ts +++ b/src/vs/base/node/mime.ts @@ -58,19 +58,19 @@ export interface IMimeAndEncoding { mimes: string[]; } -function doDetectMimesFromStream(instream: streams.Readable, autoDetectEncoding: boolean): TPromise { +function doDetectMimesFromStream(instream: streams.Readable, autoGuessEncoding: boolean): TPromise { return stream.readExactlyByStream(instream, BUFFER_READ_MAX_LEN).then((readResult: stream.ReadResult) => { - return detectMimeAndEncodingFromBuffer(readResult, autoDetectEncoding); + return detectMimeAndEncodingFromBuffer(readResult, autoGuessEncoding); }); } -function doDetectMimesFromFile(absolutePath: string, autoDetectEncoding: boolean): TPromise { +function doDetectMimesFromFile(absolutePath: string, autoGuessEncoding: boolean): TPromise { return stream.readExactlyByFile(absolutePath, BUFFER_READ_MAX_LEN).then((readResult: stream.ReadResult) => { - return detectMimeAndEncodingFromBuffer(readResult, autoDetectEncoding); + return detectMimeAndEncodingFromBuffer(readResult, autoGuessEncoding); }); } -export function detectMimeAndEncodingFromBuffer({buffer, bytesRead}: stream.ReadResult, autoDetectEncoding: boolean): IMimeAndEncoding { +export function detectMimeAndEncodingFromBuffer({ buffer, bytesRead }: stream.ReadResult, autoGuessEncoding: boolean): IMimeAndEncoding { let enc = encoding.detectEncodingByBOMFromBuffer(buffer, bytesRead); // Detect 0 bytes to see if file is binary (ignore for UTF 16 though) @@ -83,8 +83,8 @@ export function detectMimeAndEncodingFromBuffer({buffer, bytesRead}: stream.Read } } } - if (autoDetectEncoding && isText && !enc) { - enc = encoding.detectEncodingByBuffer(buffer); + if (autoGuessEncoding && isText && !enc) { + enc = encoding.guessEncodingByBuffer(buffer); } return { @@ -123,8 +123,8 @@ function filterAndSortMimes(detectedMimes: string[], guessedMimes: string[]): st * @param instream the readable stream to detect the mime types from. * @param nameHint an additional hint that can be used to detect a mime from a file extension. */ -export function detectMimesFromStream(instream: streams.Readable, nameHint: string, autoDetectEncoding: boolean): TPromise { - return doDetectMimesFromStream(instream, autoDetectEncoding).then(encoding => +export function detectMimesFromStream(instream: streams.Readable, nameHint: string, autoGuessEncoding: boolean): TPromise { + return doDetectMimesFromStream(instream, autoGuessEncoding).then(encoding => handleMimeResult(nameHint, encoding) ); } @@ -133,8 +133,8 @@ export function detectMimesFromStream(instream: streams.Readable, nameHint: stri * Opens the given file to detect its mime type. Returns an array of mime types sorted from most specific to unspecific. * @param absolutePath the absolute path of the file. */ -export function detectMimesFromFile(absolutePath: string, autoDetectEncoding: boolean): TPromise { - return doDetectMimesFromFile(absolutePath, autoDetectEncoding).then(encoding => +export function detectMimesFromFile(absolutePath: string, autoGuessEncoding: boolean): TPromise { + return doDetectMimesFromFile(absolutePath, autoGuessEncoding).then(encoding => handleMimeResult(absolutePath, encoding) ); } diff --git a/src/vs/base/test/node/mime/mime.test.ts b/src/vs/base/test/node/mime/mime.test.ts index 4cea75481f9fbc621b253d47dad830cc1f327b6e..e788296eb4c5ebdbbf21d9e7794b8063889098e7 100644 --- a/src/vs/base/test/node/mime/mime.test.ts +++ b/src/vs/base/test/node/mime/mime.test.ts @@ -61,7 +61,7 @@ suite('Mime', () => { }, done); }); - test('autoDetectEncoding (ShiftJIS)', function (done: () => void) { + test('autoGuessEncoding (ShiftJIS)', function (done: () => void) { const file = require.toUrl('./fixtures/some.shiftjis.txt'); mime.detectMimesFromFile(file, true).then(mimes => { assert.deepEqual(mimes.encoding, 'SHIFT_JIS'); diff --git a/src/vs/platform/files/common/files.ts b/src/vs/platform/files/common/files.ts index bb4ef763d5e68b0ef5e8a815cf4ab4c9f5645f51..b681492ab91a73469d18105264cdecc756588962 100644 --- a/src/vs/platform/files/common/files.ts +++ b/src/vs/platform/files/common/files.ts @@ -575,7 +575,7 @@ export interface IFilesConfiguration { exclude: glob.IExpression; watcherExclude: { [filepattern: string]: boolean }; encoding: string; - autoDetectEncoding: boolean; + autoGuessEncoding: boolean; trimTrailingWhitespace: boolean; autoSave: string; autoSaveDelay: number; diff --git a/src/vs/platform/telemetry/common/telemetryUtils.ts b/src/vs/platform/telemetry/common/telemetryUtils.ts index c4e6e296fe587ba838a4175729050800f096d52a..e0548ff4c553d65347df36f863bd639e57949c33 100644 --- a/src/vs/platform/telemetry/common/telemetryUtils.ts +++ b/src/vs/platform/telemetry/common/telemetryUtils.ts @@ -240,7 +240,7 @@ const configurationValueWhitelist = [ 'editor.acceptSuggestionOnCommitCharacter', 'workbench.editor.showTabs', 'files.encoding', - 'files.autoDetectEncoding', + 'files.autoGuessEncoding', 'editor.quickSuggestionsDelay', 'editor.snippetSuggestions', 'editor.selectionHighlight', diff --git a/src/vs/workbench/parts/files/browser/files.contribution.ts b/src/vs/workbench/parts/files/browser/files.contribution.ts index 9d1d0adf0d5e3a991272d6c0ba9647b9d7538e7b..fea251566146c98e74edacc14d370c224f30fe8f 100644 --- a/src/vs/workbench/parts/files/browser/files.contribution.ts +++ b/src/vs/workbench/parts/files/browser/files.contribution.ts @@ -212,10 +212,10 @@ configurationRegistry.registerConfiguration({ 'default': 'utf8', 'description': nls.localize('encoding', "The default character set encoding to use when reading and writing files."), }, - 'files.autoDetectEncoding': { + 'files.autoGuessEncoding': { 'type': 'boolean', 'default': false, - 'description': nls.localize('autoDetetEncoding', "whem enabled, will use detected encoding in opening a text file.") + 'description': nls.localize('autoGuessEncoding', "When enabled, will attempt to guess the character set encoding when opening files") }, 'files.eol': { 'type': 'string', diff --git a/src/vs/workbench/services/files/electron-browser/fileService.ts b/src/vs/workbench/services/files/electron-browser/fileService.ts index eef6299d457854b63d0b160d4b016a934109244e..0e03ecb888c0c9d84a0a9547d76234966714726a 100644 --- a/src/vs/workbench/services/files/electron-browser/fileService.ts +++ b/src/vs/workbench/services/files/electron-browser/fileService.ts @@ -81,7 +81,7 @@ export class FileService implements IFileService { const fileServiceConfig: IFileServiceOptions = { errorLogger: (msg: string) => this.onFileServiceError(msg), encoding: configuration.files && configuration.files.encoding, - autoDetectEncoding: configuration.files && configuration.files.autoDetectEncoding, + autoGuessEncoding: configuration.files && configuration.files.autoGuessEncoding, encodingOverride, watcherIgnoredPatterns, verboseLogging: environmentService.verbose, diff --git a/src/vs/workbench/services/files/node/fileService.ts b/src/vs/workbench/services/files/node/fileService.ts index a660f60daebad4cde852e8e1c731da5bcb71e503..9718f499d0c36414f0d5ef19bd56601ff8d2955c 100644 --- a/src/vs/workbench/services/files/node/fileService.ts +++ b/src/vs/workbench/services/files/node/fileService.ts @@ -44,7 +44,7 @@ export interface IFileServiceOptions { tmpDir?: string; errorLogger?: (msg: string) => void; encoding?: string; - autoDetectEncoding?: boolean; + autoGuessEncoding?: boolean; bom?: string; encodingOverride?: IEncodingOverride[]; watcherIgnoredPatterns?: string[]; @@ -206,7 +206,7 @@ export class FileService implements IFileService { } // 2.) detect mimes - return mime.detectMimesFromFile(absolutePath, this.options.autoDetectEncoding).then((detected: mime.IMimeAndEncoding) => { + return mime.detectMimesFromFile(absolutePath, this.options.autoGuessEncoding).then((detected: mime.IMimeAndEncoding) => { const isText = detected.mimes.indexOf(baseMime.MIME_BINARY) === -1; // Return error early if client only accepts text and this is not text