cloc(1) User Commands cloc(1)

cloc - شمارش یا محاسبه تفاوت‌های خطوط کد منبع و کامنت‌ها

cloc [options] <FILE|DIR> ...

شمارش یا محاسبه تفاوت‌های خطوط فیزیکی کد منبع در فایل‌های داده‌شده (می‌تواند شامل آرشیوهایی مانند فایل‌های فشرده tarball یا zip، یا شناسه‌های هش کامیت گیت یا نام شاخه‌ها باشد) و/یا به صورت بازگشتی در زیرپوشه‌های مشخص‌شده. این برنامه کاملاً به زبان پرل و تنها با استفاده از ماژول‌های توزیع استاندارد آن نوشته شده است.

برای شمارش ورودی استاندارد، از نام فایل ویژه - و همراه با آن از --stdin-name=FILE برای اطلاع دادن نام فایل لوله‌کشی‌شده به cloc، یا --force-lang=LANG برای اعمال شمارنده LANG به تمام ورودی‌ها استفاده کنید.

این گزینه تنها زمانی نیاز است که cloc نتواند به تنهایی نحوه استخراج محتویات فایل(های) ورودی را تشخیص دهد. از CMD برای استخراج فایل‌های آرشیو باینری (مانند .tar.gz، .zip، .Z) استفاده کنید. از عبارت دقیق '>FILE<' به عنوان جایگزین فایل(های) واقعی که باید استخراج شوند استفاده نمایید. برای مثال، برای شمارش خطوط کد در فایل‌های ورودی gcc-4.2.tar.gz perl-5.8.8.tar.gz در یونیکس از دستور زیر استفاده کنید:
--extract-with='gzip -dc >FILE< | tar xf -

یا اگر از GNU tar استفاده می‌کنید:

--extract-with='tar zxf >FILE<'

و در ویندوز، برای مثال:

--extract-with="\"c:\Program Files\WinZip\WinZip32.exe\" -e -o >FILE<
فهرست نام فایل‌ها و/یا پوشه‌ها برای پردازش را از FILE دریافت می‌کند که در هر خط آن یک نام فایل/پوشه قرار دارد. تنها موارد منطبق دقیق شمرده می‌شوند؛ مسیرهای نسبی با مبدا پوشه‌ای که cloc در آن فراخوانی شده حل‌وفصل می‌شوند. برای خواندن نام فایل‌ها از لوله STDIN، مقدار FILE را برابر - قرار دهید. همچنین ببینید: --exclude-list-file، --config.
جفت‌های نام فایل برای مقایسه (diff) را از FILE می‌خواند که قالب آن مطابق با خروجی --diff-alignment است. (برای مشاهده نمونه، آن گزینه را اجرا کنید.) شناسه زبان در انتهای هر خط نادیده گرفته می‌شود. این کار حالت --diff را فعال کرده و منطق تراز کردن جفت فایل‌ها را دور می‌زند. همچنین ببینید: --config.
یک فراخوانی سیستمی به VCS اجرا می‌کند تا فهرستی از فایل‌ها برای کار روی آن‌ها دریافت شود. اگر VCS برابر با 'git' باشد، دستور 'git ls-files' برای دریافت فهرست فایل‌ها و 'git submodule status' برای دریافت فهرست زیرماژول‌هایی که محتوایشان نادیده گرفته می‌شود فراخوانی خواهد شد. همچنین گزینه --git را ببینید که هش‌های کامیت و نام شاخه‌های گیت را می‌پذیرد. اگر VCS برابر با 'svn' باشد، دستور 'svn list -R' فراخوانی خواهد شد. مزیت اصلی این است که cloc فایل‌هایی را که به صراحت توسط ابزار کنترل نسخه مربوطه مستثنی شده‌اند (مانند موارد موجود در .gitignore یا دارای ویژگی svn:ignore) نادیده می‌گیرد. همچنین VCS می‌تواند هر دستور سیستمی دیگری باشد که فهرستی از فایل‌ها را تولید می‌کند. نکته: cloc باید در پوشه‌ای باشد که بتواند فایل‌های بازگردانده‌شده توسط VCS را بخواند. cloc فایل‌ها را از مخازن راه دور دانلود نمی‌کند. دستور 'svn list -R' ممکن است برای به دست آوردن نام فایل‌ها به یک مخزن راه دور ارجاع دهد (و بنابراین ممکن است به احراز هویت در مخزن راه دور نیاز داشته باشد)، اما خود فایل‌ها باید محلی باشند. تنظیم VCS روی 'auto' بر اساس وجود زیرپوشه .git یا .svn در زیر پوشه‌ای که cloc در آن فراخوانی شده، بین 'git' و 'svn' (یا هیچ‌کدام) انتخاب می‌کند.
فایل‌های باینری را بررسی می‌کند تا ببیند آیا حاوی متن یونیکد گسترش‌یافته با کدگذاری اسکی هستند یا خیر. این کار باعث افت محسوس کارایی می‌شود.

شمارش فایل‌های .in (مشابه پردازش انجام‌شده توسط GNU autoconf) برای زبان‌های شناخته‌شده. همچنین گزینه --no-autogen را ببینید.
گزارش نتایج به تفکیک هر فایل منبع پردازش‌شده.
گزارش نتایج برای هر فایل منبع علاوه بر گزارش به تفکیک زبان.
خواندن سوییچ‌های خط فرمان از FILE به جای مسیر پیش‌فرض ~/.config/cloc/options.txt. این فایل باید در هر خط شامل یک سوییچ به همراه آرگومان‌های آن (در صورت وجود) باشد. خطوط خالی و خطوطی که با '#' شروع می‌شوند نادیده گرفته می‌شوند. گزینه‌های مشخص‌شده در خط فرمان نسبت به موارد خوانده‌شده از فایل اولویت دارند. اگر همراه با هر یک از این سوییچ‌ها یک دایرکتوری نیز مشخص شده باشد: --list-file، --exclude-list-file، --read-lang-def، --force-lang-def، --diff-list-file و یک فایل پیکربندی در آن دایرکتوری وجود داشته باشد، آن فایل نسبت به ~/.config/cloc/options.txt اولویت خواهد داشت.
ابتدا شمارش مستقیم کد فایل(های) منبع SET1 و SET2 را به طور جداگانه انجام داده، سپس تفاوت (diff) بین آن‌ها را محاسبه می‌کند. ورودی‌ها می‌توانند جفت فایل، دایرکتوری یا آرشیو باشند. اگر --out یا --report-file مشخص شده باشد، سه فایل خروجی ایجاد می‌شود؛ یکی برای هر کدام از دو شمارش و دیگری برای تفاوت. همچنین گزینه‌های --diff، --diff-alignment، --diff-timeout، --ignore-case و --ignore-whitespace را ببینید.
محاسبه تفاوت‌های خطوط کد و کامنت‌ها بین فایل(های) منبع SET1 و SET2. ورودی‌ها می‌توانند جفت فایل، دایرکتوری یا آرشیو باشند. از --diff-alignment برای ایجاد فهرستی از جفت‌فایل‌های مقایسه‌شده استفاده کنید. همچنین گزینه‌های --count-and-diff، --diff-alignment، --diff-timeout، --ignore-case و --ignore-whitespace را ببینید.
نادیده گرفتن فایل‌هایی که پردازش آن‌ها بیش از N ثانیه طول می‌کشد. مقدار پیش‌فرض 10 ثانیه است. تنظیم N روی 0 زمان نامحدود را در نظر می‌گیرد. (فایل‌های بزرگ با خطوط تکراری زیاد می‌توانند باعث شوند فراخوانی Algorithm::Diff::sdiff() ساعت‌ها طول بکشد.)
ابزار cloc رشته‌های مستندات (docstrings) را کامنت تلقی می‌کند، اما این همیشه درست نیست زیرا رشته‌های مستندات هنگامی که در سمت راست یک انتساب یا به عنوان آرگومان تابع قرار می‌گیرند، نشان‌دهنده رشته‌های معمولی هستند. این سوییچ شمارش رشته‌های مستندات به عنوان کد را اجبار می‌کند.
[فقط یونیکس] دنبال کردن پیوندهای نمادین به دایرکتوری‌ها (پیوندهای نمادین به فایل‌ها همیشه دنبال می‌شوند).
پردازش تمامی فایل‌های دارای پسوند EXT با شمارنده زبان LANG. برای مثال، برای شمارش تمام فایل‌های .f با شمارنده Fortran 90 (که انتظار دارد پسوند فایل‌ها .f90 باشد) به جای شمارنده پیش‌فرض Fortran 77، از دستور زیر استفاده کنید:
--force-lang="Fortran 90",f

اگر EXT حذف شود، هر فایلی با شمارنده LANG شمرده خواهد شد. این گزینه می‌تواند چندین بار مشخص شود (اما این فقط زمانی مفید است که هر بار EXT مشخص گردد). همچنین گزینه‌های --script-lang و --lang-no-ext را ببینید.

بارگذاری فیلترهای پردازش زبان از FILE، و سپس استفاده از این فیلترها به جای فیلترهای داخلی. نکته: زبان‌هایی که به پسوند فایل یکسانی نگاشت می‌شوند (برای مثال: MATLAB/Objective-C/MUMPS؛ Pascal/PHP؛ Lisp/OpenCL؛ Lisp/Julia؛ Perl/Prolog) نادیده گرفته خواهند شد زیرا این موارد نیاز به پردازش‌های اضافی دارند که در فایل‌های تعریف زبان بیان نمی‌شوند. از --read-lang-def برای تعریف فیلترهای زبانی جدید بدون جایگزینی فیلترهای داخلی استفاده کنید (همچنین --write-lang-def و --write-lang-def-incl-dup را ببینید).
اجبار به تفسیر ورودی‌ها به عنوان اهداف گیت (هش کامیت‌ها، نام شاخه‌ها و غیره) در صورتی که ابتدا به عنوان نام فایل یا دایرکتوری شناسایی نشوند. این گزینه در صورت تعیین شدن، منطق --vcs=git را بازنویسی می‌کند؛ به عبارت دیگر، --git فهرست فایل‌های خود را مستقیماً از گیت با استفاده از هش یا نام شاخه دریافت می‌کند و نه از 'git ls-files'. این گزینه می‌تواند با --diff برای مقایسه تفاوت خطوط بین کامیت‌های گیت، یا بین یک کامیت گیت و یک فایل، دایرکتوری یا آرشیو استفاده شود. از -v/--verbose برای مشاهده دستورات سیستمی گیت که cloc صادر می‌کند استفاده کنید.
مشابه با --git --diff، یا فقط --diff اگر ورودی‌ها به عنوان اهداف گیت شناخته شوند. تنها فایل‌هایی که در یکی از کامیت‌ها تغییر کرده‌اند مقایسه می‌شوند.
راهبرد دوم مقایسه گیت (git diff): مقایسه تمامی فایل‌های موجود در مخزن بین دو کامیت.
نادیده گرفتن فاصله‌های خالی افقی هنگام مقایسه فایل‌ها با --diff. همچنین --ignore-case را ببینید.
نادیده گرفتن تفاوت حروف کوچک و بزرگ در محتوای فایل‌ها؛ در نظر گرفتن حروف بزرگ و کوچک به عنوان معادل هنگام مقایسه فایل‌ها با --diff. همچنین --ignore-whitespace را ببینید.
نادیده گرفتن بزرگی و کوچکی حروف در پسوند نام فایل‌ها. این امر ممکن است در شمارش برخی زبان‌ها مشکل ایجاد کند (به طور خاص، .c و .C به C و C++ مرتبط هستند؛ این سوییچ باعث می‌شود فایل‌های .C در سیستم‌عامل‌های شبه‌یونیکس به عنوان C به جای C++ شمرده شوند). حساس نبودن نام فایل به حروف کوچک و بزرگ در ویندوز همیشه برقرار است.
نادیده گرفتن خطوطی در فایل‌های منبع که با عبارت منظم پرل ارائه‌شده برای زبان(های) داده‌شده تطابق دارند. این گزینه را می‌توان چندین بار مشخص کرد. نام زبان‌ها با کاما از هم جدا شده و پس از آن نویسه خط لوله (|) و عبارت منظم می‌آید. از * برای مطابقت با تمام زبان‌ها استفاده کنید. مثال‌ها:
--ignore-regex='C,Java,C++|^\s*[{};]\s*$'
--ignore-regex='*|DEBUG|TEST\s+ONLY'

این فیلترها پس از حذف کامنت‌ها اعمال می‌شوند. برای ایجاد فایل‌های جدیدی که اعمال این فیلترها را نشان می‌دهند، از --strip-comments=EXT استفاده کنید. کاربرد اصلی نادیده گرفتن خطوطی است که تنها شامل آکولاد، کروشه یا علائم نگارشی هستند.

هنگام استفاده از --vcs=git، فایل‌های موجود در زیرماژول‌های گیت را نیز شامل می‌کند.
شمارش فایل‌های بدون پسوند با استفاده از شمارنده LANG. این گزینه منطق داخلی برای فایل‌های بدون پسوند را بازنویسی می‌کند (که در آن چنین فایل‌هایی با بررسی خط اول برای "#!" در برابر زبان‌های اسکریپت‌نویسی شناخته‌شده بررسی می‌شوند). همچنین گزینه‌های --force-lang و --script-lang را ببینید.
صرف‌نظر کردن از فایل‌های بزرگ‌تر از "MB" مگابایت هنگام پیمایش دایرکتوری‌ها. به طور پیش‌فرض، مقدار "MB" برابر ۱۰۰ است. حافظه مورد نیاز cloc تقریباً بیست برابر بزرگ‌تر از بزرگ‌ترین فایل است، بنابراین اجرای برنامه با فایل‌های بزرگ‌تر از ۱۰۰ مگابایت روی رایانه‌ای با کمتر از ۲ گیگابایت حافظه رم مشکل‌ساز خواهد شد. نکته: این بررسی روی فایل‌هایی که صریحاً به عنوان آرگومان خط فرمان داده شده‌اند اعمال نمی‌شود.
نادیده گرفتن فایل‌های تولیدشده توسط سیستم‌های خودکار تولید کد مانند GNU autoconf. برای مشاهده فهرستی از این فایل‌ها (و سپس خروج)، برنامه را با --no-autogen list اجرا کنید. همچنین --autoconf را ببینید.
شمارش فایل‌ها در دایرکتوری‌های داده‌شده بدون پیمایش بازگشتی در زیرپوشه‌ها.
تنها شمارش تعداد فایل‌ها بر اساس زبان. تعداد خطوط خالی، کامنت‌ها و کد صفر خواهد بود.
تنها در ترکیب با --strip-comments مؤثر است. فایل‌های پیراسته‌شده (بدون کامنت) را در همان دایرکتوری فایل‌های اصلی می‌نویسد.
پردازش فایل‌های باینری علاوه بر فایل‌های متنی. این کار معمولاً ایده بدی است و تنها باید برای فایل‌های متنی حاوی داده‌های باینری تعبیه‌شده امتحان شود.
بارگذاری فیلترهای پردازش زبان جدید از FILE و ادغام آن‌ها با فیلترهایی که cloc از قبل می‌شناسد. اگر FILE زبانی را تعریف کند که cloc از قبل می‌شناسد، تعاریف خود cloc اولویت خواهند داشت. برای بازنویسی تعاریف cloc از --force-lang-def استفاده کنید (همچنین --write-lang-def را ببینید).
پردازش تمام فایل‌هایی که "S" را به عنوان زبان اسکریپت‌نویسی "#!" فراخوانی می‌کنند، با شمارنده زبان LANG. برای مثال، فایل‌هایی که با "#!/usr/local/bin/perl5.8.8" شروع می‌شوند، با استفاده از دستور زیر با شمارنده Perl شمرده خواهند شد:
--script-lang=Perl,perl5.8.8

نام زبان به حروف کوچک و بزرگ حساس نیست اما نام فایل اجرایی زبان اسکریپتی، "S"، باید بزرگی و کوچکی حروف درستی داشته باشد. این گزینه می‌تواند چندین بار مشخص شود. همچنین --force-lang را ببینید.

استفاده از DIR به عنوان دایرکتوری موقت (scratch) به جای اجازه دادن به File::Temp برای انتخاب مکان. فایل‌های نوشته‌شده در این مکان در پایان اجرا حذف نمی‌شوند (برخلاف File::Temp).
 صرف‌نظر کردن از <N> خط اول هر فایل. اگر فهرستی از
پسوندها نیز با کاما جدا شده و ارائه شود، تنها از خطوط
آن نوع فایل‌ها صرف‌نظر می‌شود. مثال:
        --skip-leading=10,cpp,h

از ده خط اول فایل‌های *.cpp و *.h صرف‌نظر می‌کند. این قابلیت برای نادیده گرفتن متون تکراری و قالبی مفید است.

صرف‌نظر کردن از بررسی یکتایی فایل‌ها. این کار عملکرد را افزایش می‌دهد، اما در ازای شمارش چندباره فایل‌هایی با محتوای یکسان (در صورت وجود چنین فایل‌های تکراری).
برخی فایل‌سیستم‌ها (AFS، CD-ROM، FAT، HPFS، SMB) تعداد پیوند دایرکتوری ('nlink') متناسب با تعداد زیرپوشه‌های خود ندارند. در نتیجه ممکن است cloc محتویات چنین فایل‌سیستم‌هایی را کمتر از واقعیت بشمارد یا به طور کامل نادیده بگیرد. این سوییچ File::Find را وادار می‌کند تا با stat کردن دایرکتوری‌ها، تعداد صحیح را به دست آورد. سرعت جستجوی فایل کاهش خواهد یافت. همچنین --follow-links را ببینید.
شمارش خطوط ارائه‌شده از طریق ورودی استاندارد (STDIN) به گونه‌ای که گویی از فایلی به نام FILE آمده‌اند.
به ازای هر فایل پردازش‌شده، نسخه‌ای از فایل را که خطوط خالی و کد آن حذف شده‌اند در دایرکتوری جاری می‌نویسد. نام هر فایل پیراسته‌شده، نام فایل اصلی به همراه ".EXT" در انتهای آن است. این فایل در دایرکتوری جاری نوشته می‌شود مگر اینکه گزینه --original-dir فعال باشد.
به ازای هر فایل پردازش‌شده، نسخه‌ای از فایل را که خطوط خالی و کامنت آن حذف شده‌اند در دایرکتوری جاری می‌نویسد (کامنت‌های درون‌خطی باقی می‌مانند). نام هر فایل پیراسته‌شده، نام فایل اصلی به همراه ".EXT" در انتهای آن است. این فایل در دایرکتوری جاری نوشته می‌شود مگر اینکه گزینه --original-dir فعال باشد.
جایگزینی نشانگرهای کامنت تعبیه‌شده در رشته‌ها با 'xx'. این گزینه تلاش می‌کند تا محدودیتی در Regexp::Common::Comment را برطرف کند که در آن نشانگرهای کامنت درون رشته‌ها به عنوان کامنت واقعی در نظر گرفته می‌شوند و نه رشته، که اغلب منجر به هشدار 'Complex regular subexpression recursion limit' و شمارش نادرست می‌شود. استفاده از این سوییچ دو عیب دارد: ۱. افت عملکرد شمارش کد، ۲. کدهای تولیدشده با --strip-comments در هر جایی که کامنت‌های تعبیه‌شده یافت شوند حاوی رشته‌های متفاوتی خواهند بود.
آرگومان‌های ورودی فایل‌های گزارشی هستند که پیش‌تر با گزینه --report-file ایجاد شده‌اند. مجموعه‌ای تجمیعی از نتایج حاوی جمع داده‌های هر یک از فایل‌های گزارش تولید می‌کند.
نادیده گرفتن فایل‌هایی که پردازش آن‌ها در هر یک از مراحل فیلتر زبان بیش از <N> ثانیه طول می‌کشد. حداکثر زمان پیش‌فرض صرف‌شده برای یک مرحله فیلتر، تعداد خطوط فایل تقسیم بر ۱۰۰۰ است. تنظیم N روی 0 زمان نامحدود را در نظر می‌گیرد. همچنین --diff-timeout را ببینید.
[تنها در سیستم‌هایی با نسخه جدید ماژول Parallel::ForkManager در دسترس است. در ویندوز موجود نیست.] حداکثر تعداد هسته‌های پردازشی مورد استفاده cloc را تعیین می‌کند. مقدار پیش‌فرض 0 چندپردازشی را غیرفعال می‌کند.
نادیده گرفتن منطق تشخیص سیستم‌عامل و اجرا در حالت یونیکس (UNIX). همچنین گزینه‌های --windows و --show-os را ببینید.
اگر ابزار SLOCCount نصب باشد، از برنامه‌های اجرایی کامپایل‌شده آن یعنی c_count، java_count، pascal_count، php_count و xml_count به جای شمارنده‌های cloc استفاده می‌کند. شمارنده‌های کامپایل‌شده SLOCCount به طور قابل توجهی سریع‌تر از cloc هستند و ممکن است هنگام شمارش پروژه‌هایی با فایل‌های حجیم، بهبود کارایی ایجاد کنند. با این حال، قابلیت‌های ویژه cloc در دسترس نخواهند بود: --diff، --count-and-diff، --strip-comments، --unicode.
نادیده گرفتن منطق تشخیص سیستم‌عامل و اجرا در حالت مایکروسافت ویندوز. همچنین گزینه‌های --unix و --show-os را ببینید.

تنها فایل‌هایی را می‌شمارد که حاوی متنی منطبق بر عبارت منظم داده‌شده باشند.
فایل‌هایی را که حاوی متنی منطبق بر عبارت منظم داده‌شده باشند مستثنی می‌کند.
دایرکتوری‌های داده‌شده را که با کاما از هم جدا شده‌اند از پویش مستثنی می‌کند. برای مثال:
--exclude-dir=.cache,test

از تمام فایل‌هایی که مسیر آن‌ها شامل "/.cache/" یا "/test/" باشد صرف‌نظر می‌کند. دایرکتوری‌های به نام ".bzr"، ".cvs"، ".hg"، ".git" و ".svn" همیشه مستثنی هستند. این گزینه فقط با نام‌های تکی دایرکتوری کار می‌کند، بنابراین درج جداکننده‌های مسیر فایل مجاز نیست. از --fullpath و --not-match-d=REGEX برای ارائه یک عبارت منظم که با چندین زیرپوشه مطابقت داشته باشد استفاده کنید.

فایل‌های دارای پسوندهای نام فایل مشخص‌شده را نمی‌شمارد.
زبان‌های داده‌شده را که با کاما از هم جدا شده‌اند از شمارش مستثنی می‌کند.
فایل‌ها و/یا دایرکتوری‌هایی را که نام آن‌ها در FILE آمده است نادیده می‌گیرد. FILE باید در هر خط حاوی یک نام فایل باشد. تنها موارد منطبق دقیق نادیده گرفته می‌شوند؛ مسیرهای نسبی با مبدا دایرکتوری فراخوانی cloc حل‌وفصل می‌شوند. همچنین گزینه‌های --list-file و --config را ببینید.
رفتار --match-f یا --not-match-f را تغییر می‌دهد تا مسیر فایل نیز در عبارت منظم گنجانده شود، نه فقط نام پایه (basename) فایل. (این گزینه هر فایل را به مسیر مطلق آن بسط نمی‌دهد، بلکه از همان مقداری از مسیر که به cloc ارسال شده استفاده می‌کند.)
تنها زبان‌هایی را می‌شمارد که دارای پسوند فایل داده‌شده (جداشده با کاما) باشند. برای مشاهده پسوندهای شناخته‌شده از --show-ext استفاده کنید.
تنها زبان‌های مشخص‌شده غیرحساس به حروف کوچک و بزرگ L1، L2، L3 و غیره را می‌شمارد.
تنها فایل‌های موجود در دایرکتوری‌هایی را می‌شمارد که با عبارت منظم پرل مطابقت دارند. برای مثال:
--match-d='/(src|include)/'

تنها فایل‌هایی را در مسیرهای دایرکتوری می‌شمارد که حاوی "/src/" یا "/include/" باشند.

تمام فایل‌ها را می‌شمارد به جز فایل‌های موجود در دایرکتوری‌هایی که با عبارت منظم پرل مطابقت دارند. تنها نام دایرکتوری انتهایی مقایسه می‌شود؛ به عنوان مثال هنگام شمارش در "/usr/local/lib"، تنها "lib" با عبارت منظم مقایسه می‌شود. گزینه --fullpath را اضافه کنید تا دایرکتوری‌های والد نیز با عبارت منظم مقایسه شوند. در ابتدا یا انتهای عبارت منظم جداکننده‌های مسیر فایل را قرار ندهید. این سوییچ می‌تواند تکرار شود.
تنها فایل‌هایی را می‌شمارد که نام پایه آن‌ها با عبارت منظم پرل مطابقت دارد. برای مثال دستور زیر تنها فایل‌هایی را می‌شمارد که با Widget یا widget شروع می‌شوند:
--match-f='^[Ww]idget'

گزینه --fullpath را اضافه کنید تا به جای فقط نام پایه، دایرکتوری‌های والد نیز در عبارت منظم لحاظ شوند.

تمام فایل‌ها به جز آن‌هایی که نام پایه آن‌ها با عبارت منظم پرل مطابقت دارد را می‌شمارد. گزینه --fullpath را اضافه کنید تا دایرکتوری‌های والد نیز در عبارت منظم لحاظ شوند. این سوییچ می‌تواند تکرار شود.
فایل‌هایی را که با عبارت منظم پرل داده‌شده پایان می‌یابند نادیده می‌گیرد. برای مثال، اگر داده شود:
--skip-archive='(zip|tar(\.(gz|Z|bz2|xz|7z))?)'

کد از فایل‌هایی که با .zip، .tar، .tar.gz، .tar.Z، .tar.bz2، .tar.xz و .tar.7z خاتمه می‌یابند صرف‌نظر می‌کند.

در ویندوز، فایل‌های پنهان را نادیده می‌گیرد.

ذخیره اندازه فایل‌ها بر حسب بایت، زبان‌های شناسایی‌شده و نام فایل‌های دسته‌بندی‌شده در FILE.
ذخیره نام فایل‌های منبع پردازش‌شده در FILE. همچنین گزینه‌های --found، --ignored و --unique را ببینید.
نوشتن فهرستی از فایل‌ها و جفت‌فایل‌ها در FILE که نشان می‌دهد کدام فایل‌ها در حین اجرا با --diff اضافه، حذف و/یا مقایسه شده‌اند. این سوییچ حالت --diff را به اجبار فعال می‌کند.
چاپ فیلترهای استفاده‌شده برای حذف کامنت‌ها برای زبان LANG و سپس خروج. در برخی موارد فیلترها به جای عبارات منظم به سابروتین‌های پرل ارجاع دارند. برای توضیحات بیشتر ممکن است بررسی کد منبع لازم باشد.
چاپ اطلاعات راهنمای داخلی استفاده از cloc و خروج.
ذخیره نام تک‌تک فایل‌های یافت‌شده در FILE. همچنین گزینه‌های --counted، --ignored و --unique را ببینید.
ذخیره نام فایل‌های نادیده‌گرفته‌شده و دلیل نادیده گرفتن آن‌ها در FILE. همچنین گزینه‌های --counted، --found و --unique را ببینید.
چاپ کد منبع پردازش‌شده در STDOUT قبل و بعد از اعمال هر فیلتر.
چاپ اطلاعات مربوط به تمامی پسوندهای فایل شناخته‌شده (یا فقط پسوند داده‌شده) و خروج.
هنگام استفاده با --quiet، پیام‌های خطا (در صورت وجود) را چاپ می‌کند.
چاپ اطلاعات درباره تمام زبان‌های شناخته‌شده (یا فقط زبان داده‌شده) و خروج.
چاپ مقدار حالت سیستم‌عامل و خروج. همچنین گزینه‌های --unix و --windows را ببینید.
فرونشاندن تمام پیام‌های اطلاعاتی به جز خروجی نهایی. همچنین --show-errors را ببینید.
ذخیره نام فایل‌های نادیده‌گرفته‌شده و دلیل نادیده گرفتن آن‌ها در FILE. همچنین گزینه‌های --counted، --found و --ignored را ببینید.
فعال‌سازی حالت پرگویی با مقدار عددی اختیاری.
شکل بلند سوییچ -v.
چاپ نسخه این برنامه و خروج.
نوشتن فیلترهای پردازش زبان در FILE و سپس خروج. به عنوان گام نخست برای ایجاد تعاریف زبان سفارشی مفید است. نکته: زبان‌هایی که به یک پسوند یکسان نگاشت می‌شوند مستثنی خواهند شد. همچنین گزینه‌های --force-lang-def و --read-lang-def را ببینید.
مشابه --write-lang-def، اما شامل پسوندهای تکراری نیز می‌شود. این کار یک فایل تعریف زبان مشکل‌دار ایجاد می‌کند زیرا cloc از استفاده از آن تا زمان حذف موارد تکراری خودداری خواهد کرد.

--3
چاپ خروجی زبان‌های نسل سوم. (این گزینه در صورت تولید برخی گزارش‌ها با این گزینه و برخی بدون آن، می‌تواند باعث عدم موفقیت در تجمیع گزارش‌ها شود.)
نمایش مقادیر به صورت درصدی بر اساس مقدار X در مخرج به جای شمارش خطوط کامنت و خالی، که در آن X یکی از موارد زیر است:
c به معنای خطوط کد
cm به معنای خطوط کد + کامنت‌ها
cb به معنای خطوط کد + خطوط خالی
cmb به معنای خطوط کد + کامنت‌ها + خطوط خالی

برای مثال، در صورت استفاده از روش 'c' و اگر کد شما دو برابر خطوط کد خطوط کامنت داشته باشد، مقدار ستون کامنت ۲۰۰٪ خواهد بود. ستون کد همچنان به صورت تعداد خط باقی می‌ماند.

نوشتن نتایج به صورت مقادیر جداشده با کاما (CSV).
استفاده از نویسه C به عنوان جداکننده برای فایل‌های CSV به جای کاما (,). این سوییچ --csv را به اجبار فعال می‌کند.
نوشتن فایل‌های خروجی با استفاده از کدگذاری E به جای اسکی پیش‌فرض (E = 'UTF-7'). مثال‌ها: 'UTF-16'، 'euc-kr'، 'iso-8859-16'. کدگذاری‌های شناخته‌شده را می‌توان با دستور زیر چاپ کرد:
perl -MEncode -e 'print join("\n", Encode->encodings(":all")), "\n"'
قالب متنی جایگزین خروجی که در آن N عددی از ۱ تا ۵ یا از ۱- تا ۵- است. عبارت 'total lines' به معنای مجموع خطوط کد، کامنت و خطوط خالی است. مقادیر منفی مشابه مقادیر مثبت هستند اما به جای حذف فایل واسط JSON نوشته‌شده، آن را نگه می‌دارند. نام فایل JSON به صورت تصادفی تولید می‌شود مگر اینکه --out/--report-file مشخص شده باشد. قالب‌ها عبارتند از:
1: بر اساس زبان (مشابه خروجی پیش‌فرض cloc)
2: بر اساس زبان با یک ستون اضافه برای کل خطوط
3: بر اساس فایل به همراه زبان
4: بر اساس فایل با ستون کل خطوط
5: بر اساس فایل به همراه زبان و ستون کل خطوط
عدم نمایش نرخ پردازش خطوط و فایل‌ها در هدر خروجی. این کار خروجی را قطعی (deterministic) می‌کند.
نوشتن نتایج در قالب نشانه‌گذاری شیء جاوااسکریپت (JSON).
نوشتن نتایج به عنوان متن قالب‌بندی‌شده به زبان مارک‌داون (Markdown).
هم‌معنی با --report-file=FILE.
نمایش به‌روزرسانی پیشرفت پس از پردازش هر N فایل (پیش‌فرض N=100). تنظیم N روی 0 برای فرونشاندن خروجی پیشرفت؛ هنگام تغییر مسیر خروجی به STDOUT مفید است.
فرونشاندن تمام پیام‌های اطلاعاتی به جز گزارش نهایی.
نوشتن نتایج در FILE به جای خروجی استاندارد.
تجمیع نتایجی که دارای خطوط X کمتر از N هستند در دسته 'Other' (سایر موارد)، که در آن X یکی از موارد زیر است:
c به معنای خطوط کد
f به معنای فایل‌ها
m به معنای خطوط کامنت
cm به معنای خطوط کد + کامنت‌ها افزودن علامت درصد به N، محاسبه را از شمارش مستقیم به درصد تغییر می‌دهد. همراه با --diff یا --by-file نادیده گرفته می‌شود.
نوشتن نتایج به صورت عبارات SQL CREATE و INSERT که توسط یک برنامه پایگاه‌داده مانند SQLite قابل خواندن باشد. اگر FILE برابر - باشد، خروجی به STDOUT ارسال می‌شود.
الحاق عبارات درج SQL (INSERT) به فایل مشخص‌شده با --sql و عدم تولید گزینه ایجاد جدول (CREATE TABLE).
استفاده از name به عنوان شناسه پروژه برای اجرای جاری. تنها همراه با گزینه --sql معتبر است.
نوشتن عبارات SQL در سبک داده‌شده به جای فرمت پیش‌فرض SQLite. سبک‌ها شامل Oracle و Named_Columns هستند.
برای گزارش‌های متنی ساده، نمایش خط خروجی SUM: حتی اگر تنها یک فایل ورودی پردازش شده باشد.
نوشتن نتایج در قالب XML.
ارجاع به FILE به عنوان شیوه‌نامه XSL درون خروجی XML. اگر FILE داده نشود، یک شیوه‌نامه پیش‌فرض به نام cloc.xsl می‌نویسد. این سوییچ --xml را به اجبار فعال می‌کند.
نوشتن نتایج در قالب YAML.

شمارش خطوط کد در یک فایل tar فشرده پرل 5.10.0 در سیستم‌عامل شبه‌یونیکس:

cloc perl-5.10.0.tar.gz

شمارش تغییرات در فایل‌ها، کد و کامنت‌ها بین نسخه‌های 2.6.6 و 2.7 پایتون:

cloc --diff Python-2.6.6.tar.bz  Python-2.7.tar.bz2

برای مشاهده چگونگی تراز کردن فایل‌ها توسط cloc جهت مقایسه بین دو پایگاه کد، از گزینه --diff-alignment=FILE استفاده کنید. در اینجا اطلاعات تراز در "align.txt" نوشته می‌شود:

cloc --diff-alignment=align.txt gcc-4.4.0.tar.bz2  gcc-4.5.0.tar.bz2

شمارش تغییرات فایل، کد و کامنت بین دو کامیت گیت:

cloc --git --diff b409850824 HEAD

چاپ زبان‌های شناخته‌شده:

cloc --show-lang

حذف کامنت‌ها از "foo.c" و ذخیره نتیجه در "foo.c.nc" (پسوند "nc" دلخواه است؛ در اینجا برای نشان دادن "بدون کامنت" استفاده شده است):

cloc --strip-comments=nc foo.c

مثال‌های بیشتر را می‌توان در https://github.com/AlDanial/cloc یافت.

ندارد.

ندارد.

sloccount(1)

برنامه cloc توسط Al Danial <al.danial@gmail.com> نوشته شده است و حق نشر آن (C) 2006-2026 متعلق به <al.danial@gmail.com> است.

این صفحه راهنما در ابتدا توسط Jari Aalto <jari.aalto@cante.net> نوشته شده است.

کد و مستندات هر دو تحت مجوز گنو جی‌پی‌ال (GNU GPL) نسخه ۲ یا (به انتخاب شما) هر نسخه جدیدتر منتشر شده‌اند. برای اطلاعات بیشتر در مورد مجوز، به نشانی http://www.gnu.org/copyleft/gpl.html مراجعه کنید.

2026-02-04 cloc