Release Notes for cloc version 1.98 https://github.com/AlDanial/cloc Aug. 19, 2023 New Languages and File Types: o Asymptote o CoCoA 5 o Constraint Grammar o Hare o Jai o Linker Script o NetLogo o Typst Updates: o Added .editorconfig as an INI extension. o Added .cppm, .ixx, .ccm, .cxxm, .c++m as C++ extensions. o Improved handling of trailing slash with --match-d o --exclude-list-file with --git now works as expected. o --not-match-d, --not-match-f can now be repeated. o --quiet mode is now enabled when STDOUT is not a terminal. This makes for cleaner output when piping to other programs. o New switch --include-content=regex to only count files whose content matches the given regex. o New switch --only-count-files to only count files. Counts for blank, comment, and code lines will be zero. Bug fixes: o --no-recurse on Windows o Improved exclusion of autogenerated files on Windows. o Improved handling of path separators with git in PowerShell. o Resolve nondeterministic --diff output. o --hide-rate supports all output file types o Fixed --diff-list-file with unknown listed file. o Fixed parsing of verbose option in the cloc configuration file. NOTE: The next release of cloc will be 2.00. Despite the major version number bump, there will be no breaking changes. ============================================================================ Release Notes for cloc version 1.96 https://github.com/AlDanial/cloc Dec. 18, 2022 New Languages and File Types: o Cairo o Carbon o Circom o Containerfile o HolyC o kvlang o Nunjucks o OpenSCAD o P4 o Pest o Pony o TEAL o WGSL Updates: o New switch --diff-list-files to run diff given two list files. o Handle comments embedded in OCaml strings. o Write empty JSON and XML structures if the inputs yield zero counts. o Including Win32::LongPath to support long paths on Windows. o Better support for building and running Docker image on Windows o Better output file names when running with --count-and-diff and --out. o Resolve internal file handle conflict when running --diff with --sdir or --categorized. ============================================================================ Release Notes for cloc version 1.94 https://github.com/AlDanial/cloc July 4, 2022 New Languages and File Types: o Derw o Finite State Language o Flatbuffers o Futhark o Godot Shaders o HTML EEx o Lem o PEG, peg.js, peggy, tspeg o Text (.txt and .text) o Visual Studio Module o X++ Updates: o Handle empty Unicode files which contain only a BOM (byte order mark). o The arguments to --include-lang are now case insensitive. o .cjs added as JavaScript extension. o Switches --git and --xml together now include additional git metadata (origin, branch, commit hash) in the XML output. Future releases will include these additions in YAML, JSON, SQL, and Markdown output as well. o New switch --no-recurse prevents recursive directory traversal. ============================================================================ Release Notes for cloc version 1.92 https://github.com/AlDanial/cloc Dec. 5, 2021 New Languages and File Types: o GraphQL o Metal Shading Language o PlantUML o Properties o Umka Updates: o The .bzl and .bazel extensions are now associated with Starlark. o Added support for Puppet functions and type aliases. o Removed reliance on XML definition with --force-lang-def o Fixed broken --csv-delimiter handling. o Fixed broken interaction of --vcs=git with --max-file-size; support floating point value for --max-file-size. o Improved support for uniform handling of uppercase and lowercase filenames and extensions on Windows. o Recognize CMakeLists.txt on Windows. o Fixed handling of --unicode for small files. o Updated Dockerfile to produce a smaller image. o Improved contents of --ignored file (now includes skipped binary files and does not include directory names). o Identify SCSS separately from Sass. o Updated Sass filters to handle C++ style comments. o Improved support for Assembly. o Recognize :: comments in DOS batch files. o Properly handle explicitly-excluded files (for example, .gitignore) with --diff. ============================================================================ Release Notes for cloc version 1.90 https://github.com/AlDanial/cloc May 1, 2021 New Languages and File Types: o BizTalk Orchestration o BizTalk Pipeline o Cake Build Script o C# Designer o CSV o Delphi Form o Gleam o Godot Resource o Godot Scene o Juniper Junos o ReScript o Ring o Visual Studio Solution o Web Services Description o Zig Updates: o Dockerfile: add .[dD]ockerfile as an extension; treat files named Dockerfile.ext as Dockerfile unless ext maps to a recognized language other than cmake or m4. o Identify autogenerated C# files. o If getting input from a list file or using a language definition file, also check for (and use, if it exists) an options.txt file in the same directory. o Use --csv-delimiter for --ignored, --categorized output. o Support diff summation in csv format. o Update cloc's Unix Makefile to support macOS o Rename Junos to Juniper Junos o Stratify Visual Basic to for Applications, .NET, Script o Use tar on Windows 10 instead of zip with --git --diff o Track upper/lowercase file names on Windows to permit consistent diffs. o Support nested Elm comments. o Update to Regexp::Common 2017060201. o Minimum Perl version is now 5.10.0 o New options --skip-leading, --summary-cutoff o Refine comment definitions for ASP.NET, Razor o Handle Julia docstrings. o Adjust timeout and diff_timeout values to avoid alarm overflows. o Add extensions .btproj, .msbuild for MSBuild script Bug Fixes: o Add missing Raku_or_Prolog() subroutine. o Handle UTF encoded list files (file given to --list-file). o Improved support for options parsing from config file. o Catch unidentified files via --diff-list-file. o Don't insert extra newlines when stripping with --unicode. o Strip literal '\x' from JSON output strings. o Improve logic for detecting Unicode files less than 90 bytes in size. o Fix divide by zero classifying nonreadable .b files. o Escape backslash for 'report_file' entry in JSON, YAML on Windows. ============================================================================ Release Notes for cloc version 1.88 https://github.com/AlDanial/cloc Sept. 12, 2020 New Languages and File Types: o LLVM IR o Logos o Meson o Mojo o Odin o Jinja Templates o WXML o WXSS Updates: o Support MATLAB block comments. o More flexible matching of git hashes. o Case insensitive diff file alignment on Windows. o Add .BAS as a Visual Basic extension o Rename Objective C to Objective-C Bug Fixes: o Add missing Raku_or_Prolog() subroutine. o Handle UTF encoded list files (file given to --list-file). o Improved support for options parsing from config file. o Catch unidentified files via --diff-list-file. o Don't insert extra newlines when stripping with --unicode. ============================================================================ Release Notes for cloc version 1.86 https://github.com/AlDanial/cloc May 17, 2020 New Languages and File Types: o ASP.NET Core Blazor WASM (*.razor) o Bazel o dhall o Raku (renamed from Perl6) o Squirrel o SugarSS o Svelte o TNSDL o Remove .tsv as a RobotFramework extension o Add .inl as a C++ extension. o Add #_ as a Closure comment marker. Updates: o Provide alternate algorithms for --git --diff: --git-diff-rel computes differences of only files that have changed between the two git commits (this is now the default action with "--git --diff") --git-diff-all computes differences between all files in the repo between the two git commits (this was the default action with "--git --diff" behavior in 1.84) o New cloc releases will be accompanied by Docker instances on Dockerhub. o Support reading file names from a STDIN pipe. o Check unrecognized files to see if they contain XML. o Switch --vcs supports an 'auto' option to automatically determine if one is counting in a subversion or git repository. o Expand git archives in user-provided scratch directory with --sdir. o Mask comment markers in Kotlin raw strings. o Make output more deterministic with secondary sort of results. o Avoid computation of log(0). o Improve --strip-str-comments logic. o Improve handling of triple quotes (Python, Groovy, Gradle). o New switch --diff-list-file, to perform diff's using a provided list file containing file pairs to compare. o New switch --ignore-case-ext to ignore upper/lowercase of file extension. Bug Fixes: o Fix --exclude-list-file with --diff. o Fix creation of empty tar file if this happens during --git --diff. o Restore --exclude-lang functionality with --diff. ============================================================================ Release Notes for cloc version 1.84 https://github.com/AlDanial/cloc September 22, 2019 New Languages and File Types: o APL o Apache Thrift o Imba o IPL o SaltStack Updates: o Improved handling of --git --diff o Add .podspec as a Ruby file extension. o New switch, --stat, to force a stat check of directories. This enables traversal of directory types whose nlink count does not match the count of subdirectories (examples: CD-ROM, FAT, AFS). o Force stat on top level directories. This is companion logic to the new --stat switch. o Add file extensions defined by the Linguist project. o New switch, --exclude-content, to exclude files if any of their lines match a regex. o New switch, --timeout, to give control over timeouts on direct counts (as opposed to diff timeouts). o On Windows, lower batch size on git archive commands to 100 files (the value is 1,000 on *nix). o Better identification of Smarty .tpl template files. Bug Fixes: o On Windows, use double quotes for git archive entries. o On Windows, double slash path separators with --by-file and JSON output. o On Windows, replace / with \\ in results only when running with --by-file. o Fix header line metrics for files/sec and lines/sec when doing --diff. o Python: handle cases of /* or */ embedded in strings (this conflicted with internal logic which replaced docstring triple quotes with C comments). o Fix mishandling of --exclude-dir with --follow-link. o Fix doubly-counted #! line o Support --hide-rate with csv output. ============================================================================ Release Notes for cloc version 1.82 https://github.com/AlDanial/cloc May 3, 2019 New Languages and File Types: o Apex Class o DIET o Fennel o FXML o Jupyter notebook files (.ipynb) o Python wheel files (.whl) o SVG o reStructuredText Updates: o Handle backslashed quotes in strings to improve --strip-str-comments logic. o Improve Perl v. Prolog identification. o New switch --docstring-as-code to count Python docstrings as code. o Partial support for Lua nested comments. o Renamed Skylark to Starlark. o Modified Java filter to try to handle embedded comments better. o Recognize groovy as one of the #! languages. o Add .pyw as a file extension for Python. o Update comment definitions for Velocity Template Language. o Override file alignment logic with --diff when only two files are given. o Identify TeX v. Visual Basic for .cls file extension. o Include result summation line with --csv output. o Support --csv, --json, --md, --xml, --yaml output types for the --ignored debug file. o Force IO encoding to allow wider Unicode characters for creating Windows exe's with PAR::Packer ============================================================================ Release Notes for cloc version 1.80 https://github.com/AlDanial/cloc Oct. 5, 2018 This is a bug-fix release to solve mishandling of git inputs for straight counts in 1.78 (--git --diff works ok in 1.78), https://github.com/AlDanial/cloc/issues/328. New Languages: o ReasonML Updates: o New SQL output style option with "--sql-style Named_Columns". This includes the table "t" column names in each insert statement. o New option --file-encoding to create all output files using the given file encoding (for example "--file-encoding o Add escript as script language for Erlang. o Improved handling of custom Smarty definitions through --read-lang-def. o Better diff logic when comparing two files. o Faster program start on the Unix-tuned version of cloc when multiple processors are not used. ============================================================================ Release Notes for cloc version 1.78 https://github.com/AlDanial/cloc Sept. 7, 2018 New Languages: o EJS o Gradle o Igor Pro o JSON5 o Nix o R Markdown o SparForte o Xtend Updates: o Interpret "--diff-timeout 0" as allowing unlimited time to compute diffs. o Add .inl extension for C++ o Improve language rules for Assembly and JCL. o Better handling of OCaml comments (don't just use Pascal rules). o Handle unusual file names with --use-sloccount. o Remove GNU grep specific -P option with --use-sloccount (fall back to simpler BSD grep options). o Handle OCaml nested comments. o Remove debug print statement for counts of Rmd (R markdown) files. o New switch --include-ext to only count files with the given extension. o New switch --config to load command line switches from a file. o New switch --hide-rate to suppress header line (makes the output deterministic). o Skip header line when combining diff reports. o Allow any number (including just one) of diff reports to be summed. o Exit early if --diff arguments are the same. o New switch --strip-str-comments to (try to) avoid 'Complex regular subexpression recursion limit' warning. o Run cleanly under Perl 5.28 and 5.32 by backslashing braces in regex. o Suppord Idris block comments. o Set UTF-8 encoding on XML and XSL files generated by cloc. o New switch --write-lang-def-incl-dup to include files with extension collisions (but should be used with care because the resulting language definition file will be rejected by cloc until all collisions have been resolved). Bug Fixes: o Correctly handle --not-match-d and --follow-links together. o Fix --git --diff handling of large file sets. o Remove \$ from git pathspec filename-cleansing regex as git already handles such filename mangling o Remove debug die() invocation in make_file_list(). o Fix improperly formatted JSON emitted with --by-file-by-lang. o Improve accuracy of C#/Smalltalk disambuguator (was biased toward counting .cs files as Smalltalk). o Improve accuracy of TypeScript/Qt Linguist disambuguator. o More robust YAML output by quoting file and language names. o Handle more unusual file names with --git --diff ============================================================================ Release Notes for cloc version 1.76 https://github.com/AlDanial/cloc February 9, 2018 New Languages: o Agda o AsciiDoc o Chapel o Fish Shell o Gencat NLS o Lean o HCL o Oracle PL/SQL o PL/M o ProGuard o RAML o Skylark o SWIG Updates: o Performance improvement by using multiple cores for both straight counts and --diff via the new --processes option added by Sietse Snel, https://github.com/stsnel. o Support --git on Windows. o Improve identification of Qt Project files (instead of IDL). o Fix language determination logic so that languages that map to the same file extension and have ties in the number of accumulated points always return the same result. o Add support for replace_between_regex in --write_lang_def and --read_lang_def. o Add SUM section to JSON, YAML output with --diff. o Make numeric values in JSON output numbers instead of strings. o Optionally exclude autogenerated files with new --no-autogen (currently only supports the Go language). Bug Fixes: o Remove temp directory prefix for YAML and JSON output when counting git archives with --by-file. o Properly handle git files with spaces embedded in the file name. o Remove a debug regex inadvertently included in v1.74. ============================================================================ Release Notes for cloc version 1.74 https://github.com/AlDanial/cloc September 8, 2017 New Languages: o BrightScript o Cucumber o Drools o F# Script o GraphQL o Idris o Literate Idris o Smalltalk o Solidity o Stata o TOML Updates: o New option, --git, to allow git commit hashes and branch names as inputs (issue 205). o Add .asd extension for Lisp. o Add .snapshot to the list of excluded directories. o New option --no-autogen to ignore files generated by code production systems like GNU autoconf. o Rename "ASP.Net" to "ASP.NET". o Improvements to Specman e parsing (issue 175). o Support uppercase CPP extension (issue 177). o Support triple extensions. o Improve language distinction between C# and Smalltalk (issue 160). o Consider Elixir docs as comments. o Handle Python docstrings made with single quotes. o Replace built-in "is it a file?" and "is it a directory?" with native Perl -f and -d operators (these were unreliable on older versions of Perl on Windows). o Put timeout around Regexp::Common regex evaluation to prevent hangs on unbalanced comment markers within huge strings (issue 206). o Fix Pascal regex with '{' for Perl version >= 5.26 (issue 209) and '(*', '*)' comment matching (issue 212). o Rename Antlr to ANTLR Grammar. o Add .g4 extension for ANTLR Grammar. o Replace soon-to-be deprecated File::Glob::glob() with File::Glob::bsd_glob() (issue 214). o Revert from charset=iso-8859-1 to charset=utf-8 on undocumented --html option. o For Assembly, process # comments before C++ comments. Bug Fixes: o Correct handling of remove_between_general and remove_between_regex when running with --read-lang-def (issue 166) o Fix bug handling balanced parentheses in Forth (issue 183) o Force legal output filenames with --count-and-diff and --out (issue #220). ============================================================================ Release Notes for cloc version 1.72 https://github.com/AlDanial/cloc January 14, 2017 New Languages: o Antlr o Dockerfile o Glade o GLSL o Lisp Flavored Erlang o Mako o PO files (used for translations in GTK programming) o RapydScript o Slice interface specification language o Specman e o Vue.js Component Updates: o Support for Lua --[[ ]] block comments. o Improve --not-match-d support. o Add extension .tsx for TypeScript. o Renamed SASS to Sass. o '--vcs git' now ignores code in git submodules. o Add .p6 and .pm6 extensions for Perl 6. o Add .phtml extension for PHP. o Add .psm1 and .psd1 extensions for PowerShell. o Only print a small usage summary when running cloc without arguments. Now have to run 'cloc --help' to get the huge output. Bug Fixes: o Filter updates for Assembly, Groovy to prevent infinite recursion in regex. o Correct handling of Julia block comments. o Correct output when running with '--diff --json' or '--diff --yaml'. o Fix logic error in code that handled --exclude-dir. o Fix error in handling of '--vcs X' where X is a user-provided command to generate a list of files. ============================================================================ Release Notes for cloc version 1.70 https://github.com/AlDanial/cloc July 1, 2016 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * v1.70 is a bugfix release to correct the "which: no abc in" * * problem seen on non-Debian based Linux distributions; ref. * * https://github.com/AlDanial/cloc/issues/105 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * New Languages: o Freemarker Template o Haxe o Nim o TeX Updates: o Improved handling for Forth comments. Bug Fixes: o Fixed "which: no abc in" bug; issue 105 https://github.com/AlDanial/cloc/issues/105 ============================================================================ Release Notes for cloc version 1.68 https://github.com/AlDanial/cloc June 3, 2016 New Languages: o Blade o Brainfuck o builder o Clean o INI o JSX o liquid o Logtalk o Markdown o Mathematica o Pug o Qt Linguist o Slim o TTCN Updates: o --help output now goes to STDOUT instead of STDERR. o Shortened cloc's output header line by removing "https:" from the github repository URL. o Add block comment support to CoffeeScript. o Improve Coq/Verilog disambiguator by recognizing more Coq keywords. o Improve handling of HAML block comments. o Improve Pascal/Puppet disambiguator. o Improve Perl/Prolog disambiguator by recognizing Perl HERE documents. o Add .cuh extension for CUDA. o Add .hxx extension for C/C++ header files. o Associate .mk extension with make. New options and features: --use-sloccount If SLOCCount is installed, use its compiled executables c_count, java_count, pascal_count, php_count, and xml_count instead of cloc's counters. SLOCCount's compiled counters are substantially faster than cloc's and may give a performance improvement when counting projects with large files. However, these cloc-specific features will not be available: --diff, --count-and-diff, --strip-comments, --unicode. --vcs= Invoke a system call to to obtain a list of files to work on. If is 'git', then will invoke 'git ls-files'. If is 'svn' then will invoke 'svn list -R'. The primary benefit is that cloc will then skip files explicitly excluded by the versioning tool in question, ie, those in .gitignore or have the svn:ignore property. Alternatively may be any system command that generates a list of files. Note: cloc must be in a directory which can read the files as they are returned by . cloc will not download files from remote repositories. 'svn list -R' may refer to a remote repository to obtain file names (and therefore may require authentication to the remote repository), but the files themselves must be local. o Handle .deb archive files on Unix-like operating systems that have the Debian 'dpkg-deb' command. This is only useful for counting lines in Debian packages that contain source code--most contain only compiled executables. Bug Fixes: o Updated documentation for --exclude-dir to prohibit path separators. o Correct file path normalization problem when directory contains trailing slash. o --list-file: Return an empty list if the file cannot be read. o --exclude-dir: correctly handle command line input consisting of a file with leading directory names, eg abc/def/hello.c, by first checking that parent directories aren't in exclusion list. o Expand behavior of --fullpath to also work with --not-match-d. o Split into two statements expressions like "scalar(split(..))" which are deprecated in Perl 5.22. o --sum-reports: Give a useful error message when encountering an unknown language during report summation. ============================================================================ Release Notes for cloc version 1.66 https://github.com/AlDanial/cloc January 23, 2016 New Languages: o AspectJ o Coq o CSON (CoffeeScript Object Notation) o Crystal o DOORS Extension Language o EEx (Embedded Elixir) o Elm o Forth o GDScript o Jam o Nemerle o PowerBuilder o Stylus o Twig o XHTML o XMI (XML Metadata Interchange) o zsh Updates: o Add block comment support to CoffeeScript. o .xhtml is no longer associated with JavaServer Faces; instead it is counted as XHTML o Remove association of .config to ASP.Net (.config is too general to be appropriated by one language). o Support .hlsl extension for HLSL. o Changes to support Perl v5.22: * Remove references to deprecated "defined(@array)". * Remove "no warnings 'deprecated'" as it is no longer needed. o Greater reliance on Regexp::Common's C++ regex instead of using internal // filter. o Update code pulled from Regexp::Common 2.120 to 2013031301. o Support .f and .for extensions for Forth and disambiguate between Fortran and Forth. o Better output with --explain for languages that share file extensions. o Ignore .o.cmd files as they are Linux kernel compilation optimization files. o Add .kts extension for Kotlin. o Add .cljc extension for ClojureC. o Add .ui extension for Qt. o Support php and php5 as #! scripting languages. New options and features: --json Write the results as JavaScript Object Notation (JSON) formatted output. --fullpath Modifies the behavior of --match-f or --not-match-f to include the file's path in the regex, not just the file's basename. (This does not expand each file to include its absolute path, instead it uses as much of the path as is passed in to cloc.) --md Write the results as Markdown-formatted text. --verbose Synonym for -v. Bug Fixes: o Don't write language definition for "(unknown)" (via --write-lang-def). o Fix length of hyphen line with --sum-reports. o Fix uninitialized variable bug when --explain is given an unknown language. o Force files ending with .smarty to be counted as Smarty (unless over- ridden by --force-lang=X). o Fix hash reference bug triggered with '--csv --by-percent' combination . o Correctly recognize R files on Windows. ============================================================================ Release Notes for cloc version 1.64 http://cloc.sourceforge.net June 27, 2015 New Languages: o DITA o dtrace o Elixir o Embedded Ruby o Julia o Mercury o Prolog o Protocol Buffers o PureScript o Qt Project o Racket o SAS o Standard ML o Titanium Style Sheet o Visual FoxPro o Windows Module Definition Updates: o Add support for sharpsign vertical bar block comments in Lisp. o Added python, python2.6, python2.7, python3, python3.3, python3.4 as script executables to identify Python files that don't end in .py. o Added rexx and regina as script executables for Rexx. o Extend Assembly filters to include !, |, @, --. o Add for, FOR, ftn, FTN extensions for Fortran 77. o Improve --show-lang so that it exactly matches a language instead of finding the language in a regex (eg 'C' matched nearly everything). o Update --explain to also print language extensions. o Change --sql schema by adding fields File_dirname, File_basename to table 't' of SQL output to simplify obtaining per-directory metrics o Escape embedded single quotes in file names (bug #127) for SQL output. o Improved language detection for Objective C (earlier misidentified as MATLAB or other .m languages). o Sort duplicate file lists by full path instead of basename to give repeatable output. o Change SQL schema 'text' type to more standard 'varchar(500)'. o Added .gradle extension for Groovy. o Better handling of files ending with .d (could be Linux init scripts). o Added .robot extension for RobotFramework. o Support Python unicode docstrings, patch by . o Ignore line ending styles when diff'ing Windows and Unix files. New options and features: --count-and-diff First perform direct code counts of source file(s) of and separately, then perform a diff of these. Inputs may be pairs of files, directories, or archives. See also --diff, --diff-alignment, --diff-timeout, --ignore-case, --ignore-whitespace. --include-lang=[,L2,] Count only the given comma separated languages L1, L2, L3, et cetera. Patch by Ryan Lindeman. --by-percent X Instead of comment and blank line counts, show these values as percentages based on the value of X in the denominator: X = 'c' -> # lines of code X = 'cm' -> # lines of code + comments X = 'cb' -> # lines of code + blanks X = 'cmb' -> # lines of code + comments + blanks For example, if using method 'c' and your code has twice as many lines of comments as lines of code, the value in the comment column will be 200%. The code column remains a line count. Patch by Ryan Lindeman. --sql-style=