Uncrustify : Source Code Beautifier for C, C++, C#, D, Java, and Pawn

by syoyo

[En]

I found good code beautifier. I like it.

http://uncrustify.sourceforge.net/

[Ja]

lucille のソースコードを書き直し & リファクタリングし始めてようとしています。

私の場合コードを書き足していくとどんどんダメでいい加減なコード記述になっていくので、
ちょうどよい機会なのでソースコード整形ツールでコードを機械的に統一的に整形
できる仕組みにしておきたいと考えました。

ソースコード整形ツールでは、GNU indent や Astyle が有名かと思います。
このふたつを試してみましたが、どうも出力が自分の求めるものに合いませんでした。

そこでさらによいソースコード整形ツールはないかと探してみて、見つけたのが uncrustify。

かなり細かく整形ルールを指定できますので、自分好みの結果を得やすくなっています。

出力例はこんな感じです。

整形前のコード(Before beautify)


typedef struct _ri_ray_t
{
        ri_vector_t org;                /* Position                     */
        ri_vector_t dir;                /* Direction                    */
        int         nbound_diffuse;     /* number of diffuse bounds     */
        int         nbound_specular;    /* number of specular bounds    */
        float    *isectt;               /* dist from nearest hit pos    */
        float       weight;             /* weight                       */
        char        prev_hit;           /* 'E','S','D',or 'L'           */

        /* quasi-Monte Carlo related variables. */
        int  d;                 /* current dimension            */
        int    i;                       /* instance number              */

        /* multi-thread variables */
        int         thread_num;         /* thread number.
                                         * If multi-threading feature
                                         * is turned on this value
                                         * should be set                */

#if 0
        /* Ray differentials for better texture mapping, etc.
         * TODO: This feature is not yet implemented.
         */
        ri_vector_t dPdx;               /* Partial derivative, dP / dx  */
        ri_vector_t dPdy;               /* Partial derivative, dP / dy  */
        ri_vector_t dDdx;               /* Partial derivative, dD / dx  */
        ri_vector_t dDdy;               /* Partial derivative, dD / dy  */
#endif
} ri_ray_t;

extern void ri_ray_copy(
        ri_ray_t *dst,
        const ri_ray_t *src);

extern void ri_ray_perturb(
        ri_ray_t *ray);

整形後のコード(After beautify)


typedef struct _ri_ray_t {
        ri_vector_t org;                /* Position                     */
        ri_vector_t dir;                /* Direction                    */
        int         nbound_diffuse;     /* number of diffuse bounds     */
        int         nbound_specular;    /* number of specular bounds    */
        float      *isectt;             /* dist from nearest hit pos    */
        float       weight;             /* weight                       */
        char        prev_hit;           /* 'E','S','D',or 'L'           */

        /* quasi-Monte Carlo related variables. */
        int         d;                  /* current dimension            */
        int         i;                  /* instance number              */

        /* multi-thread variables */
        int         thread_num;         /* thread number.
                                         * If multi-threading feature
                                         * is turned on this value
                                         * should be set                */

#if 0
        /* Ray differentials for better texture mapping, etc.
         * TODO: This feature is not yet implemented.
         */
        ri_vector_t dPdx;               /* Partial derivative, dP / dx  */
        ri_vector_t dPdy;               /* Partial derivative, dP / dy  */
        ri_vector_t dDdx;               /* Partial derivative, dD / dx  */
        ri_vector_t dDdy;               /* Partial derivative, dD / dy  */
#endif
} ri_ray_t;

extern void ri_ray_copy(
        ri_ray_t       *dst,
        const ri_ray_t *src );

extern void ri_ray_perturb(
        ri_ray_t *ray );

Advertisements