[{"data":1,"prerenderedAt":514},["ShallowReactive",2],{"navigation_docs":3,"trending-repo-xiaolai\u002Fthe-craft-of-selfteaching":249,"page-views-\u002Ftrending\u002Fxiaolai\u002Fthe-craft-of-selfteaching":512},[4,29,104,124,194],{"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,94,99],{"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,"path":96,"stem":97,"icon":98},"Similar functions","\u002Fguides\u002Fsimilarity","2.guides\u002F13.similarity","i-lucide-list-tree",{"title":100,"path":101,"stem":102,"icon":103},"Boundaries","\u002Fguides\u002Fboundaries","2.guides\u002F14.boundaries","i-lucide-fence",{"title":105,"icon":6,"path":106,"stem":107,"children":108,"page":6},"Concepts","\u002Fconcepts","3.concepts",[109,114,119],{"title":110,"path":111,"stem":112,"icon":113},"Types of code clones","\u002Fconcepts\u002Fclone-types","3.concepts\u002F1.clone-types","i-lucide-copy",{"title":115,"path":116,"stem":117,"icon":118},"How detection works","\u002Fconcepts\u002Fhow-detection-works","3.concepts\u002F2.how-detection-works","i-lucide-scan-search",{"title":120,"path":121,"stem":122,"icon":123},"The health score","\u002Fconcepts\u002Fhealth-score","3.concepts\u002F3.health-score","i-lucide-heart-pulse",{"title":125,"icon":6,"path":126,"stem":127,"children":128,"page":6},"Reference","\u002Freference","4.reference",[129,134,139,144,181,186,190],{"title":130,"path":131,"stem":132,"icon":133},"CLI options","\u002Freference\u002Fcli","4.reference\u002F1.cli","i-lucide-terminal",{"title":135,"path":136,"stem":137,"icon":138},"The config file","\u002Freference\u002Fconfig-file","4.reference\u002F2.config-file","i-lucide-settings",{"title":140,"path":141,"stem":142,"icon":143},"Exit codes","\u002Freference\u002Fexit-codes","4.reference\u002F3.exit-codes","i-lucide-log-out",{"title":145,"icon":6,"path":146,"stem":147,"children":148},"Reporters","\u002Freference\u002Freporters","4.reference\u002F4.reporters\u002Findex",[149,151,156,161,166,171,176],{"title":145,"path":146,"stem":147,"icon":150},"i-lucide-file-chart-column",{"title":152,"path":153,"stem":154,"icon":155},"HTML reporter","\u002Freference\u002Freporters\u002Fhtml","4.reference\u002F4.reporters\u002F2.html","i-lucide-file-code",{"title":157,"path":158,"stem":159,"icon":160},"JSON reporter","\u002Freference\u002Freporters\u002Fjson","4.reference\u002F4.reporters\u002F3.json","i-lucide-braces",{"title":162,"path":163,"stem":164,"icon":165},"Badge reporter","\u002Freference\u002Freporters\u002Fbadge","4.reference\u002F4.reporters\u002F4.badge","i-lucide-award",{"title":167,"path":168,"stem":169,"icon":170},"SARIF reporter","\u002Freference\u002Freporters\u002Fsarif","4.reference\u002F4.reporters\u002F5.sarif","i-lucide-shield-check",{"title":172,"path":173,"stem":174,"icon":175},"CodeClimate reporter","\u002Freference\u002Freporters\u002Fcodeclimate","4.reference\u002F4.reporters\u002F6.codeclimate","i-lucide-flag-triangle-right",{"title":177,"path":178,"stem":179,"icon":180},"OpenMetrics reporter","\u002Freference\u002Freporters\u002Fopenmetrics","4.reference\u002F4.reporters\u002F7.openmetrics","i-lucide-activity",{"title":182,"path":183,"stem":184,"icon":185},"Supported formats","\u002Freference\u002Fsupported-formats","4.reference\u002F5.supported-formats","i-lucide-languages",{"title":187,"path":188,"stem":189,"icon":38},"GitHub Action","\u002Freference\u002Fgithub-action","4.reference\u002F6.github-action",{"title":191,"path":192,"stem":193,"icon":68},"Rust crates","\u002Freference\u002Frust-crates","4.reference\u002F7.rust-crates",{"title":195,"icon":6,"path":196,"stem":197,"children":198,"page":6},"Project","\u002Fproject","5.project",[199,204,209,214,239,244],{"title":200,"path":201,"stem":202,"icon":203},"Changelog","\u002Fproject\u002Fchangelog","5.project\u002F1.changelog","i-lucide-scroll-text",{"title":205,"path":206,"stem":207,"icon":208},"Migrating from v4 to v5","\u002Fproject\u002Fmigration","5.project\u002F2.migration","i-lucide-arrow-right-left",{"title":210,"path":211,"stem":212,"icon":213},"jscpd v4 (TypeScript)","\u002Fproject\u002Fv4","5.project\u002F3.v4","i-simple-icons-typescript",{"title":215,"icon":6,"path":216,"stem":217,"children":218},"Benchmarks","\u002Fproject\u002Fbenchmarks","5.project\u002F4.benchmarks\u002Findex",[219,221,226,230,235],{"title":215,"path":216,"stem":217,"icon":220},"i-lucide-gauge",{"title":222,"path":223,"stem":224,"icon":225},"Detection Speed","\u002Fproject\u002Fbenchmarks\u002Fdetection-speed","5.project\u002F4.benchmarks\u002F2.detection-speed","i-lucide-zap",{"title":227,"path":228,"stem":229,"icon":58},"Multi-Format Detection","\u002Fproject\u002Fbenchmarks\u002Fcross-format","5.project\u002F4.benchmarks\u002F3.cross-format",{"title":231,"path":232,"stem":233,"icon":234},"AI Token Efficiency","\u002Fproject\u002Fbenchmarks\u002Fai-token-efficiency","5.project\u002F4.benchmarks\u002F4.ai-token-efficiency","i-lucide-sparkles",{"title":236,"path":237,"stem":238,"icon":93},"Embedding Models","\u002Fproject\u002Fbenchmarks\u002Fembedding-models","5.project\u002F4.benchmarks\u002F5.embedding-models",{"title":240,"path":241,"stem":242,"icon":243},"Research","\u002Fproject\u002Fresearch","5.project\u002F5.research","i-lucide-graduation-cap",{"title":245,"path":246,"stem":247,"icon":248},"Articles","\u002Fproject\u002Farticles","5.project\u002F6.articles","i-lucide-newspaper",{"name":250,"url":251,"appearances":252,"latest":268},"xiaolai\u002Fthe-craft-of-selfteaching","https:\u002F\u002Fgithub.com\u002Fxiaolai\u002Fthe-craft-of-selfteaching",[253],{"date":254,"rank":255,"stars":256,"starsToday":257,"headSha":258,"sources":259,"lines":260,"clones":261,"duplicatedLines":262,"percentage":263,"codePercentage":264,"codeSources":265,"healthScore":266,"healthGrade":267},"2026-10-29",8,18645,148,"987a8e8a9ce205b63886510e145437d14d8a13a4",111,22210,37,520,2.34,null,2,72.7,"B",{"date":254,"generatedAt":269,"name":250,"url":251,"description":270,"language":271,"stars":256,"starsToday":257,"defaultBranch":272,"headSha":258,"durationMs":273,"total":274,"formats":278,"topClones":323,"code":468,"health":476,"complexity":499,"deadCode":506},"2026-10-29T05:23:29.711Z","One has no future if one couldn't teach themself.","Jupyter Notebook","master",1067,{"sources":259,"lines":260,"tokens":275,"clones":261,"duplicatedLines":262,"duplicatedTokens":276,"percentage":263,"percentageTokens":277},140356,6085,4.34,[279,286,293,299,304,308,311,315,318,320],{"format":280,"sources":281,"lines":282,"clones":283,"duplicatedLines":284,"percentage":285},"python",27,3020,24,319,10.56,{"format":287,"sources":288,"lines":289,"clones":290,"duplicatedLines":291,"percentage":292},"markdown",65,14794,12,192,1.3,{"format":294,"sources":265,"lines":295,"clones":296,"duplicatedLines":297,"percentage":298},"css",66,1,9,13.64,{"format":300,"sources":301,"lines":302,"clones":303,"duplicatedLines":303,"percentage":303},"txt",4,3878,0,{"format":305,"sources":306,"lines":307,"clones":303,"duplicatedLines":303,"percentage":303},"bash",5,205,{"format":309,"sources":296,"lines":310,"clones":303,"duplicatedLines":303,"percentage":303},"regex",82,{"format":312,"sources":313,"lines":314,"clones":303,"duplicatedLines":303,"percentage":303},"markup",3,68,{"format":316,"sources":296,"lines":317,"clones":303,"duplicatedLines":303,"percentage":303},"json",47,{"format":319,"sources":265,"lines":261,"clones":303,"duplicatedLines":303,"percentage":303},"text",{"format":321,"sources":296,"lines":322,"clones":303,"duplicatedLines":303,"percentage":303},"c",13,[324,348,361,387,401,411,424,439,449,458],{"format":287,"lines":325,"tokens":326,"first":327,"others":331,"copies":265,"excerpt":335,"kind":347},48,1529,{"name":328,"start":329,"end":330},"markdown\u002F00.cover.md",22,69,[332],{"name":333,"start":281,"end":334},"markdown\u002FREADME.md",74,{"lines":336,"total":325},[337,338,339,340,341,342,343,344,345,346],"## 目录","","> - [01.preface（**前言**）](01.preface.md)","> - [02.proof-of-work（**如何证明你真的读过这本书？**）](02.proof-of-work.md)","> - [Part.1.A.better.teachyourself（**为什么一定要掌握自学能力？**）](Part.1.A.better.teachyourself.md)","> - [Part.1.B.why.start.from.learning.coding（**为什么把编程当作自学的入口？**）](Part.1.B.why.start.from.learning.coding.md)","> - [Part.1.C.must.learn.sth.only.by.reading（**只靠阅读习得新技能**）](Part.1.C.must.learn.sth.only.by.reading.md)","> - [Part.1.D.preparation.for.reading（**开始阅读前的一些准备**）](Part.1.D.preparation.for.reading.md)","> - [Part.1.E.1.entrance（**入口**）](Part.1.E.1.entrance.md)","> - [Part.1.E.2.values-and-their-operators（**值及其相应的运算**）](Part.1.E.2.values-and-their-operators.md)","docs",{"format":287,"lines":349,"tokens":350,"first":351,"others":352,"copies":265,"excerpt":357,"kind":347},46,1526,{"name":328,"start":283,"end":330},[353],{"name":354,"start":355,"end":356},"markdown\u002FPart.3.D.indispensable-illusion.md",181,226,{"lines":358,"total":349},[339,340,341,342,343,344,345,346,359,360],"> - [Part.1.E.3.controlflow（**流程控制**）](Part.1.E.3.controlflow.md)","> - [Part.1.E.4.functions（**函数**）](Part.1.E.4.functions.md)",{"format":280,"lines":281,"tokens":362,"first":363,"others":367,"copies":313,"excerpt":375,"kind":347},221,{"name":364,"start":365,"end":366},"markdown\u002FPart.2.D.6-modules.md",255,281,[368,372],{"name":369,"start":370,"end":371},"markdown\u002FPart.2.D.8-main.md",55,81,{"name":369,"start":373,"end":374},96,122,{"lines":376,"total":281},[377,378,379,380,381,382,383,384,385,386],"s = \"\"\"Gur Mra bs Clguba, ol Gvz Crgref","Ornhgvshy vf orggre guna htyl.","Rkcyvpvg vf orggre guna vzcyvpvg.","Fvzcyr vf orggre guna pbzcyrk.","Pbzcyrk vf orggre guna pbzcyvpngrq.","Syng vf orggre guna arfgrq.","Fcnefr vf orggre guna qrafr.","Ernqnovyvgl pbhagf.","Fcrpvny pnfrf nera'g fcrpvny rabhtu gb oernx gur ehyrf.","Nygubhtu cenpgvpnyvgl orngf chevgl.",{"format":280,"lines":388,"tokens":389,"first":390,"others":394,"copies":313,"kind":347},25,123,{"name":391,"start":392,"end":393},"markdown\u002FPart.3.B.2.classes-2.md",386,410,[395,398],{"name":391,"start":396,"end":397},438,462,{"name":391,"start":399,"end":400},507,531,{"format":280,"lines":402,"tokens":403,"first":404,"others":407,"copies":265,"kind":347},32,235,{"name":369,"start":405,"end":406},94,125,[408],{"name":409,"start":296,"end":410},"that.py",33,{"format":280,"lines":290,"tokens":412,"first":413,"others":416,"copies":301,"kind":347},56,{"name":391,"start":414,"end":415},15,26,[417,419,421],{"name":391,"start":418,"end":373},85,{"name":391,"start":406,"end":420},136,{"name":391,"start":422,"end":423},171,182,{"format":287,"lines":255,"tokens":425,"first":426,"others":430,"copies":313,"kind":347},76,{"name":427,"start":428,"end":429},"markdown\u002FPart.1.E.6.containers.md",375,382,[431,435],{"name":432,"start":433,"end":434},"markdown\u002FPart.2.D.4-recursion.md",180,188,{"name":436,"start":437,"end":438},"markdown\u002FPart.2.D.7-tdd.md",170,176,{"format":280,"lines":440,"tokens":334,"first":441,"others":444,"copies":313,"kind":347},14,{"name":442,"start":443,"end":402},"markdown\u002FPart.2.D.5-docstrings.md",19,[445,447],{"name":364,"start":414,"end":446},28,{"name":448,"start":296,"end":440},"mycode.py",{"format":287,"lines":255,"tokens":450,"first":451,"others":454,"copies":265,"kind":347},112,{"name":328,"start":452,"end":453},71,78,[455],{"name":333,"start":456,"end":457},150,157,{"format":280,"lines":459,"tokens":460,"first":461,"others":464,"copies":265,"kind":347},16,106,{"name":364,"start":462,"end":463},20,35,[465],{"name":448,"start":466,"end":467},6,21,{"sources":265,"lines":469,"tokens":470,"clones":303,"duplicatedLines":303,"duplicatedTokens":303,"percentage":303,"percentageTokens":303,"formats":471,"topClones":473,"generated":474},60,400,[472],{"format":280,"sources":265,"lines":469,"clones":303,"duplicatedLines":303,"percentage":303},[],{"files":303,"minified":303,"sample":475},[],{"score":266,"grade":267,"size":477,"dimensions":479},{"lines":469,"files":265,"class":478},"XS",[480,488,494],{"id":481,"source":482,"value":303,"adjusted":483,"lines":303,"halfLife":484,"formats":485,"excluded":486,"weight":296,"score":487},"duplication","jscpd",3.4,8.5,[280],[312,319],75.8,{"id":489,"source":482,"value":490,"adjusted":491,"lines":281,"halfLife":492,"weight":296,"score":493},"dead-code",45,4.3,7.5,67.1,{"id":495,"source":482,"value":303,"adjusted":496,"lines":303,"halfLife":497,"weight":296,"score":498},"complexity",20.3,50,75.5,{"total":322,"mean":500,"files":501},6.5,[502,504],{"path":448,"complexity":255,"lines":281,"bytes":503},761,{"path":409,"complexity":306,"lines":410,"bytes":505},1154,{"percentage":490,"findings":296,"files":265,"byCategory":507,"largest":510},[508],{"category":509,"count":296},"unused-file",[511],{"category":509,"path":448,"name":338,"line":296,"lines":281},{"\u002Ftrending\u002Fxiaolai\u002Fthe-craft-of-selfteaching":513},{"views":303,"visits":303},1793262201616]