装饰器模块

FileDecoration 模块主要用来注册/管理/分发跟文件名相关 Decoration 服务。

基础概念

Decoration —— 装饰器,主要是用来 “装饰” 文件树样式的一种手段,常见的场景,如 Git 项目的特殊装饰:

git-sample

使用

注册装饰器

registerDecorationsProvider

  registerDecorationsProvider(provider: IDecorationsProvider): IDisposable;

注册 DecorationsProvider 的基础数据结构如下:

interface IDecorationData {
  /**
   * 权重
   */
  readonly weight?: number;
  /**
   * Decoration 颜色
   */
  readonly color?: ColorIdentifier;
  /**
   * Decoration 字符
   */
  readonly letter?: string;
  /**
   * Decoration tooltip
   */
  readonly tooltip?: string;
  /**
   * Decoration 是否冒泡,类似文件的 Decoration 是否传给文件夹
   */
  readonly bubble?: boolean;
}
案例
class SampleDecorationsProvider implements IDecorationsProvider {
  readonly label = 'sample';

  readonly onDidChangeEmitter: Emitter<Uri[]> = new Emitter();

  get onDidChange() {
    return this.onDidChangeEmitter.event;
  }

  provideDecorations(resource: Uri): IDecorationData | undefined {
    if (file.scheme !== 'file') {
      return undefined;
    }

    return {
      letter: '😸',
      color: 'cat.smileForeground',
      tooltip: localize('cat.smile'),
      weight: -1,
      bubble: false
    } as IDecorationData;
  }
}

监听装饰器变化

onDidChangeDecorations

  readonly onDidChangeDecorations: Event<IResourceDecorationChangeEvent>;

针对文件名的 Decoration 变更事件进行事件分发

案例
this.decorationsService.onDidChangeDecorations(() => {
  // some listener
});

获取文件装饰器

getDecoration

getDecoration(uri: Uri, includeChildren: boolean, overwrite?: IDecorationData): IDecoration | undefined;

获取 uri 的方式获取当前文件的 Decoration 结果,如果没有获取到则返回 undefined

案例
this.decorationsService.getDecoration(uri, true);