microsoft / python-language-server
Duplication

Places in code with 6 or more lines that are exactly the same.

Intro
  • For duplication, we look at places in code where there are 6 or more lines of code that are exactly the same.
  • Before duplication is calculated, the code is cleaned to remove empty lines, comments, and frequently duplicated constructs such as imports.
  • You should aim at having as little as possible (<5%) of duplicated code as high-level of duplication can lead to maintenance difficulties, poor factoring, and logical contradictions.
Learn more...
Duplication Overall
  • 13% duplication:
    • 63,146 cleaned lines of cleaned code (without empty lines, comments, and frequently duplicated constructs such as imports)
    • 8,832 duplicated lines
  • 501 duplicates
system13% (8,832 lines)
Duplication per Extension
pyi25% (7,686 lines)
cs3% (1,134 lines)
py<1% (12 lines)
Duplication per Component (primary)
src/Analysis/Ast/Impl19% (7,796 lines)
src/Parsing/Impl/Ast10% (531 lines)
src/Parsing/Impl4% (220 lines)
src/Parsing/Impl/Tokens5% (131 lines)
src/LanguageServer/Impl/Sources4% (36 lines)
src/LanguageServer/Impl/Indexing4% (27 lines)
src/LanguageServer/Impl/Protocol4% (27 lines)
src/Analysis/Core/Impl1% (16 lines)
src/Core/Impl/Collections6% (14 lines)
src/LanguageServer/Impl/Implementation1% (8 lines)
src/Caching/Impl1% (7 lines)
src/Core/Impl/IO1% (7 lines)
src/Caching/Impl/Lazy2% (6 lines)
src/Caching/Impl/Models1% (6 lines)
ROOT0% (0 lines)
build0% (0 lines)
src/Caching/Impl/Extensions0% (0 lines)
src/Caching/Impl/IO0% (0 lines)
src/Caching/Impl/Properties0% (0 lines)
src/Core/Impl/Diagnostics0% (0 lines)
src/Core/Impl/Disposables0% (0 lines)
src/Core/Impl/Extensions0% (0 lines)
src/Core/Impl/Idle0% (0 lines)
src/Core/Impl/Logging0% (0 lines)
src/Core/Impl/OS0% (0 lines)
src/Core/Impl/Properties0% (0 lines)
src/Core/Impl/Services0% (0 lines)
src/Core/Impl/Testing0% (0 lines)
src/Core/Impl/Text0% (0 lines)
src/Core/Impl/Threading0% (0 lines)
src/LanguageServer/Impl/CodeActions0% (0 lines)
src/LanguageServer/Impl/Completion0% (0 lines)
src/LanguageServer/Impl/Definitions0% (0 lines)
src/LanguageServer/Impl/Diagnostics0% (0 lines)
src/LanguageServer/Impl/Documents0% (0 lines)
src/LanguageServer/Impl/Extensibility0% (0 lines)
src/LanguageServer/Impl/Formatting0% (0 lines)
src/LanguageServer/Impl0% (0 lines)
src/LanguageServer/Impl/Optimization0% (0 lines)
src/LanguageServer/Impl/Properties0% (0 lines)
src/LanguageServer/Impl/SearchPaths0% (0 lines)
src/LanguageServer/Impl/Services0% (0 lines)
src/LanguageServer/Impl/Telemetry0% (0 lines)
src/LanguageServer/Impl/Utilities0% (0 lines)
src/Parsing/Impl/Extensions0% (0 lines)
src0% (0 lines)

Duplication Between Components (50+ lines)

G src/Parsing/Impl src/Parsing/Impl src/Parsing/Impl/Tokens src/Parsing/Impl/Tokens src/Parsing/Impl--src/Parsing/Impl/Tokens 56 src/LanguageServer/Impl/Indexing src/LanguageServer/Impl/Indexing src/LanguageServer/Impl/Protocol src/LanguageServer/Impl/Protocol src/LanguageServer/Impl/Indexing--src/LanguageServer/Impl/Protocol 54

Download: SVG DOT (open online Graphviz editor)

Open 3D force graph...

Show more details on duplication between components...
Longest Duplicates
The list of 20 longest duplicates.
See data for all 501 duplicates...
Size#FoldersFilesLinesCode
992 x 2 src/Analysis/Ast/Impl/Typeshed/stdlib/2
src/Analysis/Ast/Impl/Typeshed/stdlib/2
pyi
__builtin__.pyi
builtins.pyi
8:1086 (100%)
8:1086 (100%)
view
133 x 2 src/Analysis/Ast/Impl/Typeshed/stdlib/2/os
src/Analysis/Ast/Impl/Typeshed/stdlib/3/os
pyi
path.pyi
path.pyi
8:173 (100%)
8:173 (100%)
view
74 x 2 src/Analysis/Ast/Impl/Typeshed/stdlib/2
src/Analysis/Ast/Impl/Typeshed/stdlib/3
pyi
SocketServer.pyi
socketserver.pyi
9:99 (100%)
9:99 (100%)
view
63 x 2 src/Analysis/Ast/Impl/Ty...ed/stdlib/2and3/pyexpat
src/Analysis/Ast/Impl/Ty...2and3/xml/parsers/expat
pyi
__init__.pyi
__init__.pyi
6:75 (100%)
6:75 (100%)
view
57 x 2 src/Analysis/Ast/Impl/Typeshed/stdlib/2/os
src/Analysis/Ast/Impl/Typeshed/stdlib/3/os
pyi
__init__.pyi
__init__.pyi
58:128 (19%)
122:192 (10%)
view
52 x 2 src/Analysis/Ast/Impl/Typeshed/stdlib/2
src/Analysis/Ast/Impl/Typeshed/stdlib/3
pyi
fcntl.pyi
fcntl.pyi
22:73 (68%)
25:76 (60%)
view
43 x 2 src/Analysis/Ast/Impl/Typeshed/stdlib/2
src/Analysis/Ast/Impl/Typeshed/stdlib/3/http
pyi
httplib.pyi
client.pyi
128:179 (28%)
17:63 (26%)
view
41 x 2 src/Analysis/Ast/Impl/Typeshed/stdlib/2
src/Analysis/Ast/Impl/Typeshed/stdlib/3
pyi
stat.pyi
stat.pyi
12:52 (71%)
21:67 (69%)
view
40 x 2 src/Analysis/Ast/Impl/Ty...ed/stdlib/2and3/pyexpat
src/Analysis/Ast/Impl/Ty...2and3/xml/parsers/expat
pyi
errors.pyi
errors.pyi
4:44 (100%)
4:44 (100%)
view
40 x 2 src/Analysis/Ast/Impl/Typeshed/stdlib/2
src/Analysis/Ast/Impl/Typeshed/stdlib/3
pyi
typing.pyi
typing.pyi
185:233 (12%)
277:325 (9%)
view
39 x 2 src/Analysis/Ast/Impl/Typeshed/stdlib/2
src/Analysis/Ast/Impl/Typeshed/stdlib/3
pyi
typing.pyi
typing.pyi
276:320 (11%)
383:427 (9%)
view
39 x 2 src/Analysis/Ast/Impl/Typeshed/stdlib/2
src/Analysis/Ast/Impl/Typeshed/stdlib/3
pyi
itertools.pyi
itertools.pyi
122:161 (27%)
62:101 (43%)
view
38 x 2 src/Analysis/Ast/Impl/Typeshed/stdlib/2
src/Analysis/Ast/Impl/Typeshed/stdlib/3
pyi
_ast.pyi
_ast.pyi
149:197 (15%)
168:216 (13%)
view
33 x 2 src/Analysis/Ast/Impl/Typeshed/stdlib/3
src/Analysis/Ast/Impl/Typeshed/stdlib/3
pyi
macpath.pyi
ntpath.pyi
10:48 (100%)
10:48 (100%)
view
33 x 2 src/Analysis/Ast/Impl/Typeshed/stdlib/3
src/Analysis/Ast/Impl/Typeshed/stdlib/3
pyi
macpath.pyi
posixpath.pyi
10:48 (100%)
10:48 (100%)
view
33 x 2 src/Analysis/Ast/Impl/Typeshed/stdlib/2
src/Analysis/Ast/Impl/Typeshed/stdlib/3
pyi
_ast.pyi
_ast.pyi
231:274 (13%)
272:315 (11%)
view
33 x 2 src/Analysis/Ast/Impl/Typeshed/stdlib/3
src/Analysis/Ast/Impl/Typeshed/stdlib/3
pyi
ntpath.pyi
posixpath.pyi
10:48 (100%)
10:48 (100%)
view
31 x 2 src/Analysis/Ast/Impl/Typeshed/stdlib/3/http
src/Analysis/Ast/Impl/Typeshed/stdlib/3/http
pyi
__init__.pyi
client.pyi
34:64 (50%)
42:73 (18%)
view
30 x 2 src/Analysis/Ast/Impl/Typeshed/stdlib/2
src/Analysis/Ast/Impl/Typeshed/stdlib/2
pyi
macpath.pyi
os2emxpath.pyi
5:37 (100%)
5:37 (100%)
view
30 x 2 src/Analysis/Ast/Impl/Typeshed/stdlib/2
src/Analysis/Ast/Impl/Typeshed/stdlib/2
pyi
ntpath.pyi
os2emxpath.pyi
5:37 (100%)
5:37 (100%)
view
Duplicated Units
The list of top 20 duplicated units.
See data for all 33 unit duplicates...
Size#FoldersFilesLinesCode
19 x 2 src/Analysis/Core/Impl/Interpreter
src/Analysis/Core/Impl/Interpreter
InterpreterArchitecture.cs
InterpreterArchitecture.cs
111:130 
147:166 
view
17 x 2 src/Analysis/Ast/Impl/Typeshed/stdlib/3
src/Analysis/Ast/Impl/Typeshed/stdlib/3
pyi
subprocess.pyi
subprocess.pyi
0:0 
0:0 
view
15 x 2 src/Parsing/Impl/Ast
src/Parsing/Impl/Ast
PythonWalker.Generated.cs
PythonWalkerAsync.Generated.cs
599:614 
601:616 
view
13 x 2 src/Analysis/Ast/Impl/Typeshed/stdlib/2
src/Analysis/Ast/Impl/Typeshed/stdlib/2
pyi
subprocess.pyi
subprocess.pyi
0:0 
0:0 
view
13 x 2 src/Analysis/Ast/Impl/Values
src/Analysis/Ast/Impl/Values
ImportedVariable.cs
Variable.cs
86:100 
110:124 
view
11 x 2 src/Parsing/Impl/Ast
src/Parsing/Impl/Ast
AwaitExpression.cs
YieldExpression.cs
57:68 
57:68 
view
10 x 2 src/Analysis/Ast/Impl/Ty.../stdlib/2and3/distutils
src/Analysis/Ast/Impl/Ty.../stdlib/2and3/distutils
pyi
ccompiler.pyi
ccompiler.pyi
0:0 
0:0 
view
10 x 2 src/Parsing/Impl/Ast
src/Parsing/Impl/Ast
AugmentedAssignStatement.cs
BinaryExpression.cs
48:58 
78:88 
view
10 x 2 src/Parsing/Impl/Ast
src/Parsing/Impl/Ast
Comprehension.cs
GeneratorExpression.cs
123:133 
59:69 
view
10 x 2 src/Parsing/Impl/Ast
src/Parsing/Impl/Ast
GlobalStatement.cs
NonlocalStatement.cs
51:62 
51:62 
view
9 x 2 src/Analysis/Core/Impl/Interpreter
src/Analysis/Core/Impl/Interpreter
InterpreterArchitecture.cs
InterpreterArchitecture.cs
132:141 
168:177 
view
8 x 2 src/Analysis/Ast/Impl/Analyzer
src/Analysis/Ast/Impl/Analyzer
DocumentAnalysis.cs
LibraryAnalysis.cs
25:33 
29:39 
view
8 x 2 src/Parsing/Impl/Ast
src/Parsing/Impl/Ast
AndExpression.cs
OrExpression.cs
51:59 
53:61 
view
8 x 2 src/Parsing/Impl/Ast
src/Parsing/Impl/Ast
Comprehension.cs
GeneratorExpression.cs
113:121 
49:57 
view
8 x 2 src/Parsing/Impl/Ast
src/Parsing/Impl/Ast
FString.cs
FormatSpecifier.cs
74:84 
48:58 
view
8 x 2 src/Parsing/Impl/Ast
src/Parsing/Impl/Ast
NamedExpressionErrorWalker.cs
NamedExpressionErrorWalker.cs
65:73 
86:94 
view
7 x 2 src/Analysis/Ast/Impl/Typeshed/stdlib/2
src/Analysis/Ast/Impl/Typeshed/stdlib/2
pyi
__builtin__.pyi
builtins.pyi
0:0 
0:0 
view
7 x 2 src/Analysis/Ast/Impl/Typeshed/stdlib/2
src/Analysis/Ast/Impl/Typeshed/stdlib/2
pyi
__builtin__.pyi
builtins.pyi
0:0 
0:0 
view
7 x 2 src/Analysis/Ast/Impl/Typeshed/stdlib/2
src/Analysis/Ast/Impl/Typeshed/stdlib/3
pyi
itertools.pyi
itertools.pyi
0:0 
0:0 
view
7 x 2 src/Analysis/Ast/Impl/Typeshed/stdlib/2and3
src/Analysis/Ast/Impl/Typeshed/stdlib/2and3
pyi
argparse.pyi
argparse.pyi
0:0 
0:0 
view