ReSharper 2018.2 Help

Complete Statement

ReSharper | Edit | Complete Statement

This command inserts necessary syntax elements (parentheses, braces, semicolons etc.) and gets you in position where you can start typing the next statement.

To invoke Complete Statement

  1. Type the core of a statement (see scenarios below for examples).

  2. Press Ctrl+Shift+Enter or choose ReSharper | Edit | Complete Statement from the main menu. Alternatively, you can press Ctrl+Shift+A, start typing the command name in the pop-up, and then choose it there.

The command is helpful in numerous scenarios, including auto-closing parentheses, adding semicolons, completing if, while and for statements, and more.

For example, whenever you declare a new method, complete statement comes handy after specifying method parameters:

public void Foo(string input

At this point, to start writing the method body, you normally have to:

  • Insert a missing parenthesis.

  • Press Enter.

  • Insert an opening brace.

  • Press Enter once again.

With ReSharper, you only have to press Ctrl+Shift+Enter, and it will automatically insert a closing parenthesis, as well as both braces, and put the caret right where you can proceed with writing the method body:

public void Foo(string input) { // the caret is here }

In similar ways, Complete Statement works with the following language constructs:

  • Types and type members: class, interface, struct, enum, delegate, field, event, and method declarations.

  • Statements: if, while, do, switch, using, lock, continue, break, and return statements; case and default clauses; conversion of single-line statements to block statements.

  • Expressions: invocation, element access, string/char literals; object, member, and collection item initializers; expressions that create anonymous types and implicitly typed arrays.

Below, you can find a number of examples of applying the complete statement command in different contexts.

Use case

Before Complete Statement

After Complete Statement

Class declaration

public class Foo/*caret*/

public class Foo { /*caret*/ }

Delegate declaration

delegate void ChangeHandler(object sender/*caret*/

internal delegate void ChangeHandler(object sender); /*caret*/

Nested method invocation


myVar.DoSomething(foo.Bar(value)); /*caret*/

if statement

if(myVar != null/*caret*/

if(myVar != null) { /*caret*/ }

case clause

switch (position) { case Position.Last/*caret*/ }

switch (position) { case Position.Last: /*caret*/ }

Conversion of a single-line statement into block (case A)

if(myVar != null) position = Position.Last;/*caret*/

if(myVar != null) { position = Position.Last; /*caret*/ }

Conversion of a single-line statement into block (case B)

if(myVar != null) /*caret*/position = Position.Last;

if(myVar != null) { /*caret*/ position = Position.Last; }

Element access expression

var myValues = new Value[10/*caret*/

var myValues = new Value[10]; /*caret*/

This feature is supported in the following languages and technologies:

Language: C#

Language: VB.NET

Language: C++

Language: HTML

Language: ASP.NET

Language: Razor

Language: JavaScript

Language: TypeScript

Language: CSS

Language: XML

Language: XAML

Language: Resx

Language: Build Scripts

Language: Protobuf

Language: JSON

Feature is available

Feature is available

Feature is not available

Feature is not available

Feature is not available

Feature is not available

Feature is not available

Feature is not available

Feature is not available

Feature is not available

Feature is not available

Feature is not available

Feature is not available

Feature is not available

Feature is not available

The instructions and examples given here address the use of the feature in C#. For details specific to other languages, see corresponding topics in the ReSharper by Language section.

Last modified: 21 December 2018

See Also