blob: 1e1980d74bba69fa25ea2f78ffc67ac9c30c4bb4 [file] [log] [blame]
#!/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 "];"