提交 42b4fcc4 编写于 作者: B Benjamin Pasero

debt - avoid paths.relative in search

上级 1152a5c0
......@@ -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 = {
......
......@@ -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<any> {
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<any> {
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) {
......
......@@ -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;
}
......
......@@ -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;
......
/*---------------------------------------------------------------------------------------------
* 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<any> {
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<any> {
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
......@@ -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(
......
......@@ -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';
......
......@@ -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';
......
......@@ -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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册