All Projects → rodydavis → flutter_ast

rodydavis / flutter_ast

Licence: MIT license
Flutter and Dart AST Analyzer/Parser

Programming Languages

dart
5743 projects
shell
77523 projects
Mustache
554 projects
Dockerfile
14818 projects

Projects that are alternatives of or similar to flutter ast

ast-viewer
🕺TypeScript AST Viewer
Stars: ✭ 39 (-55.17%)
Mutual labels:  ast
sonarlint4netbeans
SonarLint integration for Apache Netbeans
Stars: ✭ 23 (-73.56%)
Mutual labels:  analyzer
c-compiler
A compiler that accepts any valid program written in C. It is made using Lex and Yacc. Returns a symbol table, parse tree, annotated syntax tree and intermediate code.
Stars: ✭ 37 (-57.47%)
Mutual labels:  ast
gogoAST
The simplest tool to parse/transform/generate code on ast
Stars: ✭ 29 (-66.67%)
Mutual labels:  ast
lindera
A morphological analysis library.
Stars: ✭ 226 (+159.77%)
Mutual labels:  analyzer
Python3Generator
A toolkit to generate Python 3 source code from Pharo.
Stars: ✭ 25 (-71.26%)
Mutual labels:  ast
scalajson
ScalaJSON - JSON for Scala, currently contains minimal AST
Stars: ✭ 55 (-36.78%)
Mutual labels:  ast
ApkCompare
A tool to compare 2 version APKs to find out files change. 比较两个版本的APK以找出文件大小变化的工具
Stars: ✭ 68 (-21.84%)
Mutual labels:  analyzer
windicss-analysis
🔍 A visual analyzer for Windi CSS
Stars: ✭ 120 (+37.93%)
Mutual labels:  analyzer
freAST
Fast, simple Free Monads using ScalaMeta macro annotations. Port of Freasy-Monad.
Stars: ✭ 14 (-83.91%)
Mutual labels:  ast
gram-js
Gram in javascript.
Stars: ✭ 21 (-75.86%)
Mutual labels:  ast
klara
Automatic test case generation for python and static analysis library
Stars: ✭ 250 (+187.36%)
Mutual labels:  ast
spring-startup-analysis
Simple module to analyse bean construction in Java Spring
Stars: ✭ 76 (-12.64%)
Mutual labels:  analyzer
ReactPropTypes-Plugin
A Jetbrains Plugin for react PropTypes
Stars: ✭ 62 (-28.74%)
Mutual labels:  ast
asmdot
[Unstable] Fast, zero-copy and lightweight (Arm | Mips | x86) assembler in (C | C++ | C# | Go | Haskell | Javascript | Nim | OCaml | Python | Rust).
Stars: ✭ 23 (-73.56%)
Mutual labels:  ast
fastobo-py
Faultless AST for Open Biomedical Ontologies in Python.
Stars: ✭ 21 (-75.86%)
Mutual labels:  ast
churnalizer
Analyze your Ruby app for Churn vs Complexity
Stars: ✭ 17 (-80.46%)
Mutual labels:  analyzer
code summarization public
source code for 'Improving automatic source code summarization via deep reinforcement learning'
Stars: ✭ 71 (-18.39%)
Mutual labels:  ast
iDeviceLogAnalyzer-public
A quick and easy panic log extraction and analysis tool for iDevices.
Stars: ✭ 105 (+20.69%)
Mutual labels:  analyzer
include gardener
This is a small C++ based commandline-tool which analyzes include statements in C/C++ code.
Stars: ✭ 66 (-24.14%)
Mutual labels:  analyzer

Dart/Flutter AST Generator

Parse a Dart or Flutter file and return a opinionated AST for use to create a dynamic widget or runtime. Works in a browser or native at runtime.

You can pass an input as a file or directory:

$ dart ./bin/generator.dart -p samples/example.dart

$ dart ./bin/generator.dart -p samples    

Or you can call the method directly:

final DartResult result = parseSource("Dart Code Here");
print(result.toJson());

Features

  • Classes
  • Enums
  • Logic Tree
  • Flutter Support
  • Top Level Methods and Variables
  • Methods
  • Fields
  • Constructors

Example

Here is a sample input:

import 'package:flutter/material.dart';

enum MyEnum { one, type, three }

const int kGlobalField = 1;

/// This is a doc comment
class MyScreen extends StatelessWidget {
  const MyScreen(this.position, {Key key, this.myField = false, this.mySecondField = 1, 
  this.numField = 3,
  this.mapField = const {},
  this.dateField,
  this.listField  = const [],
  }) : super(key: key);

  const MyScreen.alt(this.position, {Key key, this.mySecondField = double.infinity,
  this.numField = 3,
  this.mapField = const {},
  this.listField  = const [],
  this.dateField,
  }) :  this.myField = true,  super(key: key);

  static const String routeName = '/my_route';

  final bool myField;
  final double mySecondField;
  final num numField;
  final Map mapField;
  final DateTime dateField;
  final List listField;

  final int position;

  // This is a normal comment
  Map<String, dynamic> toJson() {
    return {};
  }

  @override
  Widget build(BuildContext context) {
    if (myField) {
      return mySecondField == 1 ? Container(color: Colors.red) : Container(color: Colors.blue);
    }
    return Container(
      color: Colors.red,
      width: 20,
      child: Center(
        child: Builder((context) {
          return Text('Hello World');
        }),
      ),
    );
  }
}

void myGlobalMethod() {

}

// Ignore this simple comment
class Simple {
  String value;
}

And that would produce this output:

{
  "file": {
    "name": null,
    "imports": [
      "package:flutter/material.dart"
    ],
    "classes": [
      {
        "name": "MyScreen",
        "comments": [
          "This is a doc comment"
        ],
        "fields": [
          {
            "name": "routeName",
            "type": "String"
          },
          {
            "name": "myField",
            "type": "bool"
          },
          {
            "name": "mySecondField",
            "type": "double"
          },
          {
            "name": "numField",
            "type": "num"
          },
          {
            "name": "mapField",
            "type": "Map"
          },
          {
            "name": "dateField",
            "type": "DateTime"
          },
          {
            "name": "listField",
            "type": "List"
          },
          {
            "name": "position",
            "type": "int"
          }
        ],
        "constructors": [
          {
            "name": "MyScreen",
            "properties": [
              {
                "value": null,
                "name": "key",
                "type": "Key",
                "isConst": false,
                "isFinal": false,
                "isNamed": true,
                "isOptional": true,
                "isPositional": false,
                "isRequired": false,
                "isRequiredPositional": false,
                "isSynthetic": false,
                "isRequiredNamed": false,
                "isOptionalNamed": true
              },
              {
                "value": "false",
                "name": "myField",
                "type": "bool",
                "isConst": false,
                "isFinal": false,
                "isNamed": true,
                "isOptional": true,
                "isPositional": false,
                "isRequired": false,
                "isRequiredPositional": false,
                "isSynthetic": false,
                "isRequiredNamed": false,
                "isOptionalNamed": true
              },
              {
                "value": "1",
                "name": "mySecondField",
                "type": "double",
                "isConst": false,
                "isFinal": false,
                "isNamed": true,
                "isOptional": true,
                "isPositional": false,
                "isRequired": false,
                "isRequiredPositional": false,
                "isSynthetic": false,
                "isRequiredNamed": false,
                "isOptionalNamed": true
              },
              {
                "value": "3",
                "name": "numField",
                "type": "num",
                "isConst": false,
                "isFinal": false,
                "isNamed": true,
                "isOptional": true,
                "isPositional": false,
                "isRequired": false,
                "isRequiredPositional": false,
                "isSynthetic": false,
                "isRequiredNamed": false,
                "isOptionalNamed": true
              },
              {
                "value": "const {}",
                "name": "mapField",
                "type": "Map",
                "isConst": false,
                "isFinal": false,
                "isNamed": true,
                "isOptional": true,
                "isPositional": false,
                "isRequired": false,
                "isRequiredPositional": false,
                "isSynthetic": false,
                "isRequiredNamed": false,
                "isOptionalNamed": true
              },
              {
                "value": null,
                "name": "dateField",
                "type": "DateTime",
                "isConst": false,
                "isFinal": false,
                "isNamed": true,
                "isOptional": true,
                "isPositional": false,
                "isRequired": false,
                "isRequiredPositional": false,
                "isSynthetic": false,
                "isRequiredNamed": false,
                "isOptionalNamed": true
              },
              {
                "value": "const []",
                "name": "listField",
                "type": "List",
                "isConst": false,
                "isFinal": false,
                "isNamed": true,
                "isOptional": true,
                "isPositional": false,
                "isRequired": false,
                "isRequiredPositional": false,
                "isSynthetic": false,
                "isRequiredNamed": false,
                "isOptionalNamed": true
              }
            ]
          },
          {
            "name": "alt",
            "properties": [
              {
                "value": null,
                "name": "key",
                "type": "Key",
                "isConst": false,
                "isFinal": false,
                "isNamed": true,
                "isOptional": true,
                "isPositional": false,
                "isRequired": false,
                "isRequiredPositional": false,
                "isSynthetic": false,
                "isRequiredNamed": false,
                "isOptionalNamed": true
              },
              {
                "value": null,
                "name": "mySecondField",
                "type": "double",
                "isConst": false,
                "isFinal": false,
                "isNamed": true,
                "isOptional": true,
                "isPositional": false,
                "isRequired": false,
                "isRequiredPositional": false,
                "isSynthetic": false,
                "isRequiredNamed": false,
                "isOptionalNamed": true
              },
              {
                "value": "3",
                "name": "numField",
                "type": "num",
                "isConst": false,
                "isFinal": false,
                "isNamed": true,
                "isOptional": true,
                "isPositional": false,
                "isRequired": false,
                "isRequiredPositional": false,
                "isSynthetic": false,
                "isRequiredNamed": false,
                "isOptionalNamed": true
              },
              {
                "value": "const {}",
                "name": "mapField",
                "type": "Map",
                "isConst": false,
                "isFinal": false,
                "isNamed": true,
                "isOptional": true,
                "isPositional": false,
                "isRequired": false,
                "isRequiredPositional": false,
                "isSynthetic": false,
                "isRequiredNamed": false,
                "isOptionalNamed": true
              },
              {
                "value": "const []",
                "name": "listField",
                "type": "List",
                "isConst": false,
                "isFinal": false,
                "isNamed": true,
                "isOptional": true,
                "isPositional": false,
                "isRequired": false,
                "isRequiredPositional": false,
                "isSynthetic": false,
                "isRequiredNamed": false,
                "isOptionalNamed": true
              },
              {
                "value": null,
                "name": "dateField",
                "type": "DateTime",
                "isConst": false,
                "isFinal": false,
                "isNamed": true,
                "isOptional": true,
                "isPositional": false,
                "isRequired": false,
                "isRequiredPositional": false,
                "isSynthetic": false,
                "isRequiredNamed": false,
                "isOptionalNamed": true
              }
            ]
          }
        ],
        "methods": [
          {
            "name": "toJson",
            "body": {
              "name": "method_declaration",
              "values": [
                {
                  "name": "type",
                  "props": {
                    "0": "Map<String, dynamic>"
                  }
                },
                {
                  "name": "declaration",
                  "values": []
                },
                {
                  "name": "block_body",
                  "values": [
                    {
                      "name": "block",
                      "values": [
                        {
                          "name": "return",
                          "values": [
                            {
                              "name": "value",
                              "props": {
                                "0": {
                                  "type": "Map",
                                  "value": "{}"
                                }
                              }
                            }
                          ]
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "parameters": []
          },
          {
            "name": "build",
            "body": {
              "name": "method_declaration",
              "values": [
                {
                  "name": "type",
                  "props": {
                    "0": "Widget"
                  }
                },
                {
                  "name": "declaration",
                  "values": []
                },
                {
                  "name": "block_body",
                  "values": [
                    {
                      "name": "block",
                      "values": [
                        {
                          "name": "if",
                          "values": [
                            {
                              "name": "name",
                              "props": {
                                "0": "myField"
                              }
                            },
                            {
                              "name": "block",
                              "values": [
                                {
                                  "name": "return",
                                  "values": [
                                    {
                                      "name": "conditional",
                                      "values": [
                                        {
                                          "name": "binary",
                                          "left": {
                                            "name": "name",
                                            "props": {
                                              "0": "mySecondField"
                                            }
                                          },
                                          "right": {
                                            "name": "value",
                                            "props": {
                                              "0": {
                                                "type": "int",
                                                "value": "1"
                                              }
                                            }
                                          },
                                          "operation": "=="
                                        },
                                        {
                                          "name": "constructor",
                                          "value": "Container",
                                          "arguments": {
                                            "color": null
                                          }
                                        },
                                        {
                                          "name": "constructor",
                                          "value": "Container",
                                          "arguments": {
                                            "color": null
                                          }
                                        }
                                      ]
                                    }
                                  ]
                                }
                              ]
                            }
                          ]
                        },
                        {
                          "name": "return",
                          "values": [
                            {
                              "name": "constructor",
                              "value": "Container",
                              "arguments": {
                                "color": null,
                                "width": {
                                  "name": "value",
                                  "props": {
                                    "0": {
                                      "type": "int",
                                      "value": "20"
                                    }
                                  }
                                },
                                "child": {
                                  "name": "constructor",
                                  "value": "Center",
                                  "arguments": {
                                    "child": {
                                      "name": "constructor",
                                      "value": "Builder",
                                      "arguments": {}
                                    }
                                  }
                                }
                              }
                            }
                          ]
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            "parameters": []
          }
        ],
        "tree": {
          "name": null,
          "body": {
            "name": "block_body",
            "values": [
              {
                "name": "block",
                "values": [
                  {
                    "name": "if",
                    "values": [
                      {
                        "name": "name",
                        "props": {
                          "0": "myField"
                        }
                      },
                      {
                        "name": "block",
                        "values": [
                          {
                            "name": "return",
                            "values": [
                              {
                                "name": "conditional",
                                "values": [
                                  {
                                    "name": "binary",
                                    "left": {
                                      "name": "name",
                                      "props": {
                                        "0": "mySecondField"
                                      }
                                    },
                                    "right": {
                                      "name": "value",
                                      "props": {
                                        "0": {
                                          "type": "int",
                                          "value": "1"
                                        }
                                      }
                                    },
                                    "operation": "=="
                                  },
                                  {
                                    "name": "constructor",
                                    "value": "Container",
                                    "arguments": {
                                      "color": null
                                    }
                                  },
                                  {
                                    "name": "constructor",
                                    "value": "Container",
                                    "arguments": {
                                      "color": null
                                    }
                                  }
                                ]
                              }
                            ]
                          }
                        ]
                      }
                    ]
                  },
                  {
                    "name": "return",
                    "values": [
                      {
                        "name": "constructor",
                        "value": "Container",
                        "arguments": {
                          "color": null,
                          "width": {
                            "name": "value",
                            "props": {
                              "0": {
                                "type": "int",
                                "value": "20"
                              }
                            }
                          },
                          "child": {
                            "name": "constructor",
                            "value": "Center",
                            "arguments": {
                              "child": {
                                "name": "constructor",
                                "value": "Builder",
                                "arguments": {}
                              }
                            }
                          }
                        }
                      }
                    ]
                  }
                ]
              }
            ]
          },
          "parameters": []
        }
      },
      {
        "name": "Simple",
        "comments": [],
        "fields": [
          {
            "name": "value",
            "type": "String"
          }
        ],
        "constructors": [],
        "methods": []
      }
    ],
    "enums": [
      {
        "name": "MyEnum",
        "values": [
          "one",
          "type",
          "three"
        ]
      }
    ],
    "fields": [
      {
        "name": "kGlobalField",
        "type": "int"
      }
    ],
    "methods": [
      {
        "name": "myGlobalMethod",
        "body": {
          "name": "function_declaration",
          "values": [
            {
              "name": "type",
              "props": {
                "0": "void"
              }
            },
            {
              "name": "declaration",
              "values": []
            },
            {
              "name": "function",
              "values": [
                {
                  "name": "block_body",
                  "values": [
                    {
                      "name": "block",
                      "values": []
                    }
                  ]
                }
              ]
            }
          ]
        },
        "parameters": []
      }
    ]
  },
  "errors": []
}
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].