Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Replace libdparse with dmd as a library in static code analysis #964

Open
wants to merge 109 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
109 commits
Select commit Hold shift + click to select a range
5479e0d
Update README
RazvanN7 Jan 10, 2022
ed81b06
Add dmd-as-a-library submodule (#2)
RazvanN7 Jan 12, 2022
0c215ec
Add GH Actions build script (#4)
edi33416 Jan 26, 2022
c9d07eb
Removed libdparse from imports print functionality (#3)
lucica28 Jan 28, 2022
d5b795c
Fix failing tester + add unittest for imports (#7)
RazvanN7 Feb 2, 2022
3ee590b
Add style checker (#9)
edi33416 Feb 3, 2022
9255dd7
Update action to build dlang fork
edi33416 Feb 10, 2022
d39a9c4
Fix linter errors
edi33416 Feb 10, 2022
8cf2cef
Add dmd dependencies to dub.json
edi33416 Feb 10, 2022
2ca0abb
Add dmd dependencies to build.bat
edi33416 Feb 10, 2022
acf6814
Replace libdparse in enum array functionality
lucica28 Apr 13, 2022
500f3b3
replace libdparse in objectconst functionality + unittests integratio…
lucica28 Jul 9, 2022
6ae996f
replace libdparse in delete check (#21)
lucica28 Jul 20, 2022
ca7d52f
Update dmd (#23)
lucica28 Aug 10, 2022
092d89c
Update dmd (#25)
lucica28 Oct 6, 2022
02ff102
Fix version flags for gdc and ldc2 (#32)
edi33416 Oct 27, 2022
c63616f
replace libparse in final attribute visitor (#34)
lucica28 Oct 30, 2022
5ddffd8
update dmd (#37)
lucica28 Nov 1, 2022
a3efa88
replace libparse in incorrect infinite range visitor (#33)
lucica28 Nov 1, 2022
fd2011e
update dmd (#39)
lucica28 Nov 4, 2022
bb16676
replace libdparse in imports sortedness visitor (#35)
lucica28 Nov 4, 2022
bf0c847
replace libdparse in redundant attributes visitor (#40)
lucica28 Nov 10, 2022
50e992c
replace libdparse in length subtraction visitor (#42)
lucica28 Nov 11, 2022
65720ab
replace libdparse in explicitly annotated unittests check (#44)
lucica28 Nov 14, 2022
07f97fb
replace libdparse in alias style visitor (#38)
lucica28 Nov 14, 2022
172c706
update dmd (#48)
lucica28 Nov 18, 2022
010ac1d
replace libdparse in constructor check (#43)
lucica28 Nov 25, 2022
a3a5982
replace libdparse in local imports visitor (#45)
lucica28 Dec 1, 2022
e6af600
replace libdpase in assert without msg visitor (#50)
lucica28 Dec 1, 2022
00eaef9
replace libparse in opequals without tohash visitor (#53)
lucica28 Dec 2, 2022
7faa2cb
replace libdparse in auto ref assignment (#51)
lucica28 Dec 2, 2022
da10937
replace libdparse in logic precedence visitor (#54)
lucica28 Dec 2, 2022
d07ac30
replace libdparse in builtin properties visitor (#52)
lucica28 Dec 2, 2022
c6f2134
update dmd (#57)
lucica28 Dec 13, 2022
b90a862
replace libdparse in backwards range check (#58)
lucica28 Dec 16, 2022
cb432bc
update dmd and include the API needed for semantic analysis (#66)
lucica28 May 19, 2023
235e9d0
replace libdparse in redundant parens check (#61)
lucica28 May 22, 2023
60fd082
replace libdparse in statif if else visitor (#56)
lucica28 May 22, 2023
6a832f4
replace libdparse in useless assert (#63)
lucica28 May 24, 2023
e88ba52
replace libdparse in exception check (#68)
lucica28 May 25, 2023
aa2e2d9
replace libdparse in unused label check (#65)
lucica28 May 26, 2023
593b9c5
delete float operator check (#71)
lucica28 May 29, 2023
3bd9b5c
replace libdparse in trust_too_much visitor (#70)
lucica28 May 29, 2023
fdab43b
Add null terminator to string pointers (#77)
Vladiwostok Nov 1, 2023
9250d2d
Replace libdparse in AsmStyleCheck (#75)
Vladiwostok Nov 7, 2023
274d0b3
Use DMD in RedundantStorageClassCheck (#84)
Vladiwostok Jan 15, 2024
b60171f
Fix branch after rebase
edi33416 Jan 29, 2024
6b00b2e
Fix branch after rebase
edi33416 Feb 5, 2024
215faa4
Update dmd submodule reference
edi33416 Feb 5, 2024
9b9dae8
Disable parens errors. Needs fixing
edi33416 Feb 5, 2024
5a51d79
Disable integration tests due to autofix. Needs fixing
edi33416 Feb 5, 2024
75efd94
Update dub.json to latest dmd commit
edi33416 Feb 5, 2024
ede1ac2
Fix style errors
edi33416 Feb 12, 2024
c93bef3
Update build bat
edi33416 Feb 12, 2024
fb27453
Fix GDC build
edi33416 Feb 14, 2024
24f7754
Delete DuplicateAttributeCheck (#79)
Vladiwostok Feb 22, 2024
860ddf1
Update dmd to latest version (02d6d07a69280f8cc88380a682717bb67ca485f…
Vladiwostok Mar 5, 2024
8b7612d
Use DMD in NumberStyleCheck (#88)
Vladiwostok Mar 5, 2024
0ac0551
Replace libdparse in IfElseSameCheck (#81)
Vladiwostok Mar 18, 2024
1107667
Use DMD in CyclomaticComplexityCheck (#85)
Vladiwostok Mar 19, 2024
5f3e25f
Replace libdparse with DMD in LabelVarNameCheck (#101)
Vladiwostok Apr 8, 2024
ffce051
Delete IfStatementCheck (#106)
Vladiwostok Apr 10, 2024
030481b
Delete CommaExpressionCheck (#104)
Vladiwostok Apr 10, 2024
ee4e192
Replace libdparse with DMD in LambdaReturnCheck (#114)
Vladiwostok Apr 15, 2024
7288aea
Replace libdparse with DMD in AlwaysCurlyCheck (#109)
Vladiwostok Apr 15, 2024
232cf54
Replace libdparse with DMD in StyleChecker (#111)
Vladiwostok Apr 15, 2024
511bdce
Replace libdparse with DMD in AutoFunctionChecker (#103)
Vladiwostok Apr 15, 2024
cba48fc
Fix github actions for macos (#135)
Vladiwostok May 7, 2024
c469a9c
Update dmd to latest version (b02f7183804f583776db69c1d8b355671e30621…
Vladiwostok Aug 6, 2024
4268f63
Replace libdparse with DMD in UnusedParameterCheck (#116)
Vladiwostok Aug 6, 2024
38a4c71
Replace libdparse with DMD in UnusedVariableCheck (#119)
Vladiwostok Aug 6, 2024
c167ff0
Replace libdparse with DMD in UnmodifiedFinder (#117)
Vladiwostok Aug 6, 2024
8b5bc9f
Replace libdparse with DMD in BodyOnDisabledFuncsCheck (#127)
Vladiwostok Aug 8, 2024
1e3459d
Replace libdparse with DMD in UselessInitializerChecker (#121)
Vladiwostok Aug 12, 2024
f95acb4
Replace libdparse with DMD in HasPublicExampleCheck (#130)
Vladiwostok Aug 12, 2024
ee6acfb
Replace libdparse with DMD in LineLengthCheck (#134)
Vladiwostok Aug 15, 2024
89f2e1c
Replace libdparse in UnusedResultChecker (#80)
Vladiwostok Aug 19, 2024
531f75b
Fix github actions pipeline (#140)
Vladiwostok Sep 23, 2024
c0c881e
Separate analyze with dmd and autofix flows from libdparse analyze fl…
Vladiwostok Sep 25, 2024
c90a8f0
Implement autofix flow for dmd as a library and fix autofix for EnumA…
Vladiwostok Sep 27, 2024
4506b01
Update dmd (6f1b331a6a29e3dddc647ec04dfc9cd85064f3e9) (#141)
Vladiwostok Sep 27, 2024
1294a76
Respect "skip unittest" user configuration (#139)
Vladiwostok Sep 29, 2024
8f85263
Update dmd to ef02f08456762548555b1476a6e32c6e6af6320c (#146)
Vladiwostok Oct 3, 2024
0c73765
Fix Autofix for DeleteCheck (#144)
Vladiwostok Oct 3, 2024
78590e6
Replace libdparse with DMD in VcallCtorChecker (#145)
Vladiwostok Oct 5, 2024
b5a8ded
Fix Autofix for AlwaysCurlyCheck (#148)
Vladiwostok Oct 5, 2024
686a963
Fix Autofix for ExplicitlyAnnotatedUnittestCheck (#150)
Vladiwostok Oct 7, 2024
517b017
Fix Autofix for AutoFunctionChecker (#149)
Vladiwostok Oct 7, 2024
444f4e2
Fix unittests (#153)
RazvanN7 Oct 8, 2024
65253f6
Fail unittests on DMD parsing errors (#154)
Vladiwostok Oct 8, 2024
c965cfd
Replace libdparse with DMD in AllManCheck (#125)
Vladiwostok Oct 9, 2024
8e836fc
Respect @nolint user attribute (#158)
Vladiwostok Oct 15, 2024
cfe5a5d
Replace libdparse with DMD in MismatchedArgumentCheck (#161)
Vladiwostok Oct 23, 2024
bf75a9b
Use rawWrite for writing test files in unit tests (#168)
Vladiwostok Nov 6, 2024
0b2fe2d
Update dmd to 4a90885ef8e0fc29334da91a4318f9ab52af9f80 (#164)
Vladiwostok Nov 6, 2024
b308eb4
Remove unused nolint code (#162)
Vladiwostok Nov 6, 2024
c276428
Remove unused imports (#166)
Vladiwostok Nov 6, 2024
7e50946
Replace libdparse with DMD in IfConstraintsIndentCheck (#128)
Vladiwostok Nov 8, 2024
e1c1a39
Replace libdparse with DMD in UndocumentedDeclarationCheck (#123)
Vladiwostok Nov 8, 2024
6f33134
Fix Autofix for LambdaReturnCheck (#151)
Vladiwostok Nov 9, 2024
be19b4a
Replace libdparse with DMD in FunctionAttributeCheck (#156)
Vladiwostok Nov 10, 2024
764b746
Fix Autofix for LengthSubtractionCheck (#169)
Vladiwostok Nov 10, 2024
a6ea37c
Fix Autofix for FinalAttributeChecker (#170)
Vladiwostok Nov 10, 2024
76cf434
Fix nolint in StyleChecker (#171)
Vladiwostok Nov 10, 2024
930dd52
Fix Autofix in StaticIfElse (#157)
Vladiwostok Nov 10, 2024
232cd30
Cleanup code and fix integration tests (#172)
Vladiwostok Dec 10, 2024
2bb9689
Fix CI
Vladiwostok Jan 12, 2025
77553e7
Update DMD to 10eb368c1b8c323e1921e991cb2bd8fce535e9b2
Vladiwostok Jan 12, 2025
9665d64
Remove dead code
Vladiwostok Jan 12, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,4 @@ dfmt_template_constraint_style = conditional_newline_indent

[*.yml]
indent_style = space
indent_size = 2
indent_size = 2
27 changes: 23 additions & 4 deletions .github/workflows/default.yml
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,10 @@ jobs:
submodules: 'recursive'
fetch-depth: 0

# Uncomment to get a ssh connection inside the GH Actions runner
#- name: Setup upterm session
# uses: lhotari/action-upterm@v1

# Install the host compiler (DMD or LDC)
# Also grabs DMD for GDC to include dub + rdmd
- name: Install ${{ matrix.compiler.version }}
Expand All @@ -102,6 +106,10 @@ jobs:
sudo apt-get install gdc-12 -y
gdc-12 --version

# - name: Setup upterm session
# if: ${{ matrix.build.type == 'dub' && matrix.host == 'macos-latest'}}
# uses: lhotari/action-upterm@v1

# Compile D-Scanner and execute all tests without dub
- name: Build and test without dub
if: ${{ matrix.build.type == 'make' }}
Expand All @@ -114,7 +122,8 @@ jobs:
./build.bat
./build.bat test
else
make "-j$(nproc)" all test
NUM_PROC=$(nproc || getconf _NPROCESSORS_ONLN || 1)
make "-j$((NUM_PROC / 2))" all test
fi

# Compile D-Scanner and execute all tests using a specific dependency version
Expand All @@ -135,7 +144,7 @@ jobs:
dub build
dub test

- uses: actions/upload-artifact@v2
- uses: actions/upload-artifact@v4
with:
name: bin-${{matrix.build.type}}-${{matrix.build.version}}-${{ matrix.compiler.dmd }}-${{ matrix.host }}
path: bin
Expand All @@ -159,10 +168,20 @@ jobs:
"./bin/dscanner$EXE" --styleCheck -f "$FORMAT" src

- name: Integration Tests
run: ./it.sh
run: |
if [ "$RUNNER_OS" == "Windows" ]; then
./it.sh Windows
else
./it.sh Unix
fi
working-directory: tests
shell: bash

- name: Run style checks
if: ${{ matrix.compiler.dmd == 'dmd' && matrix.build.type == 'make' }}
run: |
make style

# Parse phobos to check for failures / crashes / ...
- name: Checkout Phobos
uses: actions/checkout@v4
Expand All @@ -171,7 +190,7 @@ jobs:
path: phobos

- name: Apply D-Scanner to Phobos
if: ${{ matrix.build.version != 'min libdparse'}} # Older versions crash with "Invalid UTF..."
if: ${{ matrix.build.version != 'min libdparse'}} # Older versions crash with "Invalid UTF..."
working-directory: phobos
shell: bash
run: |
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@
# Sublime Text 2
*.sublime-workspace

# Idea stuff
.idea/

# Subversion
.svn/

Expand Down
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,6 @@
[submodule "DCD"]
path = DCD
url = https://github.com/dlang-community/DCD.git
[submodule "dmd"]
path = dmd
url = [email protected]:dlang/dmd.git
10 changes: 9 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,15 @@
D-Scanner is a tool for analyzing D source code

### Building and installing
First make sure that you have all the source code. Run ```git submodule update --init --recursive```

First, make sure that you have fetched the upstream: [email protected]:dlang-community/D-Scanner.git

```
git remote add upstream [email protected]:dlang-community/D-Scanner.git
git fetch upstream
```

Secondly, make sure that you have all the source code. Run ```git submodule update --init --recursive```
after cloning the project.

To build D-Scanner, run ```make``` (or the build.bat file on Windows).
Expand Down
96 changes: 91 additions & 5 deletions build.bat
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ if %githashsize% == 0 (
move /y bin\githash_.txt bin\githash.txt
)

set DFLAGS=-O -release -Jbin %MFLAGS%
set TESTFLAGS=-g -w -Jbin
set DFLAGS=-O -release -version=StdLoggerDisableWarning -version=CallbackAPI -version=DMDLIB -version=MARS -version=NoBackend -version=NoMain -Jbin -Jdmd -Jdmd\compiler\src\dmd\res %MFLAGS%
set TESTFLAGS=-g -w -version=StdLoggerDisableWarning -version=CallbackAPI -version=DMDLIB -version=MARS -version=NoBackend -version=NoMain -Jbin -Jdmd -Jdmd\compiler\src\dmd\res
set CORE=
set LIBDPARSE=
set STD=
Expand All @@ -29,6 +29,44 @@ set DSYMBOL=
set CONTAINERS=
set LIBDDOC=

set DMD_FRONTEND_DENYLIST=^
dmd\compiler\src\dmd\mars.d^
dmd\compiler\src\dmd\dmsc.d^
dmd\compiler\src\dmd\e2ir.d^
dmd\compiler\src\dmd\eh.d^
dmd\compiler\src\dmd\glue.d^
dmd\compiler\src\dmd\iasmdmd.d^
dmd\compiler\src\dmd\irstate.d^
dmd\compiler\src\dmd\lib.d^
dmd\compiler\src\dmd\libelf.d^
dmd\compiler\src\dmd\libmach.d^
dmd\compiler\src\dmd\libmscoff.d^
dmd\compiler\src\dmd\libomf.d^
dmd\compiler\src\dmd\objc_glue.d^
dmd\compiler\src\dmd\s2ir.d^
dmd\compiler\src\dmd\scanelf.d^
dmd\compiler\src\dmd\scanmach.d^
dmd\compiler\src\dmd\scanmscoff.d^
dmd\compiler\src\dmd\scanomf.d^
dmd\compiler\src\dmd\tocsym.d^
dmd\compiler\src\dmd\toctype.d^
dmd\compiler\src\dmd\tocvdebug.d^
dmd\compiler\src\dmd\toobj.d^
dmd\compiler\src\dmd\todt.d^
dmd\compiler\src\dmd\toir.d

set DMD_FRONTEND_SRC=
for %%x in (dmd\compiler\src\dmd\common\*.d) do set DMD_FRONTEND_SRC=!DMD_FRONTEND_SRC! %%x
for %%x in (dmd\compiler\src\dmd\root\*.d) do set DMD_FRONTEND_SRC=!DMD_FRONTEND_SRC! %%x
for %%x in (dmd\compiler\src\dmd\visitor\*.d) do set DMD_FRONTEND_SRC=!DMD_FRONTEND_SRC! %%x
for %%x in (dmd\compiler\src\dmd\mangle\*.d) do set DMD_FRONTEND_SRC=!DMD_FRONTEND_SRC! %%x
for %%x in (dmd\compiler\src\dmd\*.d) do (
echo "%DMD_FRONTEND_DENYLIST%" | findstr /i /c:"%%x" >nul
if errorlevel 1 (
set "DMD_FRONTEND_SRC=!DMD_FRONTEND_SRC! %%x"
)
)

for %%x in (src\dscanner\*.d) do set CORE=!CORE! %%x
for %%x in (src\dscanner\analysis\*.d) do set ANALYSIS=!ANALYSIS! %%x
for %%x in (libdparse\src\dparse\*.d) do set LIBDPARSE=!LIBDPARSE! %%x
Expand All @@ -45,14 +83,62 @@ for %%x in (containers\src\containers\internal\*.d) do set CONTAINERS=!CONTAINER
if "%1" == "test" goto test_cmd

@echo on
%DC% %MFLAGS% %CORE% %STD% %LIBDPARSE% %LIBDDOC% %ANALYSIS% %INIFILED% %DSYMBOL% %CONTAINERS% %DFLAGS% -I"libdparse\src" -I"DCD\dsymbol\src" -I"containers\src" -I"libddoc\src" -I"libddoc\common\source" -ofbin\dscanner.exe
%DC% %MFLAGS%^
%CORE%^
%STD%^
%LIBDPARSE%^
%LIBDDOC%^
%ANALYSIS%^
%INIFILED%^
%DSYMBOL%^
%CONTAINERS%^
%DMD_FRONTEND_SRC%^
%DFLAGS%^
-Ilibdparse\src^
-IDCD\dsymbol\src^
-Icontainers\src^
-Ilibddoc\src^
-Ilibddoc\common\source^
-Idmd\compiler\src^
-ofbin\dscanner.exe
goto eof

:test_cmd
@echo on
set TESTNAME="bin\dscanner-unittest"
%DC% %MFLAGS% %STD% %LIBDPARSE% %LIBDDOC% %INIFILED% %DSYMBOL% %CONTAINERS% -I"libdparse\src" -I"DCD\dsymbol\src" -I"containers\src" -I"libddoc\src" -lib %TESTFLAGS% -of%TESTNAME%.lib
if exist %TESTNAME%.lib %DC% %MFLAGS% %CORE% %ANALYSIS% %TESTNAME%.lib -I"src" -I"inifiled\source" -I"libdparse\src" -I"DCD\dsymbol\src" -I"containers\src" -I"libddoc\src" -I"libddoc\common\source" -unittest %TESTFLAGS% -of%TESTNAME%.exe
%DC% %MFLAGS% ^
%STD%^
%LIBDPARSE%^
%LIBDDOC%^
%INIFILED%^
%DSYMBOL%^
%CONTAINERS%^
%DMD_FRONTEND_SRC%^
-I"libdparse\src"^
-I"DCD\dsymbol\src"^
-I"containers\src"^
-I"libddoc\src"^
-I"dmd\compiler\src"^
-I"dmd\compiler\src\dmd\res"^
%TESTFLAGS%^
-lib^
-of%TESTNAME%.lib
if exist %TESTNAME%.lib %DC% %MFLAGS%^
%CORE%^
%ANALYSIS%^
%TESTNAME%.lib^
-I"src"^
-I"inifiled\source"^
-I"libdparse\src"^
-I"DCD\dsymbol\src"^
-I"containers\src"^
-I"libddoc\src"^
-I"libddoc\common\source"^
-I"dmd\compiler\src"^
-I"dmd\compiler\src\dmd\res"^
-unittest^
%TESTFLAGS%^
-of%TESTNAME%.exe
if exist %TESTNAME%.exe %TESTNAME%.exe

if exist %TESTNAME%.obj del %TESTNAME%.obj
Expand Down
1 change: 1 addition & 0 deletions changelog/dscanner.assert-without-message.dd
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Avoid checking `enforce` calls as it is phobos specific.
3 changes: 3 additions & 0 deletions changelog/dscanner.comma-expression.dd
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Remove the check for comma expression check
e.g. (int a = 3, a + 7)
This check is no longer necessary since comma expression have been removed from the D language.
2 changes: 2 additions & 0 deletions changelog/dscanner.duplicate-attribute-check.dd
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Remove the check for duplicate attributes (@property, @safe, @trusted, @system, pure, nothrow).
This check is no longer necessary since having duplicated attributes is now a compiler error.
1 change: 1 addition & 0 deletions changelog/dscanner.if-statements.dd
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Remove IfStatementCheck, as it has been disabled in 2015 due to false positives and untouched ever since then.
19 changes: 19 additions & 0 deletions changelog/dscanner.struct-ctor-check.dd
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
Remove the check regarding structs with no arguments constructors.

The check is implemented in constructors.d and it warns against the usage
of both constructors with all parameters with default values and constructors
without any arguments, as this might be confusing. This scenario, for structs,
is no longer D valid code and that's why it is being deprecated.

Let's consider the following code:

---
struct Dog
{
this() {}
this(string name = "doggie") {} // [warn]: This struct constructor can never be called with its default argument.
}
---

D-Scanner would throw and error for this particular struct, but this code
does not compile anymore hence this check is not needed anymore/
1 change: 1 addition & 0 deletions dmd
Submodule dmd added at 10eb36
6 changes: 5 additions & 1 deletion dub.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,11 @@
"dcd:dsymbol": ">=0.16.0-beta.2 <0.17.0",
"inifiled": "~>1.3.1",
"emsi_containers": "~>0.9.0",
"libddoc": "~>0.8.0"
"libddoc": "~>0.8.0",
"dmd": {
"repository": "git+https://github.com/dlang/dmd.git",
"version": "10eb368c1b8c323e1921e991cb2bd8fce535e9b2"
}
},
"targetPath" : "bin",
"stringImportPaths" : [
Expand Down
1 change: 1 addition & 0 deletions dub.selections.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"fileVersion": 1,
"versions": {
"dcd": "0.16.0-beta.2",
"dmd": "~master",
"dsymbol": "0.13.0",
"emsi_containers": "0.9.0",
"inifiled": "1.3.3",
Expand Down
Loading
Loading