git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Adding spell checker to GIT
@ 2006-12-05 16:05 Deepak Barua
  2006-12-05 16:12 ` Jakub Narebski
                   ` (4 more replies)
  0 siblings, 5 replies; 17+ messages in thread
From: Deepak Barua @ 2006-12-05 16:05 UTC (permalink / raw)
  To: git

Hi All,
         I am just thought of a idea to integrate a spell checker with
git so that when we check in the code the code comments are spell
checked before being put into the tree,maybe have a optimized
dictionary search.
what about this...? is it appropriate ...?

Regards
Deepak

-- 

^ permalink raw reply	[flat|nested] 17+ messages in thread
* Adding spell checker to GIT
@ 2006-12-26 12:02 Deepak Barua
  0 siblings, 0 replies; 17+ messages in thread
From: Deepak Barua @ 2006-12-26 12:02 UTC (permalink / raw)
  To: git

[-- Attachment #1: Type: text/plain, Size: 229 bytes --]

Hi All,
        I just need some more help on how to check the file in
concerned in the pre commit hook , i have attached a document which
containes the basic perl code i am going to use.

Regards
Deepak

-- 
Code Code Code Away

[-- Attachment #2: test --]
[-- Type: application/octet-stream, Size: 705 bytes --]

#!/usr/bin/perl -w
#Spell checking script in perl for GIT source tracker program.
#Should be part of pre-commit hook

    use Text::Aspell;
    my $filename;
    my $continue = 0; 
    open($filename,"./checker.sh") or die "Could not open file";
    my $speller = Text::Aspell->new;
    die unless $speller;
    while(<$filename>) {
	
	if(m/\/\*/ || $continue == 1) {
	   @words = split / /,$_;
           foreach $word (@words) {
           if($word eq "*/") {
                $continue = 0;
	   	last;
	   }
	   else {
	   	print $speller->check($word)
		 	? "$word found\n"
                 	: "$word not fouund \n";
           	}
	   $continue = 1;
	   }
	
	}
     next;	
    }
    close $filename;



^ permalink raw reply	[flat|nested] 17+ messages in thread
* Adding spell checker to GIT
@ 2007-01-04 20:46 Deepak Barua
  2007-01-05 20:49 ` Johannes Schindelin
  0 siblings, 1 reply; 17+ messages in thread
From: Deepak Barua @ 2007-01-04 20:46 UTC (permalink / raw)
  To: git

[-- 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);
'


^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2007-01-26  7:22 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-12-05 16:05 Adding spell checker to GIT 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
  -- strict thread matches above, loose matches on Subject: below --
2006-12-26 12:02 Deepak Barua
2007-01-04 20:46 Deepak Barua
2007-01-05 20:49 ` 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

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).