From: "Deepak Barua" <dbbarua@gmail.com>
To: git@vger.kernel.org
Subject: Adding spell checker to GIT
Date: Fri, 5 Jan 2007 02:16:42 +0530 [thread overview]
Message-ID: <b5a19cd20701041246we052685hd700580df2cc120d@mail.gmail.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 314 bytes --]
Hi All,
I and sasikumar have designed and built a spell checker into
the pre-commit hook, could someone please test it and give us your
comments.
Just add the file with same name pre-commit hook to .git/hooks
directory in your git project and make it executable.
Regards
Deepak
--
Code Code Code Away
[-- Attachment #2: pre-commit --]
[-- Type: application/octet-stream, Size: 4184 bytes --]
#!/bin/sh
#
# An example hook script to verify what is about to be committed.
# Called by git-commit with no arguments. The hook should
# exit with non-zero status after issuing an appropriate message if
# it wants to stop the commit.
#
# To enable this hook, make this file executable.
# This is slightly modified from Andrew Morton's Perfect Patch.
# Lines you introduce should not have trailing whitespace.
# Also check for an indentation that has SP before a TAB.
# Added Spell Checking Code to the existing code
# By Deepak Barua and Sasikumar Kandhasamy
if git-rev-parse --verify HEAD 2>/dev/null
then
git-diff-index -p -M --cached HEAD
else
# NEEDSWORK: we should produce a diff with an empty tree here
# if we want to do the same verification for the initial import.
:
fi |
perl -e '
# Adding the Aspell module to the perl script need aspell-dev installed in machine for the same
use Text::Aspell;
my $found_bad = 0;
my $filename;
my $reported_filename = "";
my $lineno;
my $continue = 0;
my $start_pattern = "";
my $end_pattern = "";
my $chosen_pattern = "";
my $match_condition = 0;
# Finding the file name extension
sub find_ext {
if($_[0] =~ /\.cc|\.java/) {
$start_pattern = qr!/\*|// !;
}
elsif($_[0] =~ /\.c|\.h/) {
$start_pattern = qr!/\*!;
}
else {
$start_pattern = qr!\# !;
$end_pattern = qq!\014!;
}
}
sub bad_line {
my ($why, $line) = @_;
if (!$found_bad) {
print STDERR "*\n";
print STDERR "* You have some suspicious patch lines:\n";
print STDERR "*\n";
$found_bad = 1;
}
if ($reported_filename ne $filename) {
print STDERR "* In $filename\n";
$reported_filename = $filename;
}
print STDERR "* $why (line $lineno)\n";
print STDERR "$filename:$lineno:$line\n";
}
# Created a spell checker instance
my $speller = Text::Aspell->new;
die unless $speller;
while (<>) {
if (m|^diff --git a/(.*) b/\1$|) {
$filename = $1;
find_ext($filename); # Calling the file extension finding function
next;
}
if (/^@@ -\S+ \+(\d+)/) {
$lineno = $1 - 1;
next;
}
if (/^ /) {
$lineno++;
next;
}
if (s/^\+//) {
$lineno++;
s/\n/ \014 /; # Substituting the newline in the file with junk octal character so chomp would not remove it
chomp;
# Main match condition for the start of the comment lines
if(($match_condition = m/($start_pattern)/) || $continue == 1) {
# Condition checking for not continuing comment and new comment pattern is matched
($continue != 1 && $match_condition == 1) ? $chosen_pattern = $+ : "Continue Pattern";
# Condition checking for not continuing comment and no new comment pattern is found
($continue != 1 && $match_condition != 1) ? $chosen_pattern = "" : "Continue Pattern";
# If chosen pattern is as specified then the corresponding end pattern is assigned
$chosen_pattern eq qq!/\*! ? $end_pattern=qq!\*/! : "End Pattern Not Found" ;
$chosen_pattern eq qq!//! ? $end_pattern=qq!\014! : "End Pattern Not Found" ;
# Split the line to individual words
@words = split / /,$_;
foreach $word (@words) {
# Check to see if end is reached
if($word eq $end_pattern) {
$continue=0;
$chosen_pattern="";
$end_pattern="";
last;
}
# Skip the start pattern
elsif($word eq $chosen_pattern) {
next;
}
# Perform spell checking for the selected word
else {
$speller->check($word)
? "Found"
: bad_line("\"$word\" spelling wrong"," ");
}
$continue = 1;
}
}
s/ \014 / /; # Substituting the junk octal with a space
# Continuation of the old code in pre-commit
if (/\s$/) {
bad_line("trailing whitespace", $_);
}
if (/^\s* /) {
bad_line("indent SP followed by a TAB", $_);
}
if (/^(?:[<>=]){7}/) {
bad_line("unresolved merge conflict", $_);
}
}
}
exit($found_bad);
'
next reply other threads:[~2007-01-04 20:46 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-01-04 20:46 Deepak Barua [this message]
2007-01-05 20:49 ` Adding spell checker to GIT Johannes Schindelin
2007-01-06 3:21 ` Deepak Barua
2007-01-16 16:10 ` Johannes Schindelin
2007-01-16 17:34 ` Deepak Barua
2007-01-25 14:36 ` Deepak Barua
2007-01-25 16:46 ` Johannes Schindelin
2007-01-26 7:22 ` Deepak Barua
-- strict thread matches above, loose matches on Subject: below --
2006-12-26 12:02 Deepak Barua
2006-12-05 16:05 Deepak Barua
2006-12-05 16:12 ` Jakub Narebski
2006-12-05 16:13 ` Johannes Schindelin
2006-12-05 16:39 ` Deepak Barua
2006-12-05 17:08 ` Andreas Ericsson
[not found] ` <200612051726.kB5HQO2t015777@laptop13.inf.utfsm.cl>
2006-12-12 19:51 ` Deepak Barua
2006-12-12 20:27 ` Johannes Schindelin
[not found] ` <d22d265a0612130103o1efcbd87sb93be9c2dad71307@mail.gmail.com>
2006-12-13 10:25 ` Johannes Schindelin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=b5a19cd20701041246we052685hd700580df2cc120d@mail.gmail.com \
--to=dbbarua@gmail.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).