Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(62)

Unified Diff: pkg/analysis_server/lib/src/edit/edit_domain.dart

Issue 1255413003: Implementation of 'edit.organizeDirectives'. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/analysis_server/lib/src/constants.dart ('k') | pkg/analysis_server/lib/src/protocol.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analysis_server/lib/src/edit/edit_domain.dart
diff --git a/pkg/analysis_server/lib/src/edit/edit_domain.dart b/pkg/analysis_server/lib/src/edit/edit_domain.dart
index ee26dd8b8dc33af59c44b9d9a7400392fbe8ef56..fd5ee0c50ea07135807960172a202c20e9e1436d 100644
--- a/pkg/analysis_server/lib/src/edit/edit_domain.dart
+++ b/pkg/analysis_server/lib/src/edit/edit_domain.dart
@@ -14,6 +14,7 @@ import 'package:analysis_server/src/constants.dart';
import 'package:analysis_server/src/protocol_server.dart' hide Element;
import 'package:analysis_server/src/services/correction/assist.dart';
import 'package:analysis_server/src/services/correction/fix.dart';
+import 'package:analysis_server/src/services/correction/organize_directives.dart';
import 'package:analysis_server/src/services/correction/sort_members.dart';
import 'package:analysis_server/src/services/correction/status.dart';
import 'package:analysis_server/src/services/refactoring/refactoring.dart';
@@ -190,6 +191,8 @@ class EditDomainHandler implements RequestHandler {
return getFixes(request);
} else if (requestName == EDIT_GET_REFACTORING) {
return _getRefactoring(request);
+ } else if (requestName == EDIT_ORGANIZE_DIRECTIVES) {
+ return organizeDirectives(request);
} else if (requestName == EDIT_SORT_MEMBERS) {
return sortMembers(request);
}
@@ -199,6 +202,38 @@ class EditDomainHandler implements RequestHandler {
return null;
}
+ Response organizeDirectives(Request request) {
+ var params = new EditOrganizeDirectivesParams.fromRequest(request);
+ // prepare file
+ String file = params.file;
+ if (!engine.AnalysisEngine.isDartFileName(file)) {
+ return new Response.fileNotAnalyzed(request, file);
+ }
+ // prepare resolved units
+ List<CompilationUnit> units = server.getResolvedCompilationUnits(file);
+ if (units.isEmpty) {
+ return new Response.fileNotAnalyzed(request, file);
+ }
+ // prepare context
+ CompilationUnit unit = units.first;
+ engine.AnalysisContext context = unit.element.context;
+ Source source = unit.element.source;
+ List<engine.AnalysisError> errors = context.computeErrors(source);
+ // check if there are scan/parse errors in the file
+ int numScanParseErrors = _getNumberOfScanParseErrors(errors);
+ if (numScanParseErrors != 0) {
+ return new Response.organizeDirectivesError(
+ request, 'File has $numScanParseErrors scan/parse errors.');
+ }
+ // do organize
+ int fileStamp = context.getModificationStamp(source);
+ String code = context.getContents(source).data;
+ DirectiveOrganizer sorter = new DirectiveOrganizer(code, unit, errors);
+ List<SourceEdit> edits = sorter.organize();
+ SourceFileEdit fileEdit = new SourceFileEdit(file, fileStamp, edits: edits);
+ return new EditOrganizeDirectivesResult(fileEdit).toResponse(request.id);
+ }
+
Response sortMembers(Request request) {
var params = new EditSortMembersParams.fromRequest(request);
// prepare file
@@ -215,15 +250,9 @@ class EditDomainHandler implements RequestHandler {
CompilationUnit unit = units.first;
engine.AnalysisContext context = unit.element.context;
Source source = unit.element.source;
- // check if there are no scan/parse errors in the file
+ // check if there are scan/parse errors in the file
engine.AnalysisErrorInfo errors = context.getErrors(source);
- int numScanParseErrors = 0;
- errors.errors.forEach((engine.AnalysisError error) {
- if (error.errorCode is engine.ScannerErrorCode ||
- error.errorCode is engine.ParserErrorCode) {
- numScanParseErrors++;
- }
- });
+ int numScanParseErrors = _getNumberOfScanParseErrors(errors.errors);
if (numScanParseErrors != 0) {
return new Response.sortMembersParseErrors(request, numScanParseErrors);
}
@@ -304,6 +333,17 @@ class EditDomainHandler implements RequestHandler {
void _newRefactoringManager() {
refactoringManager = new _RefactoringManager(server, searchEngine);
}
+
+ static int _getNumberOfScanParseErrors(List<engine.AnalysisError> errors) {
+ int numScanParseErrors = 0;
+ for (engine.AnalysisError error in errors) {
+ if (error.errorCode is engine.ScannerErrorCode ||
+ error.errorCode is engine.ParserErrorCode) {
+ numScanParseErrors++;
+ }
+ }
+ return numScanParseErrors;
+ }
}
/**
« no previous file with comments | « pkg/analysis_server/lib/src/constants.dart ('k') | pkg/analysis_server/lib/src/protocol.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698