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

Side by Side Diff: pkg/analyzer/lib/src/generated/parser.dart

Issue 2302003003: [linter] Issue 295. Skip comment tokens with GitHub code blocks (in ```). (Closed)
Patch Set: Created 4 years, 3 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 unified diff | Download patch
« no previous file with comments | « no previous file | pkg/analyzer/test/generated/parser_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library analyzer.src.generated.parser; 5 library analyzer.src.generated.parser;
6 6
7 import 'dart:collection'; 7 import 'dart:collection';
8 import "dart:math" as math; 8 import "dart:math" as math;
9 9
10 import 'package:analyzer/dart/ast/ast.dart'; 10 import 'package:analyzer/dart/ast/ast.dart';
(...skipping 5160 matching lines...) Expand 10 before | Expand all | Expand 10 after
5171 * 5171 *
5172 * commentReference ::= 5172 * commentReference ::=
5173 * '[' 'new'? qualified ']' libraryReference? 5173 * '[' 'new'? qualified ']' libraryReference?
5174 * 5174 *
5175 * libraryReference ::= 5175 * libraryReference ::=
5176 * '(' stringLiteral ')' 5176 * '(' stringLiteral ')'
5177 */ 5177 */
5178 List<CommentReference> _parseCommentReferences( 5178 List<CommentReference> _parseCommentReferences(
5179 List<DocumentationCommentToken> tokens) { 5179 List<DocumentationCommentToken> tokens) {
5180 List<CommentReference> references = <CommentReference>[]; 5180 List<CommentReference> references = <CommentReference>[];
5181 bool isInGitHubCodeBlock = false;
5181 for (DocumentationCommentToken token in tokens) { 5182 for (DocumentationCommentToken token in tokens) {
5182 String comment = token.lexeme; 5183 String comment = token.lexeme;
5183 comment = _removeCodeBlocksGitHub(comment); 5184 // Skip GitHub code blocks.
5185 // https://help.github.com/articles/creating-and-highlighting-code-blocks/
5186 if (tokens.length != 1) {
5187 if (comment.indexOf('```') != -1) {
Brian Wilkerson 2016/09/01 21:06:58 Do we care about the case where the tripled-quote
scheglov 2016/09/01 21:14:22 It seems even less used case for me. So, no, not n
5188 isInGitHubCodeBlock = !isInGitHubCodeBlock;
5189 }
5190 if (isInGitHubCodeBlock) {
5191 continue;
5192 }
5193 }
5194 // Remove GitHub include code.
5195 comment = _removeGitHubInlineCode(comment);
5196 // Find references.
5184 int length = comment.length; 5197 int length = comment.length;
5185 List<List<int>> codeBlockRanges = _getCodeBlockRanges(comment); 5198 List<List<int>> codeBlockRanges = _getCodeBlockRanges(comment);
5186 int leftIndex = comment.indexOf('['); 5199 int leftIndex = comment.indexOf('[');
5187 while (leftIndex >= 0 && leftIndex + 1 < length) { 5200 while (leftIndex >= 0 && leftIndex + 1 < length) {
5188 List<int> range = _findRange(codeBlockRanges, leftIndex); 5201 List<int> range = _findRange(codeBlockRanges, leftIndex);
5189 if (range == null) { 5202 if (range == null) {
5190 int nameOffset = token.offset + leftIndex + 1; 5203 int nameOffset = token.offset + leftIndex + 1;
5191 int rightIndex = JavaString.indexOf(comment, ']', leftIndex); 5204 int rightIndex = JavaString.indexOf(comment, ']', leftIndex);
5192 if (rightIndex >= 0) { 5205 if (rightIndex >= 0) {
5193 int firstChar = comment.codeUnitAt(leftIndex + 1); 5206 int firstChar = comment.codeUnitAt(leftIndex + 1);
(...skipping 3682 matching lines...) Expand 10 before | Expand all | Expand 10 after
8876 * is the current token, `1` is the next token, etc. 8889 * is the current token, `1` is the next token, etc.
8877 */ 8890 */
8878 Token _peekAt(int distance) { 8891 Token _peekAt(int distance) {
8879 Token token = _currentToken; 8892 Token token = _currentToken;
8880 for (int i = 0; i < distance; i++) { 8893 for (int i = 0; i < distance; i++) {
8881 token = token.next; 8894 token = token.next;
8882 } 8895 }
8883 return token; 8896 return token;
8884 } 8897 }
8885 8898
8886 String _removeCodeBlocksGitHub(String comment) { 8899 String _removeGitHubInlineCode(String comment) {
8887 int index = 0; 8900 int index = 0;
8888 while (true) { 8901 while (true) {
8889 int beginIndex = comment.indexOf('`', index); 8902 int beginIndex = comment.indexOf('`', index);
8890 if (beginIndex == -1) { 8903 if (beginIndex == -1) {
8891 break; 8904 break;
8892 } 8905 }
8893 int endIndex = comment.indexOf('`', beginIndex + 1); 8906 int endIndex = comment.indexOf('`', beginIndex + 1);
8894 if (endIndex == -1) { 8907 if (endIndex == -1) {
8895 break; 8908 break;
8896 } 8909 }
(...skipping 1633 matching lines...) Expand 10 before | Expand all | Expand 10 after
10530 */ 10543 */
10531 const ParserErrorCode(String name, String message, [String correction]) 10544 const ParserErrorCode(String name, String message, [String correction])
10532 : super(name, message, correction); 10545 : super(name, message, correction);
10533 10546
10534 @override 10547 @override
10535 ErrorSeverity get errorSeverity => ErrorSeverity.ERROR; 10548 ErrorSeverity get errorSeverity => ErrorSeverity.ERROR;
10536 10549
10537 @override 10550 @override
10538 ErrorType get type => ErrorType.SYNTACTIC_ERROR; 10551 ErrorType get type => ErrorType.SYNTACTIC_ERROR;
10539 } 10552 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analyzer/test/generated/parser_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698