dotnet / dotnet/roslynator

Refactor Request: Promote local to field

Open
#314 1 comment 0 reactions 1 assignee Claimed by @josefpihrt View on GitHub
Area-Refactorings Feature Request
Dominant language
C#
Stars
3.5k
Forks
294
Avg merge
2h 30m
Merged PRs (30d)
4

Description

This request has something to do with #268 to fix the problem before converting a lambda expression to a method.

Given the following code:
````C#
void HookEvents() {
var tagger = GetTagger();
textView.Closed += (s, args) => {
tagger.Dispose();
};
}
````
After refactoring, it produces:
````C#
ITagger _tagger;

void HookEvents() {
_tagger = GetTagger();
textView.Closed += (s, args) => {
_tagger.Dispose();
};
}
````

If the containing method is a static one, the promoted field should be static field.

If the member is a generic instance that given the type parameter from a generic method, the promoted field can be converted to object. (If it is difficult to do so, do not support promoting generic locals)

````C#
void HookEvents() {
ITagger tagger = GetTagger();
textView.Closed += (s, args) => {
_tagger.Dispose();
};}
````

After refactoring:
````C#
object _tagger;
void HookEvents() {
_tagger = GetTagger();
textView.Closed += (s, args) => {
((ITagger)_tagger).Dispose();
};}
````

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.