Implementation
final FigSpec sccSpec = FigSpec(
name: 'scc',
description:
'Sloc, Cloc and Code. Count lines of code in a directory with complexity estimation',
options: [
FigOption(
name: ['--avg-wage'],
description: 'Average salary value used for COCOMO calculations',
args: [
FigArg(
name: 'int',
defaultValue: '56286',
),
],
),
FigOption(
name: ['--binary'],
description: 'Disable binary file detection',
),
FigOption(
name: ['--by-file'],
description: 'Display output for every file',
),
FigOption(
name: ['--ci'],
description: 'Enable CI output settings where stdout is ASCII',
),
FigOption(
name: ['--cocomo-project-type'],
description:
'Change the COCOMO model type (allows custom models, eg. "name,1,1,1,1")',
args: [
FigArg(
name: 'string',
defaultValue: 'organic',
suggestions: [
FigSuggestion(name: 'organic', icon: 'fig://icon?type=string'),
FigSuggestion(
name: 'semi-detached', icon: 'fig://icon?type=string'),
FigSuggestion(name: 'embedded', icon: 'fig://icon?type=string'),
],
),
],
),
FigOption(
name: ['--count-as'],
description:
'Count a file extension as a language (comma-separated key:value list, eg. jst:js,tpl:Markdown)',
args: [
FigArg(
name: 'string',
// Approximating keyValueList logic
generators: [
FigGenerator(
script: ['scc', '--language'],
postProcess: (String out, [List<String>? tokens]) {
final sccLangs = processSccLanguages(out);
// Simple logic: suggest extensions
// A full implementation would check tokens for ':' to suggest languages
return sccLangs.extensions.entries.map((e) {
return FigSuggestion(
name: e.key,
description: e.value,
icon: 'fig://icon?type=string',
insertValue: '${e.key}:',
);
}).toList();
},
),
],
),
],
),
FigOption(
name: ['--debug'],
description: 'Enable debug output',
),
FigOption(
name: ['--exclude-dir'],
description: 'Directories to exclude',
args: [
FigArg(
name: 'strings',
template: 'folders',
getQueryTerm: ',',
),
],
),
FigOption(
name: ['--file-gc-count'],
description: 'Number of files to parse before turning the GC on',
args: [
FigArg(
name: 'int',
defaultValue: '10000',
),
],
),
FigOption(
name: ['-f', '--format'],
description: 'Set output format',
args: [
FigArg(
name: 'string',
defaultValue: 'tabular',
suggestions: suggestOutputFormats,
),
],
),
FigOption(
name: ['--format-multi'],
description:
'Multiple outputs with different formats (comma-separated key:value list, eg. tabular:stdout,csv:scc.csv)',
args: [
FigArg(
name: 'string',
// Approximating keyValueList for formats
suggestions: suggestOutputFormats.map((s) {
return FigSuggestion(
name: s.name,
description: s.description,
icon: s.icon,
insertValue: '${s.name}:',
);
}).toList(),
),
],
),
FigOption(
name: ['--gen'],
description: 'Identify generated files',
),
FigOption(
name: ['--generated-markers'],
description:
'Identify generated files by the presence of a string (comma-separated list)',
args: [
FigArg(
name: 'strings',
defaultValue: 'do not edit,<auto-generated />',
),
],
),
FigOption(
name: ['-h', '--help'],
description: 'Help for scc',
),
FigOption(
name: ['-i', '--include-ext'],
description: 'Limit to these file extensions (comma-separated list)',
args: [
FigArg(
name: 'strings',
getQueryTerm: ',',
// Dynamic suggestion of extensions not implemented
),
],
),
FigOption(
name: ['--include-symlinks'],
description: 'Count symbolic links',
),
FigOption(
name: ['-l', '--languages'],
description: 'Print supported languages and extensions',
),
FigOption(
name: ['--large-byte-count'],
description:
'Number of bytes a file can contain before being removed by the GC',
args: [
FigArg(
name: 'int',
defaultValue: '1000000',
),
],
),
FigOption(
name: ['--large-line-count'],
description:
'Number of lines a file can contain before being removed by the GC',
args: [
FigArg(
name: 'int',
defaultValue: '40000',
),
],
),
FigOption(
name: ['--min'],
description: 'Identify minified files',
),
FigOption(
name: ['--min-gen'],
description: 'Identify minified or generated files',
),
FigOption(
name: ['--min-gen-line-length'],
description:
'Number of bytes per average line for file to be considered minified or generated',
args: [
FigArg(
name: 'int',
defaultValue: '255',
),
],
),
FigOption(
name: ['-M', '--not-match'],
description: 'Ignore files and directories matching regular expression',
args: [
FigArg(
name: 'regex',
),
],
),
FigOption(
name: ['-o', '--output'],
description: 'Output filename (default stdout)',
args: [
FigArg(
name: 'string',
template: 'filepaths',
),
],
),
FigOption(
name: ['--remap-all'],
description: 'Inspect every file and remap by checking for a string',
args: [
FigArg(
name: 'string',
suggestions: [
FigSuggestion(name: 'shebang'),
FigSuggestion(name: 'vim-modeline'),
],
),
],
),
FigOption(
name: ['--remap-unknown'],
description:
'Inspect files without a known extension and remap by checking for a string',
args: [
FigArg(
name: 'string',
suggestions: [
FigSuggestion(name: 'shebang'),
FigSuggestion(name: 'vim-modeline'),
],
),
],
),
FigOption(
name: ['--size-unit'],
description: 'Set size unit',
args: [
FigArg(
name: 'string',
defaultValue: 'si',
suggestions: [
FigSuggestion(name: 'si', description: '1000 bytes = 1 KB'),
FigSuggestion(name: 'binary', description: '1024 bytes = 1 KiB'),
FigSuggestion(name: 'mixed'),
FigSuggestion(name: 'xkcd-kb', description: '1000 bytes = 1 KiB'),
FigSuggestion(name: 'xkcd-kB', description: '1024 bytes = 1 KB'),
],
),
],
),
FigOption(
name: ['--sloccount-format'],
description: 'Format output as sloccount',
),
FigOption(
name: ['--sort'],
description: 'Column to sort by',
args: [
FigArg(
name: 'column',
defaultValue: 'files',
suggestions: [
FigSuggestion(name: 'files'),
FigSuggestion(name: 'name'),
FigSuggestion(name: 'lines'),
FigSuggestion(name: 'blanks'),
FigSuggestion(name: 'code'),
FigSuggestion(name: 'comments'),
FigSuggestion(name: 'complexity'),
],
),
],
),
FigOption(
name: ['--sql-project'],
description: 'Use the supplied name for the project when generating SQL',
args: [
FigArg(
name: 'string',
),
],
),
FigOption(
name: ['--trace'],
description:
'Enable trace output (not recommended when processing large files)',
),
FigOption(
name: ['-v', '--verbose'],
description: 'Verbose output',
),
FigOption(
name: ['--version'],
description: 'Print version',
),
FigOption(
name: ['-w', '--wide'],
description: 'Wider output with additional statistics',
),
],
);