我一直在寻找关于Roslyn API的所有可能的文档,但是找不到这个简单问题的答案。
我知道CodeFix从CodeFixProvider继承并提供代码修复。 我也知道,重构继承自CodeRefactoringProvider并提供了重构。 我发现的一个区别是,由于某些原因,您不能仅通过VSIX使用Nuget重新分配重构,而可以同时使用两者重新分配CodeFix。
但是什么是代码修复,什么是重构?一个人能做什么而另一个人不能做?
答案 0 :(得分:1)
代码修复程序用于在代码中识别出错误或错误的地方,并可以推断出如何更正。
重构是对代码的更改,通常不会或多或少会使正确。提供多种重构将在各种形式之间转换代码的情况并不少见,通常包括回到有人接受任何重构之前的形式。相比之下,在极端情况下很少会找到另一个Code Fix(在同一包中)将代码转换成另一个Code Fix可以应用的形式。
答案 1 :(得分:0)
除了前面的答案外,代码修复和代码重构之间还有另一个功能上的区别。您可以通过覆盖 GetFixAllProvider
轻松地为解决方案范围的代码修补添加支持:public class PusherService {
private static final String CHANNEL = "private-User." + accountId;
private static PusherService instance;
private Pusher pusher;
public static synchronized PusherService getInstance() {
if (instance == null) {
instance = new PusherService();
}
return instance;
}
private PusherService() {
pusher = initiatePusher();
}
private static Pusher initiatePusher() {
HttpAuthorizer httpAuthorizer = new HttpAuthorizer(BuildConfig.PUSHER_AUTH_URL);
Map<String, String> headers = new HashMap<>();
headers.put("Authorization", Session.getToken());
headers.put("Accept", "application/json");
headers.put("Content-Type", "application/json");
httpAuthorizer.setHeaders(headers);
PusherOptions options = new PusherOptions()
.setCluster(BuildConfig.PUSHER_CLUSTER)
.setEncrypted(true)
.setAuthorizer(httpAuthorizer);
Pusher pusher = new Pusher(BuildConfig.PUSHER_KEY, options);
pusher.connect(new ConnectionEventListener() {
@Override
public void onConnectionStateChange(ConnectionStateChange connectionStateChange) {
Log.i("Pusher", "Connection State Change: " + connectionStateChange.getCurrentState().name());
}
@Override
public void onError(String s, String s1, Exception e) {
Log.i("Pusher", String.format("Connection Error: [%s], exception: [%s]", s, e));
}
});
return pusher;
}
public PrivateChannel getChannel() {
PrivateChannel privateChannel = pusher.getPrivateChannel(CHANNEL);
if (privateChannel == null) {
privateChannel = pusher.subscribePrivate(CHANNEL, new PrivateChannelEventListener() {
@Override
public void onAuthenticationFailure(String s, Exception e) {
// Authentication failed
Log.i("Pusher", String.format("Authentication failure due to [%s], exception: [%s]", s, e));
}
@Override
public void onSubscriptionSucceeded(String s) {
Log.i("Pusher", "Private connection succeeded");
}
@Override
public void onEvent(String channel, String event, String data) {
Log.i("Pusher", data);
}
});
}
return privateChannel;
}
}
但是据我所知,没有这么简单的方法来提供大规模重构