AST

文档:https://www.dartdocs.org/documentation/analyzer_experimental/0.8.0/analyzer/parseCompilationUnit.html

一些聪明的程序员提供了一个优秀的示例:https://github.com/mythz/dart-samples/blob/master/frog/leg/scanner/keyword.dart

RecursiveASTVisitor接口:https://www.dartdocs.org/documentation/analyzer_experimental/0.8.0/analyzer/RecursiveASTVisitor-class.html

现在,示例代码已移至下面的wiki.

DART分析服务器或DART服务

IDE或编辑器检测错误所依赖的包.

GIT:https://github.com/dart-lang/dart-services

安装:

运行服务器:

  • cd dart服务
  • Dart./bin/services.dart--端口8082

客户端代码:

import "dart:convert";
import "dart:io";


const String url = "localhost";
const String path = r"api/dartservices/v1/analyze";
String src = """
main(){
 print('hi');
}
""";

void main() {
  analyse();
}

analyse() async {
  Map m = {'source': src};
  var client = new HttpClient();
  String data = JSON.encode(m);
  HttpClientRequest request = await client.post (
      url, 8082, path);
  request.headers.contentType = ContentType.JSON;
  request.write(data);
  HttpClientResponse r = await request.close();
  r.transform(UTF8.decoder).listen((d){
    print(d);
  });
  client.close(force: false);
}

该服务器为/lib/src/common_server中的CommonServer类提供服务.dart作为api."api/dartservices/v1/analyze"的帖子调用类中的以下方法.

  @ApiMethod(
      method: 'POST',
      path: 'analyze',
      description:
          'Analyze the given Dart source code and return any resulting '
          'analysis errors or warnings.')
  Future<AnalysisResults> analyze(SourceRequest request) {
    return _analyze(request.source);
  }

将Analyzer用作本地对象.

import 'src/analyzer.dart';
import 'src/api_classes.dart';
import 'dart:developer';
String src = """
main(){
  a.print('hi');
}
""";
main() async {
  String sdkPath = r'C:\tools\dart-sdk';
  var a = new Analyzer(sdkPath);
  var m = {'main.dart':src};
  debugger();
  AnalysisResults r = await a.analyzeMulti(m);
  print(r.issues);
  print(r.resolvedImports);
}

Analyzer相当复杂,并且笼罩在微任务中,调试器帮不了什么忙.

推荐答案

Analyzer代码仍在进行中.我猜从早期Java源代码自动生成的Dart代码的返工还没有完成.他们正在致力于改进公共API,然后他们也将致力于开发更好的文档.

我自己没有仔细看一下,但我认为这些软件包也应该利用这一点

Dart相关问答推荐

异类列表中函数类型不变性的解决方法

为什么使用三元条件运算符会产生return_of_invalid_type错误?

NetworkImage 正在缓存旧图像

flutter: 使用提供程序时,状态在热重载时丢失

如何实现 Iterable

从列表中删除项目后更新 UI

如何等待forEach完成异步回调?

如何垂直对齐行元素?

如何正确管理 Flutter 应用中的全局 textScaleFactor?

如何在dart中四舍五入?

Flutter 中 ListView.builder 中的反向列表

Dart 中的动态类方法调用

如何缩小从 Dart 编辑器编译的 JavaScript 代码?

一个集合如何确定两个对象在dart中相等?

Dart - 如何在每次测试之后或之前运行函数?

Flutter/Dart:按第一次出现拆分字符串

使用 Dart 解析 URI 以提取查询参数

`FutureOr` 的目的是什么?

你如何在 Dart 中对异常进行单元测试?

如何在 Dart 中生成唯一 id