提交 0999c132 编写于 作者: J Joao Moreno

stable-ish scm api!

fixes #2824
上级 ae55e8fa
......@@ -4515,6 +4515,211 @@ declare module 'vscode' {
export function setLanguageConfiguration(language: string, configuration: LanguageConfiguration): Disposable;
}
/**
* The theme-aware decorations for a [SCM resource](#SCMResource).
*/
export interface SCMResourceThemableDecorations {
/**
* The icon path for a specific [SCM resource](#SCMResource).
*/
readonly iconPath?: string | Uri;
}
/**
* The decorations for a [SCM resource](#SCMResource). Can be specified
* for light and dark themes, independently.
*/
export interface SCMResourceDecorations extends SCMResourceThemableDecorations {
/**
* Whether the [SCM resource](#SCMResource) should be striked-through
* in the UI.
*/
readonly strikeThrough?: boolean;
/**
* The light theme decorations.
*/
readonly light?: SCMResourceThemableDecorations;
/**
* The dark theme decorations.
*/
readonly dark?: SCMResourceThemableDecorations;
}
/**
* An SCM resource represents the state of an underlying workspace
* resource within a certain SCM provider state.
*/
export interface SCMResource {
/**
* The [uri](#Uri) of this SCM resource. This uri should uniquely
* identify this SCM resource. Its value should be semantically
* related to your [SCM provider](#SCMProvider).
*
* For example, consider file `/foo/bar` to be modified. An SCM
* resource which would represent such state could have the
* following properties:
*
* - `uri = 'git:workingtree/A'`
* - `sourceUri = 'file:///foo/bar'`
*/
readonly uri: Uri;
/**
* The [uri](#Uri) of the underlying resource inside the workspace.
*/
readonly sourceUri: Uri;
/**
* The [decorations](#SCMResourceDecorations) for this SCM resource.
*/
readonly decorations?: SCMResourceDecorations;
}
/**
* An SCM resource group is a collection of [SCM resources](#SCMResource).
*/
export interface SCMResourceGroup {
/**
* The [uri](#Uri) of this SCM resource group. This uri should
* uniquely identify this SCM resource group. Its value should be
* semantically related to your [SCM provider](#SCMProvider).
*
* For example, consider a Working Tree resource group. An SCM
* resource group which would represent such state could have the
* following properties:
*
* - `uri = 'git:workingtree'`
* - `label = 'Working Tree'`
*/
readonly uri: Uri;
/**
* The UI label of the SCM resource group.
*/
readonly label: string;
/**
* The context key of the SCM resource group, which will be used to populate
* the value of the `scmResourceGroup` context key.
*/
readonly contextKey?: string;
/**
* The collection of [SCM resources](#SCMResource) within the SCM resource group.
*/
readonly resources: SCMResource[];
}
/**
* An SCM provider is able to provide [SCM resources](#SCMResource) to the editor,
* notify of changes in them and interact with the editor in several SCM related ways.
*/
export interface SCMProvider {
/**
* A human-readable label for the name of the SCM Provider.
*/
readonly label: string;
/**
* The context key of the SCM provider, which will be used to populate
* the value of the `scmProvider` context key.
*/
readonly contextKey?: string;
/**
* The list of SCM resource groups.
*/
readonly resources: SCMResourceGroup[];
/**
* A count of resources, used in the UI as the label for the SCM changes count.
*/
readonly count?: number;
/**
* A state identifier, which will be used to populate the value of the
* `scmProviderState` context key.
*/
readonly stateContextKey?: string;
/**
* An [event](#Event) which should fire when any of the following attributes
* have changed:
* - [resources](#SCMProvider.resources)
* - [count](#SCMProvider.count)
* - [state](#SCMProvider.state)
*/
readonly onDidChange?: Event<SCMProvider>;
/**
* Provide a [uri](#Uri) to the original resource of any given resource uri.
*
* @param uri The uri of the resource open in a text editor.
* @param token A cancellation token.
* @return A thenable that resolves to uri of the matching original resource.
*/
provideOriginalResource?(uri: Uri, token: CancellationToken): ProviderResult<Uri>;
/**
* Open a specific [SCM resource](#SCMResource). Called when SCM resources
* are clicked in the UI, for example.
*
* @param resource The [SCM resource](#SCMResource) which should be open.
* @param token A cancellation token.
* @return A thenable which resolves when the resource is open.
*/
open?(resource: SCMResource): void;
}
/**
* Represents the input box in the SCM view.
*/
export interface SCMInputBox {
/**
* Setter and getter for the contents of the input box.
*/
value: string;
}
export namespace scm {
/**
* The currently active [SCM provider](#SCMProvider).
*/
export let activeProvider: SCMProvider | undefined;
/**
* An [event](#Event) which fires when the active [SCM provider](#SCMProvider)
* has changed.
*/
export const onDidChangeActiveProvider: Event<SCMProvider>;
/**
* The [input box](#SCMInputBox) in the SCM view.
*/
export const inputBox: SCMInputBox;
/**
* An [event](#Event) which fires when the user has accepted the changes.
*/
export const onDidAcceptInputValue: Event<SCMInputBox>;
/**
* Registers an [SCM provider](#SCMProvider).
*
* @return A disposable which unregisters the provider.
*/
export function registerSCMProvider(provider: SCMProvider): Disposable;
}
/**
* Namespace for dealing with installed extensions. Extensions are represented
* by an [extension](#Extension)-interface which allows to reflect on them.
......
......@@ -584,211 +584,6 @@ declare module 'vscode' {
getClickCommand?(node: T): string;
}
/**
* The theme-aware decorations for a [SCM resource](#SCMResource).
*/
export interface SCMResourceThemableDecorations {
/**
* The icon path for a specific [SCM resource](#SCMResource).
*/
readonly iconPath?: string | Uri;
}
/**
* The decorations for a [SCM resource](#SCMResource). Can be specified
* for light and dark themes, independently.
*/
export interface SCMResourceDecorations extends SCMResourceThemableDecorations {
/**
* Whether the [SCM resource](#SCMResource) should be striked-through
* in the UI.
*/
readonly strikeThrough?: boolean;
/**
* The light theme decorations.
*/
readonly light?: SCMResourceThemableDecorations;
/**
* The dark theme decorations.
*/
readonly dark?: SCMResourceThemableDecorations;
}
/**
* An SCM resource represents the state of an underlying workspace
* resource within a certain SCM provider state.
*/
export interface SCMResource {
/**
* The [uri](#Uri) of this SCM resource. This uri should uniquely
* identify this SCM resource. Its value should be semantically
* related to your [SCM provider](#SCMProvider).
*
* For example, consider file `/foo/bar` to be modified. An SCM
* resource which would represent such state could have the
* following properties:
*
* - `uri = 'git:workingtree/A'`
* - `sourceUri = 'file:///foo/bar'`
*/
readonly uri: Uri;
/**
* The [uri](#Uri) of the underlying resource inside the workspace.
*/
readonly sourceUri: Uri;
/**
* The [decorations](#SCMResourceDecorations) for this SCM resource.
*/
readonly decorations?: SCMResourceDecorations;
}
/**
* An SCM resource group is a collection of [SCM resources](#SCMResource).
*/
export interface SCMResourceGroup {
/**
* The [uri](#Uri) of this SCM resource group. This uri should
* uniquely identify this SCM resource group. Its value should be
* semantically related to your [SCM provider](#SCMProvider).
*
* For example, consider a Working Tree resource group. An SCM
* resource group which would represent such state could have the
* following properties:
*
* - `uri = 'git:workingtree'`
* - `label = 'Working Tree'`
*/
readonly uri: Uri;
/**
* The UI label of the SCM resource group.
*/
readonly label: string;
/**
* The context key of the SCM resource group, which will be used to populate
* the value of the `scmResourceGroup` context key.
*/
readonly contextKey?: string;
/**
* The collection of [SCM resources](#SCMResource) within the SCM resource group.
*/
readonly resources: SCMResource[];
}
/**
* An SCM provider is able to provide [SCM resources](#SCMResource) to the editor,
* notify of changes in them and interact with the editor in several SCM related ways.
*/
export interface SCMProvider {
/**
* A human-readable label for the name of the SCM Provider.
*/
readonly label: string;
/**
* The context key of the SCM provider, which will be used to populate
* the value of the `scmProvider` context key.
*/
readonly contextKey?: string;
/**
* The list of SCM resource groups.
*/
readonly resources: SCMResourceGroup[];
/**
* A count of resources, used in the UI as the label for the SCM changes count.
*/
readonly count?: number;
/**
* A state identifier, which will be used to populate the value of the
* `scmProviderState` context key.
*/
readonly stateContextKey?: string;
/**
* An [event](#Event) which should fire when any of the following attributes
* have changed:
* - [resources](#SCMProvider.resources)
* - [count](#SCMProvider.count)
* - [state](#SCMProvider.state)
*/
readonly onDidChange?: Event<SCMProvider>;
/**
* Provide a [uri](#Uri) to the original resource of any given resource uri.
*
* @param uri The uri of the resource open in a text editor.
* @param token A cancellation token.
* @return A thenable that resolves to uri of the matching original resource.
*/
provideOriginalResource?(uri: Uri, token: CancellationToken): ProviderResult<Uri>;
/**
* Open a specific [SCM resource](#SCMResource). Called when SCM resources
* are clicked in the UI, for example.
*
* @param resource The [SCM resource](#SCMResource) which should be open.
* @param token A cancellation token.
* @return A thenable which resolves when the resource is open.
*/
open?(resource: SCMResource): void;
}
/**
* Represents the input box in the SCM view.
*/
export interface SCMInputBox {
/**
* Setter and getter for the contents of the input box.
*/
value: string;
}
export namespace scm {
/**
* The currently active [SCM provider](#SCMProvider).
*/
export let activeProvider: SCMProvider | undefined;
/**
* An [event](#Event) which fires when the active [SCM provider](#SCMProvider)
* has changed.
*/
export const onDidChangeActiveProvider: Event<SCMProvider>;
/**
* The [input box](#SCMInputBox) in the SCM view.
*/
export const inputBox: SCMInputBox;
/**
* An [event](#Event) which fires when the user has accepted the changes.
*/
export const onDidAcceptInputValue: Event<SCMInputBox>;
/**
* Registers an [SCM provider](#SCMProvider).
*
* @return A disposable which unregisters the provider.
*/
export function registerSCMProvider(provider: SCMProvider): Disposable;
}
/**
* The contiguous set of modified lines in a diff.
*/
......
......@@ -448,27 +448,22 @@ export function createApiFactory(
class SCM {
@proposed(extension)
get activeProvider() {
return extHostSCM.activeProvider;
}
@proposed(extension)
get onDidChangeActiveProvider() {
return extHostSCM.onDidChangeActiveProvider;
}
@proposed(extension)
get onDidAcceptInputValue() {
return mapEvent(extHostSCM.inputBox.onDidAccept, () => extHostSCM.inputBox);
}
@proposed(extension)
get inputBox() {
return extHostSCM.inputBox;
}
@proposed(extension)
registerSCMProvider(provider: vscode.SCMProvider) {
telemetryService.publicLog('registerSCMProvider', {
extensionId: extension.id,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册