import * as vscode from 'vscode' ; import * as fs from 'fs' ; import * as os from 'os' ; import { join } from 'path' ; function rndName ( ) { return Math . random ( ) . toString ( 36 ) . replace ( /[^a-z]+/g , '' ) . substr ( 0 , 10 ) ; } export function createRandomFile ( contents = '' , fileExtension = 'txt' ) { return new Promise ( ( resolve , reject ) => { const tmpFile = join ( os . tmpdir ( ) , rndName ( ) + '.' + fileExtension ) ; fs . writeFile ( tmpFile , contents , ( error ) => { if ( error ) { return reject ( error ) ; } resolve ( vscode . Uri . file ( tmpFile ) ) ; } ) ; } ) ; } export function pathEquals ( path1 , path2 ) { if ( process . platform !== 'linux' ) { path1 = path1 . toLowerCase ( ) ; path2 = path2 . toLowerCase ( ) ; } return path1 === path2 ; } export function deleteFile ( file ) { return new Promise ( ( resolve , reject ) => { fs . unlink ( file . fsPath , ( err ) => { if ( err ) { reject ( err ) ; } else { resolve ( true ) ; } } ) ; } ) ; } export function closeAllEditors ( ) { return vscode . commands . executeCommand ( 'workbench.action.closeAllEditors' ) ; } export function withRandomFileEditor ( initialContents , fileExtension = 'txt' , run ) { return createRandomFile ( initialContents , fileExtension ) . then ( file => { return vscode . workspace . openTextDocument ( file ) . then ( doc => { return vscode . window . showTextDocument ( doc ) . then ( ( editor ) => { return run ( editor , doc ) . then ( _ => { if ( doc . isDirty ) { return doc . save ( ) . then ( ( ) => { return deleteFile ( file ) ; } ) ; } else { return deleteFile ( file ) ; } } ) ; } ) ; } ) ; } ) ; }