#!/usr/bin/perl
# Parses Java source code from STDIN and generates script for BASH completion
# Input (in this order):
# info/globalcode/sql/dk/Constants.java
# info/globalcode/sql/dk/formatting/*
# info/globalcode/sql/dk/CLIParser.java
# TODO: support database/formatter names with spaces
use strict;
use warnings;
my $configDir = "~";
while (<>) {
if (/"(.*?)".*? \/\/\s*bash-completion:dir/) {
$configDir .= "/$1";
last;
}
}
my $databasesFile = "$configDir/bash-completion/databases";
my $formattersFile = "$configDir/bash-completion/formatters";
print 'have sql-dk &&
_sql_dk()
{
local cur prev
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
prev=${COMP_WORDS[COMP_CWORD-1]}
case "$prev" in
--db)
if [ -f '.$databasesFile.' ]; then
COMPREPLY=( $( compgen -W " $( cat '.$databasesFile.' ) " -- $cur ) )
return 0
fi
;;
--formatter)
if [ -f '.$formattersFile.' ]; then
COMPREPLY=( $( compgen -W " $( cat '.$formattersFile.' ) " -- $cur ) )
else
COMPREPLY=( $( compgen -W "
';
while (<>) {
if (/"(.*?)".*? \/\/\s*bash-completion:formatter/) {
print " $1\n";
}
last if (/\/\/\s*bash-completion:options/);
}
print ' " -- $cur ) );
fi
return 0
;;
esac;
COMPREPLY=( $( compgen -W "
';
while (<>) {
if (/"(.*?)".*? \/\/\s*bash-completion:option/) {
print " $1\n";
}
}
print ' " -- $cur ) )
return 0
}
complete -F _sql_dk sql-dk
';