| #!/bin/bash -- |
| # |
| # Generates dart_model definitions from `_fe_analyzer_shared` code. |
| # |
| # TODO(davidmorgan): this is intended to be single use code: delete if we don't |
| # need it again, convert to Dart if we do. |
| # |
| # mkdir /tmp/inputs |
| # cp ~/git/dart-sdk/sdk/pkg/_fe_analyzer_shared/lib/src/metadata/* /tmp/inputs |
| # rm /tmp/inputs/proto.dart /tmp/inputs/parser.dart /tmp/inputs/scope.dart /tmp/inputs/evaluate.dart |
| # tool/generate_definitions /tmp/inputs |
| |
| path="$1" |
| source=$(find $path -name \*.dart | xargs cat) |
| IFS=$'\n' |
| |
| echo "final definitions = [" |
| |
| # Unions. |
| for union in $( |
| echo "$source" \ |
| | grep 'sealed class' \ |
| | sed -e s'#sealed class ##' \ |
| | sed -e 's# {##' \ |
| | sort); do |
| echo "Definition.union('$union'," |
| echo " createInBuffer: true," |
| echo " description: ''," |
| echo " types: [" |
| for type in $(echo "$source" \ |
| | grep "extends $union" \ |
| | sed -e 's#abstract ##' \ |
| | sed -e 's#class ##' \ |
| | sed -e 's# extends .*##'); do |
| echo " '$type'," |
| done |
| echo " ]," |
| echo " properties: []," |
| echo "),"; |
| done |
| |
| # Enums. |
| for type in $(echo "$source" \ |
| | grep -E '^enum [A-Z]' \ |
| | sed -e 's#enum ##' \ |
| | sed -e 's# .*##' \ |
| | sort); do |
| echo "Definition.\$enum('$type'," |
| echo " description: ''," |
| echo " values: [" |
| for line in $(echo "$source" \ |
| | grep -A1000000 "enum $type " \ |
| | tail -n +2); do |
| if echo "$line" | grep -q -e ';' -e '}'; then |
| break |
| else |
| value=$(echo $line | sed -e 's# ##' | sed -e 's#(.*##' | sed -e 's#,##') |
| echo " '$value'," |
| fi |
| done |
| echo " ]," |
| echo ")," |
| done |
| |
| # Classes. |
| for type in $(echo "$source" \ |
| | grep -E '^[a-z ]*class ' \ |
| | grep -v 'sealed' \ |
| | sed -e 's#abstract ##' \ |
| | sed -e 's#class ##' \ |
| | sed -e 's# extends .*##' \ |
| | sed -e 's# {##' \ |
| | sort); do |
| echo "Definition.clazz('$type'," |
| echo " createInBuffer: true," |
| echo " description: ''," |
| echo " properties: [" |
| for line in $(echo "$source" \ |
| | grep -A1000000 "class $type extends" \ |
| | tail -n +2); do |
| if echo "$line" | grep -q ' final'; then |
| field_name=$(echo $line | sed -e 's# final ##' | sed -e 's#.* ##' | sed -e 's#;##') |
| if test "$field_name" == "unresolved"; then |
| continue |
| fi |
| field_type=$(echo $line | sed -e 's# final ##' | sed -e 's# .*##') |
| if echo "$field_type" | grep -F -q '?'; then |
| field_type=$(echo "$field_type" | sed -e 's#?##') |
| echo " Property('$field_name', type: '$field_type', description: '', nullable: true)," |
| else |
| echo " Property('$field_name', type: '$field_type', description: '')," |
| fi |
| elif echo "$line" | grep -q ' get '; then |
| field_name=$(echo $line | sed -e 's#.* get ##' | sed -e 's#;##') |
| if test "$field_name" == "unresolved"; then |
| continue |
| fi |
| field_type=$(echo $line | sed -e 's# ##' | sed -e 's# get .*##') |
| if echo "$field_type" | grep -F -q '?'; then |
| field_type=$(echo "$field_type" | sed -e 's#?##') |
| echo " Property('$field_name', type: '$field_type', description: '', nullable: true)," |
| else |
| echo " Property('$field_name', type: '$field_type', description: '')," |
| fi |
| else |
| break |
| fi |
| done |
| echo " ]," |
| echo ")," |
| done |
| echo "];" |