I develop using CodeBlocks, and apparently in its default setup it converts tabs to spaces and snips off trailing whitespace. On the one hand, this is what's probably causing a lot of the weird diffs, but on the other hand, every time I work on a module that has these defects they automatically get fixed.

Ideally (not sure how well this would work in practice) such simple, mechanical style guidelines would automatically be applied to all code on checkin, i.e. your program or some equivalent would automatically run on the server side on all uploaded code immediately before it's committed to the SVN backend.

On 8/22/2010 5:20 PM, Walter Bright wrote:
A lot of checkins to Phobos wind up with a lot of invisible changes, because:

1. random addition and subtraction of tabs
2. random appearance and disappearance of trailing whitespace

I'd like to put an end to this, with the following rules:

1. no tabs are allowed
2. no trailing whitespace is allowed

I use this program to do filter my checkins which takes care of it, feel free to use it or some equivalent.
--------------------------------------------------------
/* Replace tabs with spaces, and remove trailing whitespace from lines.
*/

import std.file;
import std.path;

int main(string[] args)
{
   foreach (f; args[1 .. $])
   {
       auto input = cast(char[]) std.file.read(f);
       auto output = filter(input);
       if (output != input)
           std.file.write(f, output);
   }
   return 0;
}


char[] filter(char[] input)
{
   char[] output;
   size_t j;

   int column;
   for (size_t i = 0; i < input.length; i++)
   {
       auto c = input[i];

       switch (c)
       {
           case '\t':
               while ((column & 7) != 7)
               {   output ~= ' ';
                   j++;
                   column++;
               }
               c = ' ';
               column++;
               break;

           case '\r':
           case '\n':
               while (j && output[j - 1] == ' ')
                   j--;
               output = output[0 .. j];
               column = 0;
               break;

           default:
               column++;
               break;
       }
       output ~= c;
       j++;
   }
   while (j && output[j - 1] == ' ')
       j--;
   return output[0 .. j];
}

_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos


_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos

Reply via email to