3f7441caa00eed373776bc3a4a30196939a736d2e6b4ac1c5b1802f8eaf3f90914f2e41e8a56fbeb65351b7f9790e55de8fcd3da6e542220ab8072d0ae8301 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. /*---------------------------------------------------------------------------------------------
  2. * Copyright (c) Microsoft Corporation. All rights reserved.
  3. * Licensed under the MIT License. See License.txt in the project root for license information.
  4. *--------------------------------------------------------------------------------------------*/
  5. var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
  6. var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
  7. if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
  8. else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
  9. return c > 3 && r && Object.defineProperty(target, key, r), r;
  10. };
  11. var __param = (this && this.__param) || function (paramIndex, decorator) {
  12. return function (target, key) { decorator(target, key, paramIndex); }
  13. };
  14. import * as dom from '../../../../../base/browser/dom.js';
  15. import { CountBadge } from '../../../../../base/browser/ui/countBadge/countBadge.js';
  16. import { HighlightedLabel } from '../../../../../base/browser/ui/highlightedlabel/highlightedLabel.js';
  17. import { IconLabel } from '../../../../../base/browser/ui/iconLabel/iconLabel.js';
  18. import { createMatches, FuzzyScore } from '../../../../../base/common/filters.js';
  19. import { Disposable } from '../../../../../base/common/lifecycle.js';
  20. import { basename, dirname } from '../../../../../base/common/resources.js';
  21. import { ITextModelService } from '../../../../common/services/resolverService.js';
  22. import { localize } from '../../../../../nls.js';
  23. import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js';
  24. import { IKeybindingService } from '../../../../../platform/keybinding/common/keybinding.js';
  25. import { ILabelService } from '../../../../../platform/label/common/label.js';
  26. import { attachBadgeStyler } from '../../../../../platform/theme/common/styler.js';
  27. import { IThemeService } from '../../../../../platform/theme/common/themeService.js';
  28. import { FileReferences, OneReference, ReferencesModel } from '../referencesModel.js';
  29. let DataSource = class DataSource {
  30. constructor(_resolverService) {
  31. this._resolverService = _resolverService;
  32. }
  33. hasChildren(element) {
  34. if (element instanceof ReferencesModel) {
  35. return true;
  36. }
  37. if (element instanceof FileReferences) {
  38. return true;
  39. }
  40. return false;
  41. }
  42. getChildren(element) {
  43. if (element instanceof ReferencesModel) {
  44. return element.groups;
  45. }
  46. if (element instanceof FileReferences) {
  47. return element.resolve(this._resolverService).then(val => {
  48. // if (element.failure) {
  49. // // refresh the element on failure so that
  50. // // we can update its rendering
  51. // return tree.refresh(element).then(() => val.children);
  52. // }
  53. return val.children;
  54. });
  55. }
  56. throw new Error('bad tree');
  57. }
  58. };
  59. DataSource = __decorate([
  60. __param(0, ITextModelService)
  61. ], DataSource);
  62. export { DataSource };
  63. //#endregion
  64. export class Delegate {
  65. getHeight() {
  66. return 23;
  67. }
  68. getTemplateId(element) {
  69. if (element instanceof FileReferences) {
  70. return FileReferencesRenderer.id;
  71. }
  72. else {
  73. return OneReferenceRenderer.id;
  74. }
  75. }
  76. }
  77. let StringRepresentationProvider = class StringRepresentationProvider {
  78. constructor(_keybindingService) {
  79. this._keybindingService = _keybindingService;
  80. }
  81. getKeyboardNavigationLabel(element) {
  82. var _a;
  83. if (element instanceof OneReference) {
  84. const parts = (_a = element.parent.getPreview(element)) === null || _a === void 0 ? void 0 : _a.preview(element.range);
  85. if (parts) {
  86. return parts.value;
  87. }
  88. }
  89. // FileReferences or unresolved OneReference
  90. return basename(element.uri);
  91. }
  92. };
  93. StringRepresentationProvider = __decorate([
  94. __param(0, IKeybindingService)
  95. ], StringRepresentationProvider);
  96. export { StringRepresentationProvider };
  97. export class IdentityProvider {
  98. getId(element) {
  99. return element instanceof OneReference ? element.id : element.uri;
  100. }
  101. }
  102. //#region render: File
  103. let FileReferencesTemplate = class FileReferencesTemplate extends Disposable {
  104. constructor(container, _labelService, themeService) {
  105. super();
  106. this._labelService = _labelService;
  107. const parent = document.createElement('div');
  108. parent.classList.add('reference-file');
  109. this.file = this._register(new IconLabel(parent, { supportHighlights: true }));
  110. this.badge = new CountBadge(dom.append(parent, dom.$('.count')));
  111. this._register(attachBadgeStyler(this.badge, themeService));
  112. container.appendChild(parent);
  113. }
  114. set(element, matches) {
  115. const parent = dirname(element.uri);
  116. this.file.setLabel(this._labelService.getUriBasenameLabel(element.uri), this._labelService.getUriLabel(parent, { relative: true }), { title: this._labelService.getUriLabel(element.uri), matches });
  117. const len = element.children.length;
  118. this.badge.setCount(len);
  119. if (len > 1) {
  120. this.badge.setTitleFormat(localize('referencesCount', "{0} references", len));
  121. }
  122. else {
  123. this.badge.setTitleFormat(localize('referenceCount', "{0} reference", len));
  124. }
  125. }
  126. };
  127. FileReferencesTemplate = __decorate([
  128. __param(1, ILabelService),
  129. __param(2, IThemeService)
  130. ], FileReferencesTemplate);
  131. let FileReferencesRenderer = class FileReferencesRenderer {
  132. constructor(_instantiationService) {
  133. this._instantiationService = _instantiationService;
  134. this.templateId = FileReferencesRenderer.id;
  135. }
  136. renderTemplate(container) {
  137. return this._instantiationService.createInstance(FileReferencesTemplate, container);
  138. }
  139. renderElement(node, index, template) {
  140. template.set(node.element, createMatches(node.filterData));
  141. }
  142. disposeTemplate(templateData) {
  143. templateData.dispose();
  144. }
  145. };
  146. FileReferencesRenderer.id = 'FileReferencesRenderer';
  147. FileReferencesRenderer = __decorate([
  148. __param(0, IInstantiationService)
  149. ], FileReferencesRenderer);
  150. export { FileReferencesRenderer };
  151. //#endregion
  152. //#region render: Reference
  153. class OneReferenceTemplate {
  154. constructor(container) {
  155. this.label = new HighlightedLabel(container);
  156. }
  157. set(element, score) {
  158. var _a;
  159. const preview = (_a = element.parent.getPreview(element)) === null || _a === void 0 ? void 0 : _a.preview(element.range);
  160. if (!preview || !preview.value) {
  161. // this means we FAILED to resolve the document or the value is the empty string
  162. this.label.set(`${basename(element.uri)}:${element.range.startLineNumber + 1}:${element.range.startColumn + 1}`);
  163. }
  164. else {
  165. // render search match as highlight unless
  166. // we have score, then render the score
  167. const { value, highlight } = preview;
  168. if (score && !FuzzyScore.isDefault(score)) {
  169. this.label.element.classList.toggle('referenceMatch', false);
  170. this.label.set(value, createMatches(score));
  171. }
  172. else {
  173. this.label.element.classList.toggle('referenceMatch', true);
  174. this.label.set(value, [highlight]);
  175. }
  176. }
  177. }
  178. }
  179. export class OneReferenceRenderer {
  180. constructor() {
  181. this.templateId = OneReferenceRenderer.id;
  182. }
  183. renderTemplate(container) {
  184. return new OneReferenceTemplate(container);
  185. }
  186. renderElement(node, index, templateData) {
  187. templateData.set(node.element, node.filterData);
  188. }
  189. disposeTemplate() {
  190. }
  191. }
  192. OneReferenceRenderer.id = 'OneReferenceRenderer';
  193. //#endregion
  194. export class AccessibilityProvider {
  195. getWidgetAriaLabel() {
  196. return localize('treeAriaLabel', "References");
  197. }
  198. getAriaLabel(element) {
  199. return element.ariaMessage;
  200. }
  201. }