Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
efm_perl.pl154 linesDownload Raw Back to tools
1#!/usr/bin/perl -w2 3# vimparse.pl - Reformats the error messages of the Perl interpreter for use4# with the quickfix mode of Vim5#6# Copyright (c) 2001 by Joerg Ziefle <joerg.ziefle@gmx.de>7# You may use and distribute this software under the same terms as Perl itself.8#9# Usage: put one of the two configurations below in your ~/.vimrc (without the10# description and '# ') and enjoy (be sure to adjust the paths to vimparse.pl11# before):12#13# Program is run interactively with 'perl -w':14#15# set makeprg=$HOME/bin/vimparse.pl\ %\ $*16# set errorformat=%f:%l:%m17#18# Program is only compiled with 'perl -wc':19#20# set makeprg=$HOME/bin/vimparse.pl\ -c\ %\ $*21# set errorformat=%f:%l:%m22#23# Usage:24#	vimparse.pl [-c] [-f <errorfile>] <programfile> [programargs]25#26#		-c	compile only, don't run (perl -wc)27#		-f	write errors to <errorfile>28#29# Example usages:30#	* From the command line:31#		vimparse.pl program.pl32#33#		vimparse.pl -c -f errorfile program.pl34#		Then run vim -q errorfile to edit the errors with Vim.35#36#	* From Vim:37#		Edit in Vim (and save, if you don't have autowrite on), then38#		type ':mak' or ':mak args' (args being the program arguments)39#		to error check.40#41# Version history:42#	0.2 (04/12/2001):43#		* First public version (sent to Bram)44#		* -c command line option for compiling only45#		* grammatical fix: 'There was 1 error.'46#		* bug fix for multiple arguments47#		* more error checks48#		* documentation (top of file, &usage)49#		* minor code clean ups50#	0.1 (02/02/2001):51#		* Initial version52#		* Basic functionality53#54# Todo:55#	* test on more systems56#	* use portable way to determine the location of perl ('use Config')57#	* include option that shows perldiag messages for each error58#	* allow to pass in program by STDIN59#	* more intuitive behaviour if no error is found (show message)60#61# Tested under SunOS 5.7 with Perl 5.6.0.  Let me know if it's not working for62# you.63 64use strict;65use Getopt::Std;66 67use vars qw/$opt_c $opt_f $opt_h/; # needed for Getopt in combination with use strict 'vars'68 69use constant VERSION => 0.2;70 71getopts('cf:h');72 73&usage if $opt_h; # not necessarily needed, but good for further extension74 75if (defined $opt_f) {76 77    open FILE, "> $opt_f" or do {78	warn "Couldn't open $opt_f: $!.  Using STDOUT instead.\n";79	undef $opt_f;80    };81 82};83 84my $handle = (defined $opt_f ? \*FILE : \*STDOUT);85 86(my $file = shift) or &usage; # display usage if no filename is supplied87my $args = (@ARGV ? ' ' . join ' ', @ARGV : '');88 89my @lines = `perl @{[defined $opt_c ? '-c ' : '' ]} -w "$file$args" 2>&1`;90 91my $errors = 0;92foreach my $line (@lines) {93 94    chomp($line);95    my ($file, $lineno, $message, $rest);96 97    if ($line =~ /^(.*)\sat\s(.*)\sline\s(\d+)(\.|,\snear\s\".*\")$/) {98 99	($message, $file, $lineno, $rest) = ($1, $2, $3, $4);100	$errors++;101	$message .= $rest if ($rest =~ s/^,//);102	print $handle "$file:$lineno:$message\n";103 104    } else { next };105 106}107 108if (defined $opt_f) {109 110    my $msg;111    if ($errors == 1) {112 113	$msg = "There was 1 error.\n";114 115    } else {116 117	$msg = "There were $errors errors.\n";118 119    };120 121    print STDOUT $msg;122    close FILE;123    unlink $opt_f unless $errors;124 125};126 127sub usage {128 129    (local $0 = $0) =~ s/^.*\/([^\/]+)$/$1/; # remove path from name of program130    print<<EOT;131Usage:132	$0 [-c] [-f <errorfile>] <programfile> [programargs]133 134		-c	compile only, don't run (executes 'perl -wc')135		-f	write errors to <errorfile>136 137Examples:138	* At the command line:139		$0 program.pl140		Displays output on STDOUT.141 142		$0 -c -f errorfile program.pl143		Then run 'vim -q errorfile' to edit the errors with Vim.144 145	* In Vim:146		Edit in Vim (and save, if you don't have autowrite on), then147		type ':mak' or ':mak args' (args being the program arguments)148		to error check.149EOT150 151    exit 0;152 153};154 
codekingpro/portable-devtools · Team Ai