fix(language-service): Insert parentheses for method completion (#33860)
This commit leverages the `insertText` field in `ts.CompletionEntry` to return a completion text for class methods that includes parentheses. PR closes https://github.com/angular/vscode-ng-language-service/issues/15 PR Close #33860
This commit is contained in:
		
							parent
							
								
									c60d7563a8
								
							
						
					
					
						commit
						dd944ef73f
					
				| @ -12,222 +12,266 @@ | ||||
|       { | ||||
|         "name": "anchor", | ||||
|         "kind": "method", | ||||
|         "sortText": "anchor" | ||||
|         "sortText": "anchor", | ||||
|         "insertText": "anchor()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "big", | ||||
|         "kind": "method", | ||||
|         "sortText": "big" | ||||
|         "sortText": "big", | ||||
|         "insertText": "big()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "blink", | ||||
|         "kind": "method", | ||||
|         "sortText": "blink" | ||||
|         "sortText": "blink", | ||||
|         "insertText": "blink()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "bold", | ||||
|         "kind": "method", | ||||
|         "sortText": "bold" | ||||
|         "sortText": "bold", | ||||
|         "insertText": "bold()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "charAt", | ||||
|         "kind": "method", | ||||
|         "sortText": "charAt" | ||||
|         "sortText": "charAt", | ||||
|         "insertText": "charAt()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "charCodeAt", | ||||
|         "kind": "method", | ||||
|         "sortText": "charCodeAt" | ||||
|         "sortText": "charCodeAt", | ||||
|         "insertText": "charCodeAt()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "codePointAt", | ||||
|         "kind": "method", | ||||
|         "sortText": "codePointAt" | ||||
|         "sortText": "codePointAt", | ||||
|         "insertText": "codePointAt()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "concat", | ||||
|         "kind": "method", | ||||
|         "sortText": "concat" | ||||
|         "sortText": "concat", | ||||
|         "insertText": "concat()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "endsWith", | ||||
|         "kind": "method", | ||||
|         "sortText": "endsWith" | ||||
|         "sortText": "endsWith", | ||||
|         "insertText": "endsWith()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "fixed", | ||||
|         "kind": "method", | ||||
|         "sortText": "fixed" | ||||
|         "sortText": "fixed", | ||||
|         "insertText": "fixed()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "fontcolor", | ||||
|         "kind": "method", | ||||
|         "sortText": "fontcolor" | ||||
|         "sortText": "fontcolor", | ||||
|         "insertText": "fontcolor()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "fontsize", | ||||
|         "kind": "method", | ||||
|         "sortText": "fontsize" | ||||
|         "sortText": "fontsize", | ||||
|         "insertText": "fontsize()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "includes", | ||||
|         "kind": "method", | ||||
|         "sortText": "includes" | ||||
|         "sortText": "includes", | ||||
|         "insertText": "includes()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "indexOf", | ||||
|         "kind": "method", | ||||
|         "sortText": "indexOf" | ||||
|         "sortText": "indexOf", | ||||
|         "insertText": "indexOf()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "italics", | ||||
|         "kind": "method", | ||||
|         "sortText": "italics" | ||||
|         "sortText": "italics", | ||||
|         "insertText": "italics()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "lastIndexOf", | ||||
|         "kind": "method", | ||||
|         "sortText": "lastIndexOf" | ||||
|         "sortText": "lastIndexOf", | ||||
|         "insertText": "lastIndexOf()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "length", | ||||
|         "kind": "property", | ||||
|         "sortText": "length" | ||||
|         "sortText": "length", | ||||
|         "insertText": "length" | ||||
|       }, | ||||
|       { | ||||
|         "name": "link", | ||||
|         "kind": "method", | ||||
|         "sortText": "link" | ||||
|         "sortText": "link", | ||||
|         "insertText": "link()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "localeCompare", | ||||
|         "kind": "method", | ||||
|         "sortText": "localeCompare" | ||||
|         "sortText": "localeCompare", | ||||
|         "insertText": "localeCompare()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "match", | ||||
|         "kind": "method", | ||||
|         "sortText": "match" | ||||
|         "sortText": "match", | ||||
|         "insertText": "match()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "normalize", | ||||
|         "kind": "method", | ||||
|         "sortText": "normalize" | ||||
|         "sortText": "normalize", | ||||
|         "insertText": "normalize()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "padEnd", | ||||
|         "kind": "method", | ||||
|         "sortText": "padEnd" | ||||
|         "sortText": "padEnd", | ||||
|         "insertText": "padEnd()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "padStart", | ||||
|         "kind": "method", | ||||
|         "sortText": "padStart" | ||||
|         "sortText": "padStart", | ||||
|         "insertText": "padStart()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "repeat", | ||||
|         "kind": "method", | ||||
|         "sortText": "repeat" | ||||
|         "sortText": "repeat", | ||||
|         "insertText": "repeat()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "replace", | ||||
|         "kind": "method", | ||||
|         "sortText": "replace" | ||||
|         "sortText": "replace", | ||||
|         "insertText": "replace()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "search", | ||||
|         "kind": "method", | ||||
|         "sortText": "search" | ||||
|         "sortText": "search", | ||||
|         "insertText": "search()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "slice", | ||||
|         "kind": "method", | ||||
|         "sortText": "slice" | ||||
|         "sortText": "slice", | ||||
|         "insertText": "slice()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "small", | ||||
|         "kind": "method", | ||||
|         "sortText": "small" | ||||
|         "sortText": "small", | ||||
|         "insertText": "small()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "split", | ||||
|         "kind": "method", | ||||
|         "sortText": "split" | ||||
|         "sortText": "split", | ||||
|         "insertText": "split()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "startsWith", | ||||
|         "kind": "method", | ||||
|         "sortText": "startsWith" | ||||
|         "sortText": "startsWith", | ||||
|         "insertText": "startsWith()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "strike", | ||||
|         "kind": "method", | ||||
|         "sortText": "strike" | ||||
|         "sortText": "strike", | ||||
|         "insertText": "strike()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "sub", | ||||
|         "kind": "method", | ||||
|         "sortText": "sub" | ||||
|         "sortText": "sub", | ||||
|         "insertText": "sub()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "substr", | ||||
|         "kind": "method", | ||||
|         "sortText": "substr" | ||||
|         "sortText": "substr", | ||||
|         "insertText": "substr()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "substring", | ||||
|         "kind": "method", | ||||
|         "sortText": "substring" | ||||
|         "sortText": "substring", | ||||
|         "insertText": "substring()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "sup", | ||||
|         "kind": "method", | ||||
|         "sortText": "sup" | ||||
|         "sortText": "sup", | ||||
|         "insertText": "sup()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "toLocaleLowerCase", | ||||
|         "kind": "method", | ||||
|         "sortText": "toLocaleLowerCase" | ||||
|         "sortText": "toLocaleLowerCase", | ||||
|         "insertText": "toLocaleLowerCase()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "toLocaleUpperCase", | ||||
|         "kind": "method", | ||||
|         "sortText": "toLocaleUpperCase" | ||||
|         "sortText": "toLocaleUpperCase", | ||||
|         "insertText": "toLocaleUpperCase()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "toLowerCase", | ||||
|         "kind": "method", | ||||
|         "sortText": "toLowerCase" | ||||
|         "sortText": "toLowerCase", | ||||
|         "insertText": "toLowerCase()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "toString", | ||||
|         "kind": "method", | ||||
|         "sortText": "toString" | ||||
|         "sortText": "toString", | ||||
|         "insertText": "toString()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "toUpperCase", | ||||
|         "kind": "method", | ||||
|         "sortText": "toUpperCase" | ||||
|         "sortText": "toUpperCase", | ||||
|         "insertText": "toUpperCase()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "trim", | ||||
|         "kind": "method", | ||||
|         "sortText": "trim" | ||||
|         "sortText": "trim", | ||||
|         "insertText": "trim()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "trimLeft", | ||||
|         "kind": "method", | ||||
|         "sortText": "trimLeft" | ||||
|         "sortText": "trimLeft", | ||||
|         "insertText": "trimLeft()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "trimRight", | ||||
|         "kind": "method", | ||||
|         "sortText": "trimRight" | ||||
|         "sortText": "trimRight", | ||||
|         "insertText": "trimRight()" | ||||
|       }, | ||||
|       { | ||||
|         "name": "valueOf", | ||||
|         "kind": "method", | ||||
|         "sortText": "valueOf" | ||||
|         "sortText": "valueOf", | ||||
|         "insertText": "valueOf()" | ||||
|       } | ||||
|     ] | ||||
|   } | ||||
|  | ||||
| @ -442,6 +442,7 @@ class ExpressionVisitor extends NullTemplateVisitor { | ||||
|         name: s.name, | ||||
|         kind: s.kind as ng.CompletionKind, | ||||
|         sortText: s.name, | ||||
|         insertText: s.callable ? `${s.name}()` : s.name, | ||||
|       }); | ||||
|     } | ||||
|   } | ||||
|  | ||||
| @ -213,6 +213,18 @@ describe('completions', () => { | ||||
|     expectContain(completions, CompletionKind.METHOD, ['myClick']); | ||||
|   }); | ||||
| 
 | ||||
|   it('for methods should include parentheses', () => { | ||||
|     mockHost.override(TEST_TEMPLATE, `<div (click)="~{cursor}"></div>`); | ||||
|     const marker = mockHost.getLocationMarkerFor(TEST_TEMPLATE, 'cursor'); | ||||
|     const completions = ngLS.getCompletionsAt(TEST_TEMPLATE, marker.start); | ||||
|     expect(completions).toBeDefined(); | ||||
|     expect(completions !.entries).toContain(jasmine.objectContaining({ | ||||
|       name: 'myClick', | ||||
|       kind: CompletionKind.METHOD as any, | ||||
|       insertText: 'myClick()', | ||||
|     })); | ||||
|   }); | ||||
| 
 | ||||
|   describe('in external template', () => { | ||||
|     it('should be able to get entity completions in external template', () => { | ||||
|       const marker = mockHost.getLocationMarkerFor(TEST_TEMPLATE, 'entity-amp'); | ||||
|  | ||||
| @ -128,6 +128,7 @@ describe('plugin', () => { | ||||
|         kind: CompletionKind.PROPERTY as any, | ||||
|         sortText: 'children', | ||||
|         replacementSpan: {start: 182, length: 8}, | ||||
|         insertText: 'children', | ||||
|       }, | ||||
|     ]); | ||||
|   }); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user