[{"data":1,"prerenderedAt":2420},["ShallowReactive",2],{"navigation_docs":3,"-reference-config-file":239,"-reference-config-file-surround":2415},[4,29,94,114,184],{"title":5,"icon":6,"path":7,"stem":8,"children":9},"Start",false,"\u002Fstart","1.start",[10,14,19,24],{"title":11,"path":7,"stem":12,"icon":13},"What jscpd finds","1.start\u002Findex","i-lucide-house",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fstart\u002Finstallation","1.start\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quickstart","\u002Fstart\u002Fquickstart","1.start\u002F3.quickstart","i-lucide-rocket",{"title":25,"path":26,"stem":27,"icon":28},"Configuration basics","\u002Fstart\u002Fconfiguration","1.start\u002F4.configuration","i-lucide-settings-2",{"title":30,"icon":6,"path":31,"stem":32,"children":33,"page":6},"Guides","\u002Fguides","2.guides",[34,39,44,49,54,59,64,69,74,79,84,89],{"title":35,"path":36,"stem":37,"icon":38},"Use jscpd in CI","\u002Fguides\u002Fci","2.guides\u002F01.ci","i-lucide-github",{"title":40,"path":41,"stem":42,"icon":43},"Pre-commit hooks","\u002Fguides\u002Fpre-commit","2.guides\u002F02.pre-commit","i-lucide-git-commit",{"title":45,"path":46,"stem":47,"icon":48},"Fail only on new duplication","\u002Fguides\u002Fbaseline","2.guides\u002F03.baseline","i-lucide-git-compare",{"title":50,"path":51,"stem":52,"icon":53},"Monorepos","\u002Fguides\u002Fmonorepos","2.guides\u002F04.monorepos","i-lucide-folder-tree",{"title":55,"path":56,"stem":57,"icon":58},"Cross-format detection","\u002Fguides\u002Fcross-format","2.guides\u002F05.cross-format","i-lucide-layers",{"title":60,"path":61,"stem":62,"icon":63},"Agents","\u002Fguides\u002Fagents","2.guides\u002F06.agents","i-lucide-cpu",{"title":65,"path":66,"stem":67,"icon":68},"Editors","\u002Fguides\u002Feditors","2.guides\u002F07.editors","i-lucide-code",{"title":70,"path":71,"stem":72,"icon":73},"Duplication over git history","\u002Fguides\u002Fhistory","2.guides\u002F08.history","i-lucide-chart-no-axes-combined",{"title":75,"path":76,"stem":77,"icon":78},"Dashboard and health score","\u002Fguides\u002Fdashboard","2.guides\u002F09.dashboard","i-lucide-layout-dashboard",{"title":80,"path":81,"stem":82,"icon":83},"Dead code","\u002Fguides\u002Fdead-code","2.guides\u002F10.dead-code","i-lucide-ghost",{"title":85,"path":86,"stem":87,"icon":88},"Comparing two codebases","\u002Fguides\u002Fcompare","2.guides\u002F11.compare","i-lucide-git-compare-arrows",{"title":90,"path":91,"stem":92,"icon":93},"Semantic clones","\u002Fguides\u002Fsemantic-clones","2.guides\u002F12.semantic-clones","i-lucide-brain-circuit",{"title":95,"icon":6,"path":96,"stem":97,"children":98,"page":6},"Concepts","\u002Fconcepts","3.concepts",[99,104,109],{"title":100,"path":101,"stem":102,"icon":103},"Types of code clones","\u002Fconcepts\u002Fclone-types","3.concepts\u002F1.clone-types","i-lucide-copy",{"title":105,"path":106,"stem":107,"icon":108},"How detection works","\u002Fconcepts\u002Fhow-detection-works","3.concepts\u002F2.how-detection-works","i-lucide-scan-search",{"title":110,"path":111,"stem":112,"icon":113},"The health score","\u002Fconcepts\u002Fhealth-score","3.concepts\u002F3.health-score","i-lucide-heart-pulse",{"title":115,"icon":6,"path":116,"stem":117,"children":118,"page":6},"Reference","\u002Freference","4.reference",[119,124,129,134,171,176,180],{"title":120,"path":121,"stem":122,"icon":123},"CLI options","\u002Freference\u002Fcli","4.reference\u002F1.cli","i-lucide-terminal",{"title":125,"path":126,"stem":127,"icon":128},"The config file","\u002Freference\u002Fconfig-file","4.reference\u002F2.config-file","i-lucide-settings",{"title":130,"path":131,"stem":132,"icon":133},"Exit codes","\u002Freference\u002Fexit-codes","4.reference\u002F3.exit-codes","i-lucide-log-out",{"title":135,"icon":6,"path":136,"stem":137,"children":138},"Reporters","\u002Freference\u002Freporters","4.reference\u002F4.reporters\u002Findex",[139,141,146,151,156,161,166],{"title":135,"path":136,"stem":137,"icon":140},"i-lucide-file-chart-column",{"title":142,"path":143,"stem":144,"icon":145},"HTML reporter","\u002Freference\u002Freporters\u002Fhtml","4.reference\u002F4.reporters\u002F2.html","i-lucide-file-code",{"title":147,"path":148,"stem":149,"icon":150},"JSON reporter","\u002Freference\u002Freporters\u002Fjson","4.reference\u002F4.reporters\u002F3.json","i-lucide-braces",{"title":152,"path":153,"stem":154,"icon":155},"Badge reporter","\u002Freference\u002Freporters\u002Fbadge","4.reference\u002F4.reporters\u002F4.badge","i-lucide-award",{"title":157,"path":158,"stem":159,"icon":160},"SARIF reporter","\u002Freference\u002Freporters\u002Fsarif","4.reference\u002F4.reporters\u002F5.sarif","i-lucide-shield-check",{"title":162,"path":163,"stem":164,"icon":165},"CodeClimate reporter","\u002Freference\u002Freporters\u002Fcodeclimate","4.reference\u002F4.reporters\u002F6.codeclimate","i-lucide-flag-triangle-right",{"title":167,"path":168,"stem":169,"icon":170},"OpenMetrics reporter","\u002Freference\u002Freporters\u002Fopenmetrics","4.reference\u002F4.reporters\u002F7.openmetrics","i-lucide-activity",{"title":172,"path":173,"stem":174,"icon":175},"Supported formats","\u002Freference\u002Fsupported-formats","4.reference\u002F5.supported-formats","i-lucide-languages",{"title":177,"path":178,"stem":179,"icon":38},"GitHub Action","\u002Freference\u002Fgithub-action","4.reference\u002F6.github-action",{"title":181,"path":182,"stem":183,"icon":68},"Rust crates","\u002Freference\u002Frust-crates","4.reference\u002F7.rust-crates",{"title":185,"icon":6,"path":186,"stem":187,"children":188,"page":6},"Project","\u002Fproject","5.project",[189,194,199,204,229,234],{"title":190,"path":191,"stem":192,"icon":193},"Changelog","\u002Fproject\u002Fchangelog","5.project\u002F1.changelog","i-lucide-scroll-text",{"title":195,"path":196,"stem":197,"icon":198},"Migrating from v4 to v5","\u002Fproject\u002Fmigration","5.project\u002F2.migration","i-lucide-arrow-right-left",{"title":200,"path":201,"stem":202,"icon":203},"jscpd v4 (TypeScript)","\u002Fproject\u002Fv4","5.project\u002F3.v4","i-simple-icons-typescript",{"title":205,"icon":6,"path":206,"stem":207,"children":208},"Benchmarks","\u002Fproject\u002Fbenchmarks","5.project\u002F4.benchmarks\u002Findex",[209,211,216,220,225],{"title":205,"path":206,"stem":207,"icon":210},"i-lucide-gauge",{"title":212,"path":213,"stem":214,"icon":215},"Detection Speed","\u002Fproject\u002Fbenchmarks\u002Fdetection-speed","5.project\u002F4.benchmarks\u002F2.detection-speed","i-lucide-zap",{"title":217,"path":218,"stem":219,"icon":58},"Multi-Format Detection","\u002Fproject\u002Fbenchmarks\u002Fcross-format","5.project\u002F4.benchmarks\u002F3.cross-format",{"title":221,"path":222,"stem":223,"icon":224},"AI Token Efficiency","\u002Fproject\u002Fbenchmarks\u002Fai-token-efficiency","5.project\u002F4.benchmarks\u002F4.ai-token-efficiency","i-lucide-sparkles",{"title":226,"path":227,"stem":228,"icon":93},"Embedding Models","\u002Fproject\u002Fbenchmarks\u002Fembedding-models","5.project\u002F4.benchmarks\u002F5.embedding-models",{"title":230,"path":231,"stem":232,"icon":233},"Research","\u002Fproject\u002Fresearch","5.project\u002F5.research","i-lucide-graduation-cap",{"title":235,"path":236,"stem":237,"icon":238},"Articles","\u002Fproject\u002Farticles","5.project\u002F6.articles","i-lucide-newspaper",{"id":240,"title":125,"body":241,"description":2407,"extension":2408,"links":2409,"meta":2410,"navigation":2411,"path":126,"seo":2412,"stem":127,"__hash__":2414},"docs\u002F4.reference\u002F2.config-file.md",{"type":242,"value":243,"toc":2386},"minimark",[244,273,278,281,321,339,368,372,378,673,715,720,959,963,1194,1198,1356,1360,1453,1457,1633,1682,1689,1693,1705,1829,1832,1837,1882,1905,1908,1915,1919,1942,1967,1975,1981,2004,2008,2024,2069,2080,2086,2101,2105,2117,2209,2230,2233,2260,2264,2269,2281,2287,2315,2319,2352,2356,2382],[245,246,247,248,252,253,257,258,261,262,265,266,261,269,272],"p",{},"This page lists the keys jscpd reads from ",[249,250,251],"code",{},".jscpd.json",", their types, and the forms the file can take. Every key is a flag of the ",[254,255,256],"a",{"href":121},"command line"," spelled in camelCase: ",[249,259,260],{},"--min-tokens 70"," becomes ",[249,263,264],{},"\"minTokens\": 70",", ",[249,267,268],{},"--no-gitignore",[249,270,271],{},"\"noGitignore\": true",", and a flag given on the command line wins over the file. jscpd reads the file from the directory it runs in, never from the paths it scans.",[274,275,277],"h2",{"id":276},"where-jscpd-looks","Where jscpd looks",[245,279,280],{},"jscpd takes the first of these that exists and reads no other:",[282,283,284,296,301,311],"ol",{},[285,286,287,288,291,292,295],"li",{},"The file named with ",[249,289,290],{},"-c"," or ",[249,293,294],{},"--config",", from anywhere. A file that is missing or is not valid JSON stops the run with exit code 1.",[285,297,298,300],{},[249,299,251],{}," in the working directory.",[285,302,303,306,307,310],{},[249,304,305],{},".config\u002Fjscpd.json",", then ",[249,308,309],{},".config\u002F.jscpd.json",", in the working directory (5.1.0+).",[285,312,313,314,317,318,300],{},"The ",[249,315,316],{},"jscpd"," key of ",[249,319,320],{},"package.json",[245,322,323,324,327,328,331,332,335,336,338],{},"The run prints ",[249,325,326],{},"Using config from \u003Cfile>"," when it found one. The scanned path plays no part: ",[249,329,330],{},"jscpd packages\u002Fapi"," from the repository root reads the root's file and ignores ",[249,333,334],{},"packages\u002Fapi\u002F.jscpd.json",", so a scan from another directory needs ",[249,337,290],{},". A found file that does not parse is reported as a warning and skipped, and the search goes on to the next source.",[245,340,341,342,265,345,265,348,351,352,355,356,359,360,363,364,367],{},"Relative paths in ",[249,343,344],{},"path",[249,346,347],{},"baseline",[249,349,350],{},"healthInput"," and the dead-code ",[249,353,354],{},"rustDiagnostics"," resolve against the directory of the config file, which is the working directory for a found file. ",[249,357,358],{},"output"," is relative to the working directory, and the globs in ",[249,361,362],{},"ignore"," and ",[249,365,366],{},"pattern"," are matched against the paths below each scanned root.",[274,369,371],{"id":370},"the-file","The file",[245,373,374,375,377],{},"A ",[249,376,251],{}," most projects could start from:",[379,380,385],"pre",{"className":381,"code":382,"filename":251,"language":383,"meta":384,"style":384},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"threshold\": 3,\n  \"minTokens\": 50,\n  \"minLines\": 5,\n  \"mode\": \"mild\",\n  \"format\": [\"javascript\", \"typescript\", \"python\"],\n  \"ignore\": [\"**\u002Fnode_modules\u002F**\", \"**\u002Fdist\u002F**\", \"**\u002F*.min.js\"],\n  \"ignorePattern\": [\"(?s)\\\\A\u002F\\\\*.*?\\\\*\u002F\"],\n  \"reporters\": [\"console\", \"html\"],\n  \"output\": \"report\",\n  \"absolute\": false\n}\n","json","",[249,386,387,396,419,436,453,476,520,560,600,632,652,667],{"__ignoreMap":384},[388,389,392],"span",{"class":390,"line":391},"line",1,[388,393,395],{"class":394},"sMK4o","{\n",[388,397,399,402,406,409,412,416],{"class":390,"line":398},2,[388,400,401],{"class":394},"  \"",[388,403,405],{"class":404},"spNyl","threshold",[388,407,408],{"class":394},"\"",[388,410,411],{"class":394},":",[388,413,415],{"class":414},"sbssI"," 3",[388,417,418],{"class":394},",\n",[388,420,422,424,427,429,431,434],{"class":390,"line":421},3,[388,423,401],{"class":394},[388,425,426],{"class":404},"minTokens",[388,428,408],{"class":394},[388,430,411],{"class":394},[388,432,433],{"class":414}," 50",[388,435,418],{"class":394},[388,437,439,441,444,446,448,451],{"class":390,"line":438},4,[388,440,401],{"class":394},[388,442,443],{"class":404},"minLines",[388,445,408],{"class":394},[388,447,411],{"class":394},[388,449,450],{"class":414}," 5",[388,452,418],{"class":394},[388,454,456,458,461,463,465,468,472,474],{"class":390,"line":455},5,[388,457,401],{"class":394},[388,459,460],{"class":404},"mode",[388,462,408],{"class":394},[388,464,411],{"class":394},[388,466,467],{"class":394}," \"",[388,469,471],{"class":470},"sfazB","mild",[388,473,408],{"class":394},[388,475,418],{"class":394},[388,477,479,481,484,486,488,491,493,496,498,501,503,506,508,510,512,515,517],{"class":390,"line":478},6,[388,480,401],{"class":394},[388,482,483],{"class":404},"format",[388,485,408],{"class":394},[388,487,411],{"class":394},[388,489,490],{"class":394}," [",[388,492,408],{"class":394},[388,494,495],{"class":470},"javascript",[388,497,408],{"class":394},[388,499,500],{"class":394},",",[388,502,467],{"class":394},[388,504,505],{"class":470},"typescript",[388,507,408],{"class":394},[388,509,500],{"class":394},[388,511,467],{"class":394},[388,513,514],{"class":470},"python",[388,516,408],{"class":394},[388,518,519],{"class":394},"],\n",[388,521,523,525,527,529,531,533,535,538,540,542,544,547,549,551,553,556,558],{"class":390,"line":522},7,[388,524,401],{"class":394},[388,526,362],{"class":404},[388,528,408],{"class":394},[388,530,411],{"class":394},[388,532,490],{"class":394},[388,534,408],{"class":394},[388,536,537],{"class":470},"**\u002Fnode_modules\u002F**",[388,539,408],{"class":394},[388,541,500],{"class":394},[388,543,467],{"class":394},[388,545,546],{"class":470},"**\u002Fdist\u002F**",[388,548,408],{"class":394},[388,550,500],{"class":394},[388,552,467],{"class":394},[388,554,555],{"class":470},"**\u002F*.min.js",[388,557,408],{"class":394},[388,559,519],{"class":394},[388,561,563,565,568,570,572,574,576,579,583,586,588,591,593,596,598],{"class":390,"line":562},8,[388,564,401],{"class":394},[388,566,567],{"class":404},"ignorePattern",[388,569,408],{"class":394},[388,571,411],{"class":394},[388,573,490],{"class":394},[388,575,408],{"class":394},[388,577,578],{"class":470},"(?s)",[388,580,582],{"class":581},"sTEyZ","\\\\",[388,584,585],{"class":470},"A\u002F",[388,587,582],{"class":581},[388,589,590],{"class":470},"*.*?",[388,592,582],{"class":581},[388,594,595],{"class":470},"*\u002F",[388,597,408],{"class":394},[388,599,519],{"class":394},[388,601,603,605,608,610,612,614,616,619,621,623,625,628,630],{"class":390,"line":602},9,[388,604,401],{"class":394},[388,606,607],{"class":404},"reporters",[388,609,408],{"class":394},[388,611,411],{"class":394},[388,613,490],{"class":394},[388,615,408],{"class":394},[388,617,618],{"class":470},"console",[388,620,408],{"class":394},[388,622,500],{"class":394},[388,624,467],{"class":394},[388,626,627],{"class":470},"html",[388,629,408],{"class":394},[388,631,519],{"class":394},[388,633,635,637,639,641,643,645,648,650],{"class":390,"line":634},10,[388,636,401],{"class":394},[388,638,358],{"class":404},[388,640,408],{"class":394},[388,642,411],{"class":394},[388,644,467],{"class":394},[388,646,647],{"class":470},"report",[388,649,408],{"class":394},[388,651,418],{"class":394},[388,653,655,657,660,662,664],{"class":390,"line":654},11,[388,656,401],{"class":394},[388,658,659],{"class":404},"absolute",[388,661,408],{"class":394},[388,663,411],{"class":394},[388,665,666],{"class":394}," false\n",[388,668,670],{"class":390,"line":669},12,[388,671,672],{"class":394},"}\n",[245,674,675,676,679,680,265,683,265,686,265,689,265,692,695,696,265,699,265,702,265,705,265,708,265,711,714],{},"The tables below give each key with its type and what it decides. The defaults are on the ",[254,677,678],{"href":121},"CLI page",", which also marks the flags that have no key: ",[249,681,682],{},"--workers",[249,684,685],{},"--update-baseline",[249,687,688],{},"--semantic-download",[249,690,691],{},"--list",[249,693,694],{},"--debug"," and the switches that choose another run (",[249,697,698],{},"--dashboard",[249,700,701],{},"--health",[249,703,704],{},"--complexity",[249,706,707],{},"--compare",[249,709,710],{},"--mcp",[249,712,713],{},"--lsp",") stay on the command line.",[716,717,719],"h3",{"id":718},"what-to-scan","What to scan",[721,722,723,739],"table",{},[724,725,726],"thead",{},[727,728,729,733,736],"tr",{},[730,731,732],"th",{},"Key",[730,734,735],{},"Type",[730,737,738],{},"What it decides",[740,741,742,755,774,787,806,825,841,857,877,895,914,927,939],"tbody",{},[727,743,744,749,752],{},[745,746,747],"td",{},[249,748,344],{},[745,750,751],{},"array of strings",[745,753,754],{},"The paths to scan when the command line names none, relative to the config file's directory.",[727,756,757,761,764],{},[745,758,759],{},[249,760,366],{},[745,762,763],{},"string",[745,765,766,767,291,770,773],{},"A glob the files must match, such as ",[249,768,769],{},"**\u002F*.ts",[249,771,772],{},"**\u002F*.{js,ts}",".",[727,775,776,780,782],{},[745,777,778],{},[249,779,362],{},[745,781,751],{},[745,783,784,785,773],{},"Globs for files and folders to leave out, such as ",[249,786,537],{},[727,788,789,793,795],{},[745,790,791],{},[249,792,483],{},[745,794,751],{},[745,796,797,798,801,802,805],{},"The formats to scan, by name from ",[249,799,800],{},"jscpd --list","; ",[249,803,804],{},"formats"," and a single string are accepted too.",[727,807,808,813,816],{},[745,809,810],{},[249,811,812],{},"formatsExts",[745,814,815],{},"string or object",[745,817,818,819,291,822,773],{},"Extra file extensions for a format: ",[249,820,821],{},"\"javascript:es,es6;dart:dt\"",[249,823,824],{},"{\"javascript\": [\"es\", \"es6\"]}",[727,826,827,832,834],{},[745,828,829],{},[249,830,831],{},"formatsNames",[745,833,815],{},[745,835,836,837,840],{},"File names for a format: ",[249,838,839],{},"\"makefile:Makefile,GNUmakefile;docker:Dockerfile\""," or the object form.",[727,842,843,848,851],{},[745,844,845],{},[249,846,847],{},"crossFormats",[745,849,850],{},"string, array of strings or array of arrays",[745,852,853,854,773],{},"Groups of formats compared in one pool; see ",[254,855,856],{"href":56},"cross-format detection",[727,858,859,864,867],{},[745,860,861],{},[249,862,863],{},"noGitignore",[745,865,866],{},"boolean",[745,868,869,872,873,876],{},[249,870,871],{},"true"," scans the files that ",[249,874,875],{},".gitignore"," lists.",[727,878,879,884,886],{},[745,880,881],{},[249,882,883],{},"followSymlinks",[745,885,866],{},[745,887,888,890,891,894],{},[249,889,871],{}," follows symbolic links; v4's ",[249,892,893],{},"noSymlinks"," is translated.",[727,896,897,902,904],{},[745,898,899],{},[249,900,901],{},"maxSize",[745,903,763],{},[745,905,906,907,265,910,913],{},"Files larger than this are skipped: ",[249,908,909],{},"\"500kb\"",[249,911,912],{},"\"2mb\""," or a number of bytes.",[727,915,916,921,924],{},[745,917,918],{},[249,919,920],{},"maxLines",[745,922,923],{},"number",[745,925,926],{},"Files with more lines than this are skipped; there is no limit unless you set one.",[727,928,929,934,936],{},[745,930,931],{},[249,932,933],{},"skipLocal",[745,935,866],{},[745,937,938],{},"Skip clones whose two fragments are under the same scanned root, which leaves the clones between roots.",[727,940,941,946,949],{},[745,942,943],{},[249,944,945],{},"skipIsolated",[745,947,948],{},"array of arrays of strings",[745,950,951,952,955,956,773],{},"Isolation groups; clones between two folders of one group are skipped: ",[249,953,954],{},"[[\"packages\u002Fa\", \"packages\u002Fb\"]]",". See ",[254,957,958],{"href":51},"monorepos",[716,960,962],{"id":961},"what-counts-as-a-clone","What counts as a clone",[721,964,965,975],{},[724,966,967],{},[727,968,969,971,973],{},[730,970,732],{},[730,972,735],{},[730,974,738],{},[740,976,977,988,999,1022,1037,1049,1061,1073,1089,1105,1121,1151],{},[727,978,979,983,985],{},[745,980,981],{},[249,982,426],{},[745,984,923],{},[745,986,987],{},"The smallest clone, in tokens.",[727,989,990,994,996],{},[745,991,992],{},[249,993,443],{},[745,995,923],{},[745,997,998],{},"The smallest clone, in lines.",[727,1000,1001,1005,1007],{},[745,1002,1003],{},[249,1004,460],{},[745,1006,763],{},[745,1008,1009,265,1011,291,1014,1017,1018,773],{},[249,1010,471],{},[249,1012,1013],{},"weak",[249,1015,1016],{},"strict","; see ",[254,1019,1021],{"href":1020},"#detection-modes","Detection modes",[727,1023,1024,1028,1030],{},[745,1025,1026],{},[249,1027,567],{},[745,1029,751],{},[745,1031,1032,1033,773],{},"Regular expressions whose matches are removed from every file before detection; see ",[254,1034,1036],{"href":1035},"#ignoring-code","Ignoring code",[727,1038,1039,1044,1046],{},[745,1040,1041],{},[249,1042,1043],{},"ignoreCase",[745,1045,866],{},[745,1047,1048],{},"Compare tokens without regard to case (experimental).",[727,1050,1051,1056,1058],{},[745,1052,1053],{},[249,1054,1055],{},"ignoreIdentifiers",[745,1057,866],{},[745,1059,1060],{},"Treat every identifier as the same one, which finds renamed clones.",[727,1062,1063,1068,1070],{},[745,1064,1065],{},[249,1066,1067],{},"ignoreLiterals",[745,1069,866],{},[745,1071,1072],{},"Treat every string and number literal as the same one.",[727,1074,1075,1080,1082],{},[745,1076,1077],{},[249,1078,1079],{},"ignoreAnnotations",[745,1081,866],{},[745,1083,1084,1085,1088],{},"Skip ",[249,1086,1087],{},"@Name"," annotations and decorators in the languages that have them.",[727,1090,1091,1096,1098],{},[745,1092,1093],{},[249,1094,1095],{},"maxGapLines",[745,1097,923],{},[745,1099,1100,1101,1104],{},"Merge two clones of one file pair that at most this many unmatched lines separate into one near-miss clone; ",[249,1102,1103],{},"0"," is off.",[727,1106,1107,1112,1115],{},[745,1108,1109],{},[249,1110,1111],{},"similarity",[745,1113,1114],{},"number in (0, 1]",[745,1116,1117,1118,1104],{},"Report JavaScript and TypeScript function pairs whose syntax trees are at least this similar; ",[249,1119,1120],{},"1",[727,1122,1123,1128,1130],{},[745,1124,1125],{},[249,1126,1127],{},"kind",[745,1129,751],{},[745,1131,1132,1133,265,1136,265,1139,265,1142,265,1145,265,1148,773],{},"Report only these kinds: ",[249,1134,1135],{},"exact",[249,1137,1138],{},"renamed",[249,1140,1141],{},"similar",[249,1143,1144],{},"gap",[249,1146,1147],{},"ast",[249,1149,1150],{},"semantic",[727,1152,1153,1157,1160],{},[745,1154,1155],{},[249,1156,1150],{},[745,1158,1159],{},"boolean or object",[745,1161,1162,1164,1165,265,1168,265,1171,265,1174,265,1176,265,1179,265,1182,1185,1186,1189,1190,1193],{},[249,1163,871],{}," turns the semantic pass on; an object holds its settings (",[249,1166,1167],{},"enabled",[249,1169,1170],{},"scope",[249,1172,1173],{},"model",[249,1175,405],{},[249,1177,1178],{},"sameThreshold",[249,1180,1181],{},"url",[249,1183,1184],{},"provider"," and more), see ",[254,1187,1188],{"href":91},"semantic clones",". An API key never goes in the file: jscpd refuses a section that holds one and reads ",[249,1191,1192],{},"JSCPD_SEMANTIC_API_KEY"," instead.",[716,1195,1197],{"id":1196},"reports","Reports",[721,1199,1200,1210],{},[724,1201,1202],{},[727,1203,1204,1206,1208],{},[730,1205,732],{},[730,1207,735],{},[730,1209,738],{},[740,1211,1212,1226,1237,1248,1260,1272,1284,1296,1308,1320,1332],{},[727,1213,1214,1218,1220],{},[745,1215,1216],{},[249,1217,607],{},[745,1219,751],{},[745,1221,1222,1223,773],{},"The reporters to run, by name from the ",[254,1224,1225],{"href":136},"reporters page",[727,1227,1228,1232,1234],{},[745,1229,1230],{},[249,1231,358],{},[745,1233,763],{},[745,1235,1236],{},"The directory file reporters write to.",[727,1238,1239,1243,1245],{},[745,1240,1241],{},[249,1242,659],{},[745,1244,866],{},[745,1246,1247],{},"Absolute paths in reports.",[727,1249,1250,1255,1257],{},[745,1251,1252],{},[249,1253,1254],{},"blame",[745,1256,866],{},[745,1258,1259],{},"Add git blame data to every clone.",[727,1261,1262,1267,1269],{},[745,1263,1264],{},[249,1265,1266],{},"sarifErrorTokens",[745,1268,923],{},[745,1270,1271],{},"SARIF results of at least this many tokens are errors; the rest stay warnings.",[727,1273,1274,1279,1281],{},[745,1275,1276],{},[249,1277,1278],{},"noColors",[745,1280,866],{},[745,1282,1283],{},"No ANSI colors in the console.",[727,1285,1286,1291,1293],{},[745,1287,1288],{},[249,1289,1290],{},"silent",[745,1292,866],{},[745,1294,1295],{},"No progress and no result on the console.",[727,1297,1298,1303,1305],{},[745,1299,1300],{},[249,1301,1302],{},"noTips",[745,1304,866],{},[745,1306,1307],{},"No tips after detection.",[727,1309,1310,1315,1317],{},[745,1311,1312],{},[249,1313,1314],{},"summary",[745,1316,866],{},[745,1318,1319],{},"Append the codebase summary: top files and folders by tokens, lines, size and complexity.",[727,1321,1322,1327,1329],{},[745,1323,1324],{},[249,1325,1326],{},"summaryTop",[745,1328,923],{},[745,1330,1331],{},"Rows in each summary list.",[727,1333,1334,1339,1341],{},[745,1335,1336],{},[249,1337,1338],{},"summaryBy",[745,1340,763],{},[745,1342,1343,1344,265,1347,265,1350,291,1353,773],{},"The summary's ranking: ",[249,1345,1346],{},"tokens",[249,1348,1349],{},"lines",[249,1351,1352],{},"size",[249,1354,1355],{},"complexity",[716,1357,1359],{"id":1358},"gates","Gates",[721,1361,1362,1372],{},[724,1363,1364],{},[727,1365,1366,1368,1370],{},[730,1367,732],{},[730,1369,735],{},[730,1371,738],{},[740,1373,1374,1385,1397,1410,1427,1439],{},[727,1375,1376,1380,1382],{},[745,1377,1378],{},[249,1379,405],{},[745,1381,923],{},[745,1383,1384],{},"The duplication percentage above which the run exits with code 1; a run that lands exactly on it passes.",[727,1386,1387,1392,1394],{},[745,1388,1389],{},[249,1390,1391],{},"exitCode",[745,1393,923],{},[745,1395,1396],{},"The exit code when at least one clone was found.",[727,1398,1399,1403,1405],{},[745,1400,1401],{},[249,1402,347],{},[745,1404,763],{},[745,1406,1407,1408,773],{},"The baseline file; clones absent from it are new. See ",[254,1409,347],{"href":46},[727,1411,1412,1417,1419],{},[745,1413,1414],{},[249,1415,1416],{},"failOnNewClones",[745,1418,923],{},[745,1420,1421,1422,291,1424,773],{},"Exit with code 1 when more than this many new clones are found; needs ",[249,1423,347],{},[249,1425,1426],{},"baselineFromRef",[727,1428,1429,1434,1436],{},[745,1430,1431],{},[249,1432,1433],{},"failOnEmpty",[745,1435,866],{},[745,1437,1438],{},"Exit with code 1 when the scan analyzes no files.",[727,1440,1441,1445,1447],{},[745,1442,1443],{},[249,1444,1426],{},[745,1446,763],{},[745,1448,1449,1450,773],{},"A git ref to build the baseline from, such as ",[249,1451,1452],{},"origin\u002Fmain",[716,1454,1456],{"id":1455},"other-runs-of-the-same-binary","Other runs of the same binary",[721,1458,1459,1469],{},[724,1460,1461],{},[727,1462,1463,1465,1467],{},[730,1464,732],{},[730,1466,735],{},[730,1468,738],{},[740,1470,1471,1489,1504,1533,1545,1557,1569,1584,1604,1615],{},[727,1472,1473,1481,1483],{},[745,1474,1475,265,1478],{},[249,1476,1477],{},"history",[249,1479,1480],{},"historySince",[745,1482,763],{},[745,1484,1485,1486,1488],{},"The commit range or the start date of a ",[254,1487,1477],{"href":71}," run.",[727,1490,1491,1499,1501],{},[745,1492,1493,265,1496],{},[249,1494,1495],{},"historyEvery",[249,1497,1498],{},"historyLimit",[745,1500,923],{},[745,1502,1503],{},"How the history series is sampled.",[727,1505,1506,1511,1513],{},[745,1507,1508],{},[249,1509,1510],{},"deadCode",[745,1512,1159],{},[745,1514,1515,1517,1518,1521,1522,1525,1526,363,1529,1532],{},[249,1516,871],{}," makes the run a ",[254,1519,1520],{"href":81},"dead code"," run; an object is its section and turns the run on only with ",[249,1523,1524],{},"\"enabled\": true",". ",[249,1527,1528],{},"dead-code",[249,1530,1531],{},"basta"," are aliases.",[727,1534,1535,1540,1542],{},[745,1536,1537],{},[249,1538,1539],{},"deadCodeCategories",[745,1541,751],{},[745,1543,1544],{},"The dead-code findings to report.",[727,1546,1547,1552,1554],{},[745,1548,1549],{},[249,1550,1551],{},"minConfidence",[745,1553,923],{},[745,1555,1556],{},"Drop dead-code findings below this confidence, 0 to 100.",[727,1558,1559,1564,1566],{},[745,1560,1561],{},[249,1562,1563],{},"entry",[745,1565,751],{},[745,1567,1568],{},"Globs of extra dead-code entry points.",[727,1570,1571,1579,1581],{},[745,1572,1573,265,1576],{},[249,1574,1575],{},"includeTests",[249,1577,1578],{},"includeEntryExports",[745,1580,866],{},[745,1582,1583],{},"Report dead code in test files, and the exports of entry files.",[727,1585,1586,1591,1594],{},[745,1587,1588],{},[249,1589,1590],{},"health",[745,1592,1593],{},"object",[745,1595,1596,1597,1600,1601,1603],{},"Tuning and external metrics of the ",[254,1598,1599],{"href":111},"health score","; it does not switch ",[249,1602,701],{}," on.",[727,1605,1606,1610,1612],{},[745,1607,1608],{},[249,1609,350],{},[745,1611,763],{},[745,1613,1614],{},"A JSON file with metrics from other tools for the health score.",[727,1616,1617,1622,1624],{},[745,1618,1619],{},[249,1620,1621],{},"lsp",[745,1623,1593],{},[745,1625,1626,1627,1629,1630,773],{},"What ",[249,1628,713],{}," runs for this project; see ",[254,1631,1632],{"href":66},"editors",[245,1634,1635,1636,265,1639,265,1642,1645,1646,1648,1649,1651,1652,265,1655,265,1658,265,1661,363,1664,1667,1668,265,1671,265,1674,1677,1678,1681],{},"Kebab-case spellings of the same keys (",[249,1637,1638],{},"min-tokens",[249,1640,1641],{},"ignore-pattern",[249,1643,1644],{},"cross-formats"," and so on) are accepted, so a v4 file works unchanged: ",[249,1647,893],{}," is translated into ",[249,1650,883],{},", the v4 keys ",[249,1653,1654],{},"gitignore",[249,1656,1657],{},"debug",[249,1659,1660],{},"verbose",[249,1662,1663],{},"config",[249,1665,1666],{},"xslHref"," are ignored without a word, and keys that v5 removed (",[249,1669,1670],{},"store",[249,1672,1673],{},"cache",[249,1675,1676],{},"reportersOptions"," and others) get a hint. A ",[249,1679,1680],{},"\"\u002F\u002F\""," key is ignored as well, which is the way to leave a comment in JSON.",[245,1683,1684,1685,1688],{},"A key jscpd does not know is reported as ",[249,1686,1687],{},"unknown field 'name'"," and the run goes on. A key with a value of the wrong type, say a string where an array is expected, is reported and dropped, and the other keys of the file still apply.",[274,1690,1692],{"id":1691},"packagejson-form","package.json form",[245,1694,1695,1696,1698,1699,1701,1702,1704],{},"The same keys under a ",[249,1697,316],{}," key, with the same rules. jscpd reads them only when no ",[249,1700,251],{}," and no ",[249,1703,305],{}," is in the working directory.",[379,1706,1708],{"className":381,"code":1707,"filename":320,"language":383,"meta":384,"style":384},"{\n  \"name\": \"my-app\",\n  \"jscpd\": {\n    \"threshold\": 3,\n    \"ignore\": [\"**\u002Fnode_modules\u002F**\", \"**\u002Fdist\u002F**\"],\n    \"reporters\": [\"console\", \"html\"]\n  }\n}\n",[249,1709,1710,1714,1734,1747,1763,1791,1820,1825],{"__ignoreMap":384},[388,1711,1712],{"class":390,"line":391},[388,1713,395],{"class":394},[388,1715,1716,1718,1721,1723,1725,1727,1730,1732],{"class":390,"line":398},[388,1717,401],{"class":394},[388,1719,1720],{"class":404},"name",[388,1722,408],{"class":394},[388,1724,411],{"class":394},[388,1726,467],{"class":394},[388,1728,1729],{"class":470},"my-app",[388,1731,408],{"class":394},[388,1733,418],{"class":394},[388,1735,1736,1738,1740,1742,1744],{"class":390,"line":421},[388,1737,401],{"class":394},[388,1739,316],{"class":404},[388,1741,408],{"class":394},[388,1743,411],{"class":394},[388,1745,1746],{"class":394}," {\n",[388,1748,1749,1752,1755,1757,1759,1761],{"class":390,"line":438},[388,1750,1751],{"class":394},"    \"",[388,1753,405],{"class":1754},"sBMFI",[388,1756,408],{"class":394},[388,1758,411],{"class":394},[388,1760,415],{"class":414},[388,1762,418],{"class":394},[388,1764,1765,1767,1769,1771,1773,1775,1777,1779,1781,1783,1785,1787,1789],{"class":390,"line":455},[388,1766,1751],{"class":394},[388,1768,362],{"class":1754},[388,1770,408],{"class":394},[388,1772,411],{"class":394},[388,1774,490],{"class":394},[388,1776,408],{"class":394},[388,1778,537],{"class":470},[388,1780,408],{"class":394},[388,1782,500],{"class":394},[388,1784,467],{"class":394},[388,1786,546],{"class":470},[388,1788,408],{"class":394},[388,1790,519],{"class":394},[388,1792,1793,1795,1797,1799,1801,1803,1805,1807,1809,1811,1813,1815,1817],{"class":390,"line":478},[388,1794,1751],{"class":394},[388,1796,607],{"class":1754},[388,1798,408],{"class":394},[388,1800,411],{"class":394},[388,1802,490],{"class":394},[388,1804,408],{"class":394},[388,1806,618],{"class":470},[388,1808,408],{"class":394},[388,1810,500],{"class":394},[388,1812,467],{"class":394},[388,1814,627],{"class":470},[388,1816,408],{"class":394},[388,1818,1819],{"class":394},"]\n",[388,1821,1822],{"class":390,"line":522},[388,1823,1824],{"class":394},"  }\n",[388,1826,1827],{"class":390,"line":562},[388,1828,672],{"class":394},[274,1830,1021],{"id":1831},"detection-modes",[245,1833,1834,1836],{},[249,1835,460],{}," decides which tokens the tokenizer keeps before matching:",[721,1838,1839,1849],{},[724,1840,1841],{},[727,1842,1843,1846],{},[730,1844,1845],{},"Mode",[730,1847,1848],{},"Left out before matching",[740,1850,1851,1860,1873],{},[727,1852,1853,1857],{},[745,1854,1855],{},[249,1856,471],{},[745,1858,1859],{},"Whitespace. This is the default.",[727,1861,1862,1866],{},[745,1863,1864],{},[249,1865,1013],{},[745,1867,1868,1869,1872],{},"Whitespace and comments. ",[249,1870,1871],{},"--skip-comments"," on the command line is the same thing.",[727,1874,1875,1879],{},[745,1876,1877],{},[249,1878,1016],{},[745,1880,1881],{},"Nothing: every token the tokenizer produces counts, whitespace and comments included.",[245,1883,1884,1885,363,1888,1891,1892,1894,1895,1897,1898,363,1900,1902,1903,773],{},"Regions between ",[249,1886,1887],{},"jscpd:ignore-start",[249,1889,1890],{},"jscpd:ignore-end"," and the matches of ",[249,1893,567],{}," are left out in every mode. JavaScript and TypeScript comments never produce tokens, so ",[249,1896,1013],{}," changes nothing for them; it matters for the formats of the generic tokenizer, C#, Java, Go, Python and most others, where a repeated license header alone can be a clone. Modes decide what an exact clone may differ in; clones that differ in names or values need ",[249,1899,1055],{},[249,1901,1067],{},", see ",[254,1904,100],{"href":101},[274,1906,1036],{"id":1907},"ignoring-code",[245,1909,1910,1911,1914],{},"Four mechanisms, from whole files down to one region of one file. ",[249,1912,1913],{},"fixtures\u002Fignore-demo"," in the jscpd repository has one directory per mechanism, and the outputs below come from it.",[716,1916,1918],{"id":1917},"files","Files",[245,1920,1921,1923,1924,1927,1928,1931,1932,1935,1936,363,1939,411],{},[249,1922,362],{}," takes globs for files and folders to leave out; on the command line, ",[249,1925,1926],{},"--ignore"," takes them comma-separated. In the ",[249,1929,1930],{},"glob"," directory, ",[249,1933,1934],{},"src\u002Fcheckout.js"," is copied into ",[249,1937,1938],{},"vendor\u002F",[249,1940,1941],{},"generated\u002F",[379,1943,1948],{"className":1944,"code":1945,"filename":1946,"language":1947,"meta":384,"style":384},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","jscpd --ignore \"**\u002Fvendor\u002F**,**\u002Fgenerated\u002F**\" .\n","Terminal","bash",[249,1949,1950],{"__ignoreMap":384},[388,1951,1952,1954,1957,1959,1962,1964],{"class":390,"line":391},[388,1953,316],{"class":1754},[388,1955,1956],{"class":470}," --ignore",[388,1958,467],{"class":394},[388,1960,1961],{"class":470},"**\u002Fvendor\u002F**,**\u002Fgenerated\u002F**",[388,1963,408],{"class":394},[388,1965,1966],{"class":470}," .\n",[379,1968,1973],{"className":1969,"code":1971,"language":1972,"meta":384},[1970],"language-text","No duplicates found.\nFound 0 clones.\n","text",[249,1974,1971],{"__ignoreMap":384},[245,1976,1977,1978,773],{},"In the file the same setting is ",[249,1979,1980],{},"\"ignore\": [\"**\u002Fvendor\u002F**\", \"**\u002Fgenerated\u002F**\"]",[245,1982,1983,1984,363,1986,1989,1990,1993,1994,1997,1998,2000,2001,2003],{},"Inside a git repository, jscpd also skips what ",[249,1985,875],{},[249,1987,1988],{},".git\u002Finfo\u002Fexclude"," skip, so build output and vendored code are usually out already; ",[249,1991,1992],{},".ignore"," files work in any directory. ",[249,1995,1996],{},"noGitignore: true"," (",[249,1999,268],{},") turns the ",[249,2002,875],{}," part off. Dotfiles are scanned like any other file.",[716,2005,2007],{"id":2006},"a-region-of-every-file","A region of every file",[245,2009,2010,2012,2013,2019,2020,2023],{},[249,2011,567],{}," takes regular expressions. jscpd matches each one against the raw text of every file before tokenization and leaves out the tokens that overlap a match; the positions reported for the rest do not shift. The syntax is that of the ",[254,2014,2018],{"href":2015,"rel":2016},"https:\u002F\u002Fdocs.rs\u002Fregex\u002Flatest\u002Fregex\u002F#syntax",[2017],"nofollow","Rust regex crate",", which has no look-around and no backreferences, and a pattern that does not compile is skipped with a warning. The ",[249,2021,2022],{},"regex"," directory holds two C# files that share nothing except a 13-line license comment, which the generic tokenizer turns into tokens:",[379,2025,2027],{"className":381,"code":2026,"filename":251,"language":383,"meta":384,"style":384},"{\n  \"ignorePattern\": [\"(?s)\\\\A\u002F\\\\*.*?\\\\*\u002F\"]\n}\n",[249,2028,2029,2033,2065],{"__ignoreMap":384},[388,2030,2031],{"class":390,"line":391},[388,2032,395],{"class":394},[388,2034,2035,2037,2039,2041,2043,2045,2047,2049,2051,2053,2055,2057,2059,2061,2063],{"class":390,"line":398},[388,2036,401],{"class":394},[388,2038,567],{"class":404},[388,2040,408],{"class":394},[388,2042,411],{"class":394},[388,2044,490],{"class":394},[388,2046,408],{"class":394},[388,2048,578],{"class":470},[388,2050,582],{"class":581},[388,2052,585],{"class":470},[388,2054,582],{"class":581},[388,2056,590],{"class":470},[388,2058,582],{"class":581},[388,2060,595],{"class":470},[388,2062,408],{"class":394},[388,2064,1819],{"class":394},[388,2066,2067],{"class":390,"line":421},[388,2068,672],{"class":394},[379,2070,2072],{"className":1944,"code":2071,"filename":1946,"language":1947,"meta":384,"style":384},"jscpd .\n",[249,2073,2074],{"__ignoreMap":384},[388,2075,2076,2078],{"class":390,"line":391},[388,2077,316],{"class":1754},[388,2079,1966],{"class":470},[379,2081,2084],{"className":2082,"code":2083,"language":1972,"meta":384},[1970],"Using config from .jscpd.json\nNo duplicates found.\nFound 0 clones.\n",[249,2085,2083],{"__ignoreMap":384},[245,2087,2088,2089,2092,2093,2096,2097,2100],{},"JSON escaping doubles the backslashes: the expression jscpd runs is ",[249,2090,2091],{},"(?s)\\A\u002F\\*.*?\\*\u002F",", a block comment at the very start of the file. ",[249,2094,2095],{},"--ignore-pattern"," on the command line splits its value on commas, so a pattern that contains one, such as ",[249,2098,2099],{},"{1,3}",", belongs in the file.",[716,2102,2104],{"id":2103},"a-region-of-one-file","A region of one file",[245,2106,2107,2108,363,2110,2112,2113,2116],{},"Put ",[249,2109,1887],{},[249,2111,1890],{}," in comments that are valid for the language. Everything between them is left out of detection, in every mode. The ",[249,2114,2115],{},"markers"," directory marks a generated block in two Python modules:",[379,2118,2122],{"className":2119,"code":2120,"filename":2121,"language":514,"meta":384,"style":384},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\"\"\"Stock report schema.\"\"\"\n\n# jscpd:ignore-start\n# --- generated by schemagen 2.4, do not edit ---\nFIELDS = (\n    (\"id\", \"integer\", False),\n    (\"sku\", \"string\", False),\n    (\"warehouse\", \"string\", False),\n    (\"quantity\", \"integer\", False),\n    (\"reserved\", \"integer\", True),\n    (\"updated_at\", \"timestamp\", False),\n)\nFIELD_NAMES = tuple(name for name, _, _ in FIELDS)\nNULLABLE = frozenset(name for name, _, nullable in FIELDS if nullable)\n# --- end generated ---\n# jscpd:ignore-end\n","schema_a.py",[249,2123,2124,2129,2135,2140,2145,2150,2155,2160,2165,2170,2175,2180,2185,2191,2197,2203],{"__ignoreMap":384},[388,2125,2126],{"class":390,"line":391},[388,2127,2128],{},"\"\"\"Stock report schema.\"\"\"\n",[388,2130,2131],{"class":390,"line":398},[388,2132,2134],{"emptyLinePlaceholder":2133},true,"\n",[388,2136,2137],{"class":390,"line":421},[388,2138,2139],{},"# jscpd:ignore-start\n",[388,2141,2142],{"class":390,"line":438},[388,2143,2144],{},"# --- generated by schemagen 2.4, do not edit ---\n",[388,2146,2147],{"class":390,"line":455},[388,2148,2149],{},"FIELDS = (\n",[388,2151,2152],{"class":390,"line":478},[388,2153,2154],{},"    (\"id\", \"integer\", False),\n",[388,2156,2157],{"class":390,"line":522},[388,2158,2159],{},"    (\"sku\", \"string\", False),\n",[388,2161,2162],{"class":390,"line":562},[388,2163,2164],{},"    (\"warehouse\", \"string\", False),\n",[388,2166,2167],{"class":390,"line":602},[388,2168,2169],{},"    (\"quantity\", \"integer\", False),\n",[388,2171,2172],{"class":390,"line":634},[388,2173,2174],{},"    (\"reserved\", \"integer\", True),\n",[388,2176,2177],{"class":390,"line":654},[388,2178,2179],{},"    (\"updated_at\", \"timestamp\", False),\n",[388,2181,2182],{"class":390,"line":669},[388,2183,2184],{},")\n",[388,2186,2188],{"class":390,"line":2187},13,[388,2189,2190],{},"FIELD_NAMES = tuple(name for name, _, _ in FIELDS)\n",[388,2192,2194],{"class":390,"line":2193},14,[388,2195,2196],{},"NULLABLE = frozenset(name for name, _, nullable in FIELDS if nullable)\n",[388,2198,2200],{"class":390,"line":2199},15,[388,2201,2202],{},"# --- end generated ---\n",[388,2204,2206],{"class":390,"line":2205},16,[388,2207,2208],{},"# jscpd:ignore-end\n",[245,2210,2211,2212,363,2215,2218,2219,363,2222,2225,2226,2229],{},"In JavaScript the markers are ",[249,2213,2214],{},"\u002F\u002F jscpd:ignore-start",[249,2216,2217],{},"\u002F\u002F jscpd:ignore-end",", in HTML and Markdown ",[249,2220,2221],{},"\u003C!-- jscpd:ignore-start -->",[249,2223,2224],{},"\u003C!-- jscpd:ignore-end -->",". The ",[254,2227,2228],{"href":66},"language server"," inserts them for you with its \"Ignore this clone\" action.",[274,2231,2232],{"id":804},"Formats",[245,2234,2235,2237,2238,2240,2241,2243,2244,291,2247,2250,2251,2253,2254,2256,2257,2259],{},[249,2236,483],{}," names the formats to scan; without it jscpd scans every format it knows. ",[249,2239,812],{}," maps extra extensions to a format and ",[249,2242,831],{}," maps file names such as ",[249,2245,2246],{},"Makefile",[249,2248,2249],{},"Dockerfile"," to one. ",[254,2252,172],{"href":173}," lists the names, the extensions and the shebang lines that select each format, and ",[254,2255,856],{"href":56}," explains ",[249,2258,847],{}," and the files that embed several languages.",[274,2261,2263],{"id":2262},"checking-the-merged-config","Checking the merged config",[245,2265,2266,2268],{},[249,2267,694],{}," prints the configuration a run would use, file and flags merged, and exits without scanning:",[379,2270,2272],{"className":1944,"code":2271,"filename":1946,"language":1947,"meta":384,"style":384},"jscpd --debug\n",[249,2273,2274],{"__ignoreMap":384},[388,2275,2276,2278],{"class":390,"line":391},[388,2277,316],{"class":1754},[388,2279,2280],{"class":470}," --debug\n",[379,2282,2285],{"className":2283,"code":2284,"language":1972,"meta":384},[1970],"Using config from .jscpd.json\n{\n  \"paths\": [\n    \".\"\n  ],\n  \"min_tokens\": 50,\n  \"min_lines\": 5,\n  \"max_lines\": null,\n  \"max_gap_lines\": 0,\n  \"similarity\": 1.0,\n  \"semantic\": null,\n  \"kind\": [],\n  \"mode\": \"mild\",\n  \"formats\": [],\n  \"ignore\": [],\n  \"ignore_patterns\": [\n    \"(?s)\\\\A\u002F\\\\*.*?\\\\*\u002F\"\n  ],\n  \"reporters\": [\n    \"console\"\n  ],\n  \"output_dir\": \"report\",\n",[249,2286,2284],{"__ignoreMap":384},[245,2288,2289,2290,2292,2293,2295,2296,265,2299,2301,2302,265,2305,2301,2307,363,2310,2301,2312,2314],{},"The output goes on with every other setting; this is its start in the ",[249,2291,2022],{}," directory above. The names in it are the internal ones and differ from the file's keys: ",[249,2294,426],{}," shows as ",[249,2297,2298],{},"min_tokens",[249,2300,358],{}," as ",[249,2303,2304],{},"output_dir",[249,2306,567],{},[249,2308,2309],{},"ignore_patterns",[249,2311,483],{},[249,2313,804],{},". A key you set that is missing here was misspelled, and the warning above the JSON names it.",[274,2316,2318],{"id":2317},"recipes","Recipes",[2320,2321,2322,2328,2334,2340,2346],"ul",{},[285,2323,2324,2327],{},[249,2325,2326],{},"jscpd --pattern \"src\u002F**\u002F*.ts\" ."," scans only the files a glob matches.",[285,2329,2330,2333],{},[249,2331,2332],{},"jscpd --formats-names \"makefile:Makefile,GNUmakefile;docker:Dockerfile\" ."," gives files without an extension a format.",[285,2335,2336,2339],{},[249,2337,2338],{},"jscpd --max-size 5mb ."," raises the file size above which files are skipped.",[285,2341,2342,2345],{},[249,2343,2344],{},"jscpd --ignore-case ."," compares tokens without regard to case (experimental).",[285,2347,2348,2351],{},[249,2349,2350],{},"jscpd --follow-symlinks ."," scans through symbolic links; a file reachable by several paths counts once.",[274,2353,2355],{"id":2354},"see-also","See also",[2320,2357,2358,2363,2368],{},[285,2359,2360,2362],{},[254,2361,120],{"href":121},": every flag with its config key and default.",[285,2364,2365,2367],{},[254,2366,25],{"href":26},": the five or six keys to set first.",[285,2369,2370,2372,2373,265,2375,265,2377,363,2379,2381],{},[254,2371,130],{"href":131},": what ",[249,2374,405],{},[249,2376,1391],{},[249,2378,1416],{},[249,2380,1433],{}," do to the exit status.",[2383,2384,2385],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":384,"searchDepth":398,"depth":398,"links":2387},[2388,2389,2396,2397,2398,2403,2404,2405,2406],{"id":276,"depth":398,"text":277},{"id":370,"depth":398,"text":371,"children":2390},[2391,2392,2393,2394,2395],{"id":718,"depth":421,"text":719},{"id":961,"depth":421,"text":962},{"id":1196,"depth":421,"text":1197},{"id":1358,"depth":421,"text":1359},{"id":1455,"depth":421,"text":1456},{"id":1691,"depth":398,"text":1692},{"id":1831,"depth":398,"text":1021},{"id":1907,"depth":398,"text":1036,"children":2399},[2400,2401,2402],{"id":1917,"depth":421,"text":1918},{"id":2006,"depth":421,"text":2007},{"id":2103,"depth":421,"text":2104},{"id":804,"depth":398,"text":2232},{"id":2262,"depth":398,"text":2263},{"id":2317,"depth":398,"text":2318},{"id":2354,"depth":398,"text":2355},"Every key of .jscpd.json and the jscpd section of package.json, where jscpd looks for them, and how they combine with the command line.","md",null,{},{"icon":128},{"title":125,"description":2413},"Reference for .jscpd.json and the jscpd key of package.json, config discovery, detection modes, ignore globs, ignore patterns and inline markers.","HCIVtlvKysq4LNI2B7xPAvXv2OSIC5dEdDoW-I9I-UE",[2416,2418],{"title":120,"path":121,"stem":122,"description":2417,"icon":123,"children":-1},"Every flag of the jscpd command line, with its config key and default, generated from the help text of jscpd 5.4.0.",{"title":130,"path":131,"stem":132,"description":2419,"icon":133,"children":-1},"What makes a jscpd run exit with 0, 1, 2 or a code of your own, and which flag controls each case.",1791302980427]