diff --git a/src/vs/workbench/common/actions.ts b/src/vs/workbench/common/actions.ts index ca31c0a8f45..8224b78b193 100644 --- a/src/vs/workbench/common/actions.ts +++ b/src/vs/workbench/common/actions.ts @@ -57,7 +57,7 @@ Registry.add(Extensions.WorkbenchActions, new class implements IWorkbenchActionR // menu item // TODO@Rob slightly weird if-check required because of - // https://github.com/Microsoft/vscode/blob/master/src/vs/workbench/parts/search/browser/search.contribution.ts#L266 + // https://github.com/Microsoft/vscode/blob/master/src/vs/workbench/parts/search/electron-browser/search.contribution.ts#L266 if (descriptor.label) { const command = { diff --git a/src/vs/workbench/parts/search/browser/searchActions.ts b/src/vs/workbench/parts/search/browser/searchActions.ts index aa0eba1cf8a..26e5ba284f6 100644 --- a/src/vs/workbench/parts/search/browser/searchActions.ts +++ b/src/vs/workbench/parts/search/browser/searchActions.ts @@ -5,10 +5,7 @@ import nls = require('vs/nls'); import DOM = require('vs/base/browser/dom'); -import errors = require('vs/base/common/errors'); -import resources = require('vs/base/common/resources'); import { TPromise } from 'vs/base/common/winjs.base'; -import URI from 'vs/base/common/uri'; import { Action } from 'vs/base/common/actions'; import { IViewletService } from 'vs/workbench/services/viewlet/browser/viewlet'; import { ITree } from 'vs/base/parts/tree/browser/tree'; @@ -21,9 +18,7 @@ import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/edi import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { ResolvedKeybinding, createKeybinding } from 'vs/base/common/keyCodes'; import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { ServicesAccessor, IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IListService } from 'vs/platform/list/browser/listService'; -import { explorerItemToFileResource } from 'vs/workbench/parts/files/common/files'; +import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; import { OS } from 'vs/base/common/platform'; import { IContextKeyService, ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; @@ -335,59 +330,6 @@ export class CloseReplaceAction extends Action { } } -export class FindInWorkspaceAction extends Action { - - public static ID = 'filesExplorer.findInWorkspace'; - - constructor( @IViewletService private viewletService: IViewletService) { - super(FindInWorkspaceAction.ID, nls.localize('findInWorkspace', "Find in Workspace...")); - } - - public run(event?: any): TPromise { - return this.viewletService.openViewlet(Constants.VIEWLET_ID, true).then(viewlet => { - (viewlet as SearchViewlet).searchInFolder(null); - }); - } -} - -export class FindInFolderAction extends Action { - - public static ID = 'filesExplorer.findInFolder'; - - private resource: URI; - - constructor(resource: URI, @IInstantiationService private instantiationService: IInstantiationService) { - super(FindInFolderAction.ID, nls.localize('findInFolder', "Find in Folder...")); - - this.resource = resource; - } - - public run(event?: any): TPromise { - return this.instantiationService.invokeFunction.apply(this.instantiationService, [findInFolderCommand, this.resource]); - } -} - -export const findInFolderCommand = (accessor: ServicesAccessor, resource?: URI) => { - const listService = accessor.get(IListService); - const viewletService = accessor.get(IViewletService); - - if (!URI.isUri(resource)) { - const focused = listService.getFocused() ? listService.getFocused().getFocus() : void 0; - if (focused) { - const file = explorerItemToFileResource(focused); - if (file) { - resource = file.isDirectory ? file.resource : resources.dirname(file.resource); - } - } - } - - viewletService.openViewlet(Constants.VIEWLET_ID, true).then(viewlet => { - if (resource) { - (viewlet as SearchViewlet).searchInFolder(resource); - } - }).done(null, errors.onUnexpectedError); -}; - export class RefreshAction extends Action { constructor(private viewlet: SearchViewlet) { diff --git a/src/vs/workbench/parts/search/browser/searchViewlet.ts b/src/vs/workbench/parts/search/browser/searchViewlet.ts index 2c26f335603..6eec3b4490d 100644 --- a/src/vs/workbench/parts/search/browser/searchViewlet.ts +++ b/src/vs/workbench/parts/search/browser/searchViewlet.ts @@ -898,7 +898,7 @@ export class SearchViewlet extends Viewlet { } } - public searchInFolder(resource: URI): void { + public searchInFolder(resource: URI, pathToRelative: (from: string, to: string) => string): void { let folderPath = null; const workspace = this.contextService.getWorkspace(); if (resource) { @@ -916,7 +916,7 @@ export class SearchViewlet extends Viewlet { // If this root is the only one with its basename, use a relative ./ path. If there is another, use an absolute path const isUniqueFolder = workspace.folders.filter(folder => paths.basename(folder.uri.fsPath) === owningRootBasename).length === 1; if (isUniqueFolder) { - folderPath = `./${owningRootBasename}/${paths.relative(owningFolder.uri.fsPath, resource.fsPath)}`; + folderPath = `./${owningRootBasename}/${paths.normalize(pathToRelative(owningFolder.uri.fsPath, resource.fsPath))}`; } else { folderPath = resource.fsPath; } diff --git a/src/vs/workbench/parts/search/browser/media/search-dark.svg b/src/vs/workbench/parts/search/electron-browser/media/search-dark.svg similarity index 100% rename from src/vs/workbench/parts/search/browser/media/search-dark.svg rename to src/vs/workbench/parts/search/electron-browser/media/search-dark.svg diff --git a/src/vs/workbench/parts/search/browser/media/search.contribution.css b/src/vs/workbench/parts/search/electron-browser/media/search.contribution.css similarity index 100% rename from src/vs/workbench/parts/search/browser/media/search.contribution.css rename to src/vs/workbench/parts/search/electron-browser/media/search.contribution.css diff --git a/src/vs/workbench/parts/search/browser/search.contribution.ts b/src/vs/workbench/parts/search/electron-browser/search.contribution.ts similarity index 98% rename from src/vs/workbench/parts/search/browser/search.contribution.ts rename to src/vs/workbench/parts/search/electron-browser/search.contribution.ts index b9cde32263b..8ab71e6de88 100644 --- a/src/vs/workbench/parts/search/browser/search.contribution.ts +++ b/src/vs/workbench/parts/search/electron-browser/search.contribution.ts @@ -48,6 +48,7 @@ import { OpenAnythingHandler } from 'vs/workbench/parts/search/browser/openAnyth import { registerLanguageCommand } from 'vs/editor/browser/editorExtensions'; import { getWorkspaceSymbols } from 'vs/workbench/parts/search/common/search'; import { illegalArgument } from 'vs/base/common/errors'; +import { FindInFolderAction, findInFolderCommand, FindInWorkspaceAction } from 'vs/workbench/parts/search/electron-browser/searchActions'; registerSingleton(ISearchWorkbenchService, SearchWorkbenchService); replaceContributions(); @@ -183,7 +184,7 @@ KeybindingsRegistry.registerCommandAndKeybindingRule({ } }); -CommandsRegistry.registerCommand(searchActions.FindInFolderAction.ID, searchActions.findInFolderCommand); +CommandsRegistry.registerCommand(FindInFolderAction.ID, findInFolderCommand); class ExplorerViewerActionContributor extends ActionBarContributor { private _instantiationService: IInstantiationService; @@ -216,10 +217,10 @@ class ExplorerViewerActionContributor extends ActionBarContributor { if (this.hasSecondaryActions(context)) { let action: Action; if (context.element instanceof Model) { - action = this._instantiationService.createInstance(searchActions.FindInWorkspaceAction); + action = this._instantiationService.createInstance(FindInWorkspaceAction); } else { let fileResource = explorerItemToFileResource(context.element); - action = this._instantiationService.createInstance(searchActions.FindInFolderAction, fileResource.resource); + action = this._instantiationService.createInstance(FindInFolderAction, fileResource.resource); } action.order = 55; diff --git a/src/vs/workbench/parts/search/electron-browser/searchActions.ts b/src/vs/workbench/parts/search/electron-browser/searchActions.ts new file mode 100644 index 00000000000..1a635a1f5b5 --- /dev/null +++ b/src/vs/workbench/parts/search/electron-browser/searchActions.ts @@ -0,0 +1,71 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import nls = require('vs/nls'); +import errors = require('vs/base/common/errors'); +import resources = require('vs/base/common/resources'); +import { TPromise } from 'vs/base/common/winjs.base'; +import URI from 'vs/base/common/uri'; +import { Action } from 'vs/base/common/actions'; +import { IViewletService } from 'vs/workbench/services/viewlet/browser/viewlet'; +import { SearchViewlet } from 'vs/workbench/parts/search/browser/searchViewlet'; +import * as Constants from 'vs/workbench/parts/search/common/constants'; +import { ServicesAccessor, IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { IListService } from 'vs/platform/list/browser/listService'; +import { explorerItemToFileResource } from 'vs/workbench/parts/files/common/files'; +import { relative } from 'path'; + +export class FindInFolderAction extends Action { + + public static ID = 'filesExplorer.findInFolder'; + + private resource: URI; + + constructor(resource: URI, @IInstantiationService private instantiationService: IInstantiationService) { + super(FindInFolderAction.ID, nls.localize('findInFolder', "Find in Folder...")); + + this.resource = resource; + } + + public run(event?: any): TPromise { + return this.instantiationService.invokeFunction.apply(this.instantiationService, [findInFolderCommand, this.resource]); + } +} + +export const findInFolderCommand = (accessor: ServicesAccessor, resource?: URI) => { + const listService = accessor.get(IListService); + const viewletService = accessor.get(IViewletService); + + if (!URI.isUri(resource)) { + const focused = listService.getFocused() ? listService.getFocused().getFocus() : void 0; + if (focused) { + const file = explorerItemToFileResource(focused); + if (file) { + resource = file.isDirectory ? file.resource : resources.dirname(file.resource); + } + } + } + + viewletService.openViewlet(Constants.VIEWLET_ID, true).then(viewlet => { + if (resource) { + (viewlet as SearchViewlet).searchInFolder(resource, (from, to) => relative(from, to)); + } + }).done(null, errors.onUnexpectedError); +}; + +export class FindInWorkspaceAction extends Action { + + public static ID = 'filesExplorer.findInWorkspace'; + + constructor( @IViewletService private viewletService: IViewletService) { + super(FindInWorkspaceAction.ID, nls.localize('findInWorkspace', "Find in Workspace...")); + } + + public run(event?: any): TPromise { + return this.viewletService.openViewlet(Constants.VIEWLET_ID, true).then(viewlet => { + (viewlet as SearchViewlet).searchInFolder(null, (from, to) => relative(from, to)); + }); + } +} \ No newline at end of file diff --git a/src/vs/workbench/test/electron-browser/api/extHostApiCommands.test.ts b/src/vs/workbench/test/electron-browser/api/extHostApiCommands.test.ts index 0fcc1f4d657..e8c7a63c6fb 100644 --- a/src/vs/workbench/test/electron-browser/api/extHostApiCommands.test.ts +++ b/src/vs/workbench/test/electron-browser/api/extHostApiCommands.test.ts @@ -31,7 +31,7 @@ import { MainContext, ExtHostContext } from 'vs/workbench/api/node/extHost.proto import { ExtHostDiagnostics } from 'vs/workbench/api/node/extHostDiagnostics'; import * as vscode from 'vscode'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import 'vs/workbench/parts/search/browser/search.contribution'; +import 'vs/workbench/parts/search/electron-browser/search.contribution'; const defaultSelector = { scheme: 'far' }; const model: EditorCommon.IModel = EditorModel.createFromString( diff --git a/src/vs/workbench/test/electron-browser/quickopen.perf.integrationTest.ts b/src/vs/workbench/test/electron-browser/quickopen.perf.integrationTest.ts index ed9ef12d055..7deb879a39c 100644 --- a/src/vs/workbench/test/electron-browser/quickopen.perf.integrationTest.ts +++ b/src/vs/workbench/test/electron-browser/quickopen.perf.integrationTest.ts @@ -5,7 +5,7 @@ 'use strict'; -import 'vs/workbench/parts/search/browser/search.contribution'; // load contributions +import 'vs/workbench/parts/search/electron-browser/search.contribution'; // load contributions import * as assert from 'assert'; import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; import { createSyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; diff --git a/src/vs/workbench/test/electron-browser/textsearch.perf.integrationTest.ts b/src/vs/workbench/test/electron-browser/textsearch.perf.integrationTest.ts index d96d93434e9..e4a382f3a78 100644 --- a/src/vs/workbench/test/electron-browser/textsearch.perf.integrationTest.ts +++ b/src/vs/workbench/test/electron-browser/textsearch.perf.integrationTest.ts @@ -5,7 +5,7 @@ 'use strict'; -import 'vs/workbench/parts/search/browser/search.contribution'; // load contributions +import 'vs/workbench/parts/search/electron-browser/search.contribution'; // load contributions import * as assert from 'assert'; import * as fs from 'fs'; import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; diff --git a/src/vs/workbench/workbench.main.ts b/src/vs/workbench/workbench.main.ts index 454594c53e9..907f39eb071 100644 --- a/src/vs/workbench/workbench.main.ts +++ b/src/vs/workbench/workbench.main.ts @@ -45,7 +45,7 @@ import 'vs/workbench/parts/backup/common/backup.contribution'; import 'vs/workbench/parts/stats/node/stats.contribution'; import 'vs/workbench/parts/cache/node/cache.contribution'; -import 'vs/workbench/parts/search/browser/search.contribution'; +import 'vs/workbench/parts/search/electron-browser/search.contribution'; import 'vs/workbench/parts/search/browser/searchViewlet'; // can be packaged separately import 'vs/workbench/parts/search/browser/openAnythingHandler'; // can be packaged separately