Selaa lähdekoodia

Convert ICompletionItems into type alias

Edward Zhao 5 vuotta sitten
vanhempi
commit
e02ba9be61

+ 2 - 7
packages/completer/src/handler.ts

@@ -487,16 +487,11 @@ export namespace CompletionHandler {
   }
 
   /**
-   * Wrapper object for ICompletionItem.
+   * Type alias for ICompletionItem list.
    * Implementers of this interface should be responsible for
    * deduping and sorting the items in the list.
    */
-  export interface ICompletionItems {
-    /**
-     * Collection of completion items.
-     */
-    items: Array<ICompletionItem>;
-  }
+  export type ICompletionItems = ReadonlyArray<ICompletionItem>;
 
   /**
    * Completion item object based off of LSP CompletionItem

+ 7 - 7
packages/completer/src/model.ts

@@ -185,12 +185,12 @@ export class CompleterModel implements Completer.IModel {
    * new types to KNOWN_TYPES.
    */
   setCompletionItems?(newValue: CompletionHandler.ICompletionItems): void {
-    if (JSONExt.deepEqual(newValue.items, this._completionItems.items)) {
+    if (JSONExt.deepEqual(newValue, this._completionItems)) {
       return;
     }
     this._completionItems = newValue;
     this._orderedTypes = Private.findOrderedCompletionItemTypes(
-      this._completionItems.items
+      this._completionItems
     );
     this._stateChanged.emit(undefined);
   }
@@ -390,7 +390,7 @@ export class CompleterModel implements Completer.IModel {
    * Highlight matching prefix by adding <mark> tags.
    */
   private _markup(query: string): CompletionHandler.ICompletionItems {
-    let items = JSONExt.deepCopy(this._completionItems.items);
+    let items = JSONExt.deepCopy(this._completionItems);
     let results: CompletionHandler.ICompletionItem[] = [];
     for (let item of items) {
       // See if label matches query string
@@ -411,7 +411,7 @@ export class CompleterModel implements Completer.IModel {
         results.push(item);
       }
     }
-    return { items: results };
+    return results;
   }
 
   /**
@@ -447,7 +447,7 @@ export class CompleterModel implements Completer.IModel {
   private _reset(): void {
     this._current = null;
     this._cursor = null;
-    this._completionItems = { items: [] };
+    this._completionItems = [];
     this._options = [];
     this._original = null;
     this._query = '';
@@ -459,7 +459,7 @@ export class CompleterModel implements Completer.IModel {
   private _current: Completer.ITextState | null = null;
   private _cursor: Completer.ICursorSpan | null = null;
   private _isDisposed = false;
-  private _completionItems: CompletionHandler.ICompletionItems = { items: [] };
+  private _completionItems: CompletionHandler.ICompletionItems = [];
   private _options: string[] = [];
   private _original: Completer.ITextState | null = null;
   private _query = '';
@@ -542,7 +542,7 @@ namespace Private {
    *
    */
   export function findOrderedCompletionItemTypes(
-    items: CompletionHandler.ICompletionItem[]
+    items: CompletionHandler.ICompletionItems
   ): string[] {
     const newTypeSet = new Set<string>();
     items.forEach(item => {

+ 2 - 3
packages/completer/src/widget.ts

@@ -228,8 +228,7 @@ export class Completer extends Widget {
     }
 
     let node: HTMLElement | null = null;
-    let completionItemList =
-      model.completionItems && model.completionItems().items;
+    let completionItemList = model.completionItems && model.completionItems();
     if (completionItemList && completionItemList.length) {
       node = this._createCompletionItemNode(model, completionItemList);
     } else {
@@ -263,7 +262,7 @@ export class Completer extends Widget {
 
   private _createCompletionItemNode(
     model: Completer.IModel,
-    items: CompletionHandler.ICompletionItem[]
+    items: CompletionHandler.ICompletionItems
   ): HTMLElement | null {
     // If there are no items, reset and bail.
     if (!items.length) {

+ 34 - 32
tests/test-completer/src/model.spec.ts

@@ -59,12 +59,10 @@ describe('completer/model', () => {
         };
         model.stateChanged.connect(listener);
         expect(called).to.equal(0);
-        model.setCompletionItems!({ items: [{ label: 'foo' }] });
+        model.setCompletionItems!([{ label: 'foo' }]);
         expect(called).to.equal(1);
-        model.setCompletionItems!({ items: [{ label: 'foo' }] });
-        model.setCompletionItems!({
-          items: [{ label: 'foo' }, { label: 'bar' }]
-        });
+        model.setCompletionItems!([{ label: 'foo' }]);
+        model.setCompletionItems!([{ label: 'foo' }, { label: 'bar' }]);
         expect(called).to.equal(2);
       });
 
@@ -95,18 +93,14 @@ describe('completer/model', () => {
         };
         model.stateChanged.connect(listener);
         expect(called).to.equal(0);
-        model.setCompletionItems!({ items: [{ label: 'foo' }] });
-        model.setCompletionItems!({ items: [{ label: 'foo' }] });
+        model.setCompletionItems!([{ label: 'foo' }]);
+        model.setCompletionItems!([{ label: 'foo' }]);
         expect(called).to.equal(1);
-        model.setCompletionItems!({
-          items: [{ label: 'foo' }, { label: 'bar' }]
-        });
-        model.setCompletionItems!({
-          items: [{ label: 'foo' }, { label: 'bar' }]
-        });
+        model.setCompletionItems!([{ label: 'foo' }, { label: 'bar' }]);
+        model.setCompletionItems!([{ label: 'foo' }, { label: 'bar' }]);
         expect(called).to.equal(2);
-        model.setCompletionItems!({ items: [] });
-        model.setCompletionItems!({ items: [] });
+        model.setCompletionItems!([]);
+        model.setCompletionItems!([]);
         expect(called).to.equal(3);
       });
 
@@ -190,39 +184,47 @@ describe('completer/model', () => {
     describe('#completionItems()', () => {
       it('should default to { items: [] }', () => {
         let model = new CompleterModel();
-        let want: CompletionHandler.ICompletionItems = { items: [] };
+        let want: CompletionHandler.ICompletionItems = [];
         expect(model.completionItems!()).to.deep.equal(want);
       });
 
       it('should return unmarked ICompletionItems if query is blank', () => {
         let model = new CompleterModel();
-        let want: CompletionHandler.ICompletionItems = {
-          items: [{ label: 'foo' }, { label: 'bar' }, { label: 'baz' }]
-        };
-        model.setCompletionItems!({
-          items: [{ label: 'foo' }, { label: 'bar' }, { label: 'baz' }]
-        });
+        let want: CompletionHandler.ICompletionItems = [
+          { label: 'foo' },
+          { label: 'bar' },
+          { label: 'baz' }
+        ];
+        model.setCompletionItems!([
+          { label: 'foo' },
+          { label: 'bar' },
+          { label: 'baz' }
+        ]);
         expect(model.completionItems!()).to.deep.equal(want);
       });
 
       it('should return a marked list of items if query is set', () => {
         let model = new CompleterModel();
-        let want: CompletionHandler.ICompletionItems = {
-          items: [{ label: '<mark>f</mark>oo', insertText: 'foo' }]
-        };
-        model.setCompletionItems!({
-          items: [{ label: 'foo' }, { label: 'bar' }, { label: 'baz' }]
-        });
+        let want: CompletionHandler.ICompletionItems = [
+          { label: '<mark>f</mark>oo', insertText: 'foo' }
+        ];
+        model.setCompletionItems!([
+          { label: 'foo' },
+          { label: 'bar' },
+          { label: 'baz' }
+        ]);
         model.query = 'f';
         expect(model.completionItems!()).to.deep.equal(want);
       });
 
       it('should return { items: [] } if reset', () => {
         let model = new CompleterModel();
-        let want: CompletionHandler.ICompletionItems = { items: [] };
-        model.setCompletionItems!({
-          items: [{ label: 'foo' }, { label: 'bar' }, { label: 'baz' }]
-        });
+        let want: CompletionHandler.ICompletionItems = [];
+        model.setCompletionItems!([
+          { label: 'foo' },
+          { label: 'bar' },
+          { label: 'baz' }
+        ]);
         model.reset();
         expect(model.completionItems!()).to.deep.equal(want);
       });

+ 61 - 68
tests/test-completer/src/widget.spec.ts

@@ -121,9 +121,10 @@ describe('completer/widget', () => {
           model: new CompleterModel(),
           renderer: new CustomRenderer()
         };
-        options.model!.setCompletionItems!({
-          items: [{ label: 'foo' }, { label: 'bar' }]
-        });
+        options.model!.setCompletionItems!([
+          { label: 'foo' },
+          { label: 'bar' }
+        ]);
 
         let widget = new Completer(options);
         expect(widget).to.be.an.instanceof(Completer);
@@ -172,9 +173,10 @@ describe('completer/widget', () => {
           let listener = (sender: any, selected: string) => {
             value = selected;
           };
-          options.model!.setCompletionItems!({
-            items: [{ label: 'foo', insertText: 'bar' }, { label: 'baz' }]
-          });
+          options.model!.setCompletionItems!([
+            { label: 'foo', insertText: 'bar' },
+            { label: 'baz' }
+          ]);
           Widget.attach(anchor, document.body);
 
           let widget = new Completer(options);
@@ -199,9 +201,10 @@ describe('completer/widget', () => {
           let listener = (sender: any, selected: string) => {
             value = selected;
           };
-          options.model!.setCompletionItems!({
-            items: [{ label: 'foo' }, { label: 'baz' }]
-          });
+          options.model!.setCompletionItems!([
+            { label: 'foo' },
+            { label: 'baz' }
+          ]);
           Widget.attach(anchor, document.body);
 
           let widget = new Completer(options);
@@ -301,14 +304,12 @@ describe('completer/widget', () => {
 
         model.original = request;
         model.cursor = { start: 0, end: 1 };
-        model.setCompletionItems!({
-          items: [
-            { label: 'abc' },
-            { label: 'abd' },
-            { label: 'abe' },
-            { label: 'abi' }
-          ]
-        });
+        model.setCompletionItems!([
+          { label: 'abc' },
+          { label: 'abd' },
+          { label: 'abe' },
+          { label: 'abi' }
+        ]);
 
         let widget = new Completer({ model, editor: code.editor });
         widget.hide();
@@ -422,9 +423,7 @@ describe('completer/widget', () => {
           editor: anchor.editor,
           model
         };
-        model.setCompletionItems!({
-          items: [{ label: 'foo' }, { label: 'bar' }]
-        });
+        model.setCompletionItems!([{ label: 'foo' }, { label: 'bar' }]);
         Widget.attach(anchor, document.body);
 
         let widget = new Completer(options);
@@ -432,15 +431,14 @@ describe('completer/widget', () => {
         Widget.attach(widget, document.body);
         MessageLoop.sendMessage(widget, Widget.Msg.UpdateRequest);
         expect(widget.isHidden).to.equal(false);
-        expect(model.completionItems!()).to.deep.equal({
-          items: [{ label: 'foo' }, { label: 'bar' }]
-        });
+        expect(model.completionItems!()).to.deep.equal([
+          { label: 'foo' },
+          { label: 'bar' }
+        ]);
         widget.reset();
         MessageLoop.sendMessage(widget, Widget.Msg.UpdateRequest);
         expect(widget.isHidden).to.equal(true);
-        expect(model.completionItems!()).to.deep.equal({
-          items: []
-        });
+        expect(model.completionItems!()).to.deep.equal([]);
         widget.dispose();
         anchor.dispose();
       });
@@ -495,9 +493,7 @@ describe('completer/widget', () => {
             editor: anchor.editor,
             model
           };
-          model.setCompletionItems!({
-            items: [{ label: 'foo' }, { label: 'bar' }]
-          });
+          model.setCompletionItems!([{ label: 'foo' }, { label: 'bar' }]);
           Widget.attach(anchor, document.body);
 
           let widget = new Completer(options);
@@ -505,15 +501,14 @@ describe('completer/widget', () => {
           Widget.attach(widget, document.body);
           MessageLoop.sendMessage(widget, Widget.Msg.UpdateRequest);
           expect(widget.isHidden).to.equal(false);
-          expect(model.completionItems!()).to.deep.equal({
-            items: [{ label: 'foo' }, { label: 'bar' }]
-          });
+          expect(model.completionItems!()).to.deep.equal([
+            { label: 'foo' },
+            { label: 'bar' }
+          ]);
           simulate(document.body, 'keydown', { keyCode: 70 }); // F
           MessageLoop.sendMessage(widget, Widget.Msg.UpdateRequest);
           expect(widget.isHidden).to.equal(true);
-          expect(model.completionItems!()).to.deep.equal({
-            items: []
-          });
+          expect(model.completionItems!()).to.deep.equal([]);
           widget.dispose();
           anchor.dispose();
         });
@@ -566,9 +561,11 @@ describe('completer/widget', () => {
             editor: anchor.editor,
             model
           };
-          model.setCompletionItems!({
-            items: [{ label: 'foo' }, { label: 'bar' }, { label: 'baz' }]
-          });
+          model.setCompletionItems!([
+            { label: 'foo' },
+            { label: 'bar' },
+            { label: 'baz' }
+          ]);
           Widget.attach(anchor, document.body);
 
           let widget = new Completer(options);
@@ -653,9 +650,11 @@ describe('completer/widget', () => {
             editor: anchor.editor,
             model
           };
-          model.setCompletionItems!({
-            items: [{ label: 'foo' }, { label: 'bar' }, { label: 'baz' }]
-          });
+          model.setCompletionItems!([
+            { label: 'foo' },
+            { label: 'bar' },
+            { label: 'baz' }
+          ]);
           Widget.attach(anchor, document.body);
 
           let widget = new Completer(options);
@@ -740,14 +739,12 @@ describe('completer/widget', () => {
           let listener = (sender: any, selected: string) => {
             value = selected;
           };
-          model.setCompletionItems!({
-            items: [
-              { label: 'fo' },
-              { label: 'foo' },
-              { label: 'foo' },
-              { label: 'fooo' }
-            ]
-          });
+          model.setCompletionItems!([
+            { label: 'fo' },
+            { label: 'foo' },
+            { label: 'foo' },
+            { label: 'fooo' }
+          ]);
           Widget.attach(anchor, document.body);
 
           let widget = new Completer(options);
@@ -817,9 +814,11 @@ describe('completer/widget', () => {
           let listener = (sender: any, selected: string) => {
             value = selected;
           };
-          model.setCompletionItems!({
-            items: [{ label: 'foo' }, { label: 'bar' }, { label: 'baz' }]
-          });
+          model.setCompletionItems!([
+            { label: 'foo' },
+            { label: 'bar' },
+            { label: 'baz' }
+          ]);
           model.query = 'b';
           Widget.attach(anchor, document.body);
 
@@ -876,9 +875,7 @@ describe('completer/widget', () => {
           let listener = (sender: any, selected: string) => {
             value = selected;
           };
-          model.setCompletionItems!({
-            items: [{ label: 'foo' }, { label: 'bar' }]
-          });
+          model.setCompletionItems!([{ label: 'foo' }, { label: 'bar' }]);
           Widget.attach(anchor, document.body);
 
           let widget = new Completer(options);
@@ -930,9 +927,7 @@ describe('completer/widget', () => {
           let listener = (sender: any, selected: string) => {
             value = selected;
           };
-          model.setCompletionItems!({
-            items: [{ label: 'foo' }, { label: 'bar' }]
-          });
+          model.setCompletionItems!([{ label: 'foo' }, { label: 'bar' }]);
           Widget.attach(anchor, document.body);
 
           let widget = new Completer(options);
@@ -983,9 +978,7 @@ describe('completer/widget', () => {
           let listener = (sender: any, selected: string) => {
             // no op
           };
-          model.setCompletionItems!({
-            items: [{ label: 'foo' }, { label: 'bar' }]
-          });
+          model.setCompletionItems!([{ label: 'foo' }, { label: 'bar' }]);
           Widget.attach(anchor, document.body);
 
           let widget = new Completer(options);
@@ -1126,7 +1119,7 @@ describe('completer/widget', () => {
 
         Widget.attach(anchor, document.body);
         model.original = request;
-        model.setCompletionItems!({ items: [{ label: 'foo' }] });
+        model.setCompletionItems!([{ label: 'foo' }]);
 
         let widget = new Completer(options);
         widget.selected.connect(listener);
@@ -1164,9 +1157,7 @@ describe('completer/widget', () => {
 
         Widget.attach(anchor, document.body);
         model.original = request;
-        model.setCompletionItems!({
-          items: [{ label: 'foo', insertText: 'bar' }]
-        });
+        model.setCompletionItems!([{ label: 'foo', insertText: 'bar' }]);
 
         let widget = new Completer(options);
         widget.selected.connect(listener);
@@ -1238,9 +1229,11 @@ describe('completer/widget', () => {
 
         Widget.attach(anchor, document.body);
         model.original = request;
-        model.setCompletionItems!({
-          items: [{ label: 'foo' }, { label: 'bar' }, { label: 'baz' }]
-        });
+        model.setCompletionItems!([
+          { label: 'foo' },
+          { label: 'bar' },
+          { label: 'baz' }
+        ]);
 
         let widget = new Completer(options);
         widget.hide();