Оплата большинства инструментов статического анализа является, вероятно, ненужной, когда существует некоторое очень хорошее качество свободные (если Вам не нужна некоторая совершенно особая или определенная функция, обеспеченная коммерческой версией). Например, см. этот ответ, я дал по другому вопросу приблизительно cppcheck.
Использование новой строки (byOriginal)
и обратное преобразование в байт []
с использованием getBytes ()
не гарантирует два байта []
с равными значениями. Это связано с вызовом StringCoding. encode (..)
, который закодирует String
в Charset.defaultCharset ()
. Во время этого кодирования кодировщик может заменить неизвестные символы и внести другие изменения. Следовательно, использование String.getBytes ()
может не вернуть массив, равный тому, который вы изначально передали конструктору.
-S /
с compgen
вместо вашей команды awk
$ cur
вместо $ terms
, поскольку вам не нужно удалять пробелы, но я использую $ lastword
и $ new
(два новых переменных) xargs echo
, поскольку массив с символами новой строки работает нормально Вы можете просто создать символическую ссылку на первый интересный узел в дереве. Я делал это раньше, когда меня не беспокоило автоматическое завершение больших деревьев каталогов.
Моим решением, которое, по общему признанию, является 800-фунтовым молотком, было написание perl-скрипта для обработки завершения так, как я хотел. в tcsh...
complete cd 'p|1|`complete_dirs.pl $:1 $cdpath`|/'
#!/usr/bin/perl
my $pattern = shift @ARGV;
my @path = @ARGV;
my @list;
if ($pattern =~ m!^(/.+/|/)(.*)!) {
@list = &search_dir($1,$2,undef);
} elsif ($pattern =~ m!(.+/|)(.*)!) {
my $dir; foreach $dir ('.',@path) {
push(@list,&search_dir("$dir/$1",$2,$1));
}
}
if (@list) {
@list = map { "e_path($_) } @list;
print join(' ',@list), "\n";
}
sub search_dir {
my ($dir,$pattern,$prefix) = @_;
my @list;
if (opendir(D,$dir)) {
my $node; while ($node = readdir(D)) {
next if ($node =~ /^\./);
next unless ($node =~ /^$pattern/);
next unless (-d "$dir$node");
my $actual; if (defined $prefix) {
$actual = "$prefix$node";
} elsif ($dir =~ m!/$!) {
$actual = "$dir$node";
} else {
$actual = "$dir/$node";
}
push(@list,$actual);
}
closedir(D);
}
return @list;
}
sub quote_path {
my ($string) = @_;
$string =~ s!(\s)!\\$1!g;
return $string;
}