diff --git "a/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/1.Hello World/config.json" "b/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/1.Hello World/config.json" index 6a3dade81fb8e3d7f0f4e11f034d7dcfe4accc1f..0a3fc8879e106ccb5802b04a2f8733f94f848d52 100644 --- "a/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/1.Hello World/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/1.Hello World/config.json" @@ -9,5 +9,7 @@ "export": [ "HelloWorld.json" ], - "title": "Hello World" + "title": "Hello World", + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/2.\347\256\200\344\273\213/config.json" "b/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/2.\347\256\200\344\273\213/config.json" index a7f4f59fd489cee9cbe157f2472f5d24e1b15c9e..9fe9aa58fe10b2a8a7709e1742406d4cf70e1d02 100644 --- "a/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/2.\347\256\200\344\273\213/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/2.\347\256\200\344\273\213/config.json" @@ -7,5 +7,7 @@ ], "export": [ "Intro.json" - ] + ], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/3.\344\275\223\347\263\273\347\273\223\346\236\204\347\273\204\344\273\266/config.json" "b/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/3.\344\275\223\347\263\273\347\273\223\346\236\204\347\273\204\344\273\266/config.json" index c070803051f38d26945dd3b8dfb5ac5d739c285e..cb04f3c7abaf888e121f0e9cf75b8d79663233cf 100644 --- "a/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/3.\344\275\223\347\263\273\347\273\223\346\236\204\347\273\204\344\273\266/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/3.\344\275\223\347\263\273\347\273\223\346\236\204\347\273\204\344\273\266/config.json" @@ -1,11 +1,13 @@ { "node_id": "csharp-8f1055780aff4ed8bc5927bac6fb562b", "keywords": [ - ".NET Standard", - ".NET 实现" + ".NET Standard", + ".NET 实现" ], "children": [], "export": [ - "Standard.json" - ] + "Standard.json" + ], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/4..NET\347\261\273\345\272\223/config.json" "b/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/4..NET\347\261\273\345\272\223/config.json" index e5b2d50e7834a417c81ec3ec0bc0b60f3cc7d85a..30dfe81470042410a5b26a41df0dcdeb8ebf9067 100644 --- "a/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/4..NET\347\261\273\345\272\223/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/4..NET\347\261\273\345\272\223/config.json" @@ -1,12 +1,14 @@ { "node_id": "csharp-7029a05888534973bfa9656762e0c187", "keywords": [ - ".NET 共享库", - ".NET 类库", - ".NET 标准库" + ".NET 共享库", + ".NET 类库", + ".NET 标准库" ], "children": [], "export": [ - "Lib.json" - ] + "Lib.json" + ], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/5..NET Standard\346\246\202\350\277\260/config.json" "b/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/5..NET Standard\346\246\202\350\277\260/config.json" index a91cf12dce0ac027137166609d521c7950873fd8..194019884cefdd8f249e6db1f9084910a9adea54 100644 --- "a/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/5..NET Standard\346\246\202\350\277\260/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/5..NET Standard\346\246\202\350\277\260/config.json" @@ -1,10 +1,12 @@ { "node_id": "csharp-65d2fd88ed1e44a6a646be4f3c302e50", "keywords": [ - ".NET Standard 版本" + ".NET Standard 版本" ], "children": [], "export": [ - "StandardQuery.json" - ] + "StandardQuery.json" + ], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/config.json" "b/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/config.json" index 281ace6c4f4efda85481256573cea385bb731f00..8c0246f843f5f3f9aa59bc5d71e639ff6f3080d2 100644 --- "a/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/1.\345\205\245\351\227\250/config.json" @@ -1,4 +1,6 @@ { "node_id": "csharp-e2aeed39b8d5434581176882e1838aa5", - "keywords": [] + "keywords": [], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/1.\347\274\226\345\206\231\347\254\254\344\270\200\344\270\252C#\344\273\243\347\240\201/config.json" "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/1.\347\274\226\345\206\231\347\254\254\344\270\200\344\270\252C#\344\273\243\347\240\201/config.json" index 0d857009ee9fdd739debe7ae52b013cdf50f4e78..bff1c67a8f08b6adb22e6d8047e1d899838771d9 100644 --- "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/1.\347\274\226\345\206\231\347\254\254\344\270\200\344\270\252C#\344\273\243\347\240\201/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/1.\347\274\226\345\206\231\347\254\254\344\270\200\344\270\252C#\344\273\243\347\240\201/config.json" @@ -1,10 +1,12 @@ { "node_id": "csharp-8f63c0182bed428cb2c75bc1d10a6502", "keywords": [ - "C# HelloWorld" + "C# HelloWorld" ], "children": [], "export": [ - "HelloWorld2.json" - ] + "HelloWorld2.json" + ], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/2.C#\346\226\207\346\234\254\345\200\274\345\222\214\345\217\230\351\207\217/config.json" "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/2.C#\346\226\207\346\234\254\345\200\274\345\222\214\345\217\230\351\207\217/config.json" index 724994cd3fe57e82727d28cdf1a57861b2de40ec..8d31c5e93f23008f02a73faaab9e1e469d1ec39a 100644 --- "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/2.C#\346\226\207\346\234\254\345\200\274\345\222\214\345\217\230\351\207\217/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/2.C#\346\226\207\346\234\254\345\200\274\345\222\214\345\217\230\351\207\217/config.json" @@ -1,14 +1,16 @@ { "node_id": "csharp-052799fae6c2498f9ef2966925377631", "keywords": [ - "C# 字符串", - "C# 变量", - "C# 整型", - "C# 基本类型" + "C# 字符串", + "C# 变量", + "C# 整型", + "C# 基本类型" ], "children": [], "export": [ - "String.json", - "Variable.json" - ] + "String.json", + "Variable.json" + ], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/3.C#\345\255\227\347\254\246\344\270\262\346\240\274\345\274\217\350\256\276\347\275\256/config.json" "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/3.C#\345\255\227\347\254\246\344\270\262\346\240\274\345\274\217\350\256\276\347\275\256/config.json" index 6504f2c53fe5c3ebc15110b18ddc56126e893764..8c862f95e4709333ca2ed57be091d2656d2927d5 100644 --- "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/3.C#\345\255\227\347\254\246\344\270\262\346\240\274\345\274\217\350\256\276\347\275\256/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/3.C#\345\255\227\347\254\246\344\270\262\346\240\274\345\274\217\350\256\276\347\275\256/config.json" @@ -1,11 +1,13 @@ { "node_id": "csharp-6213732b191f434fb809de14eadee919", "keywords": [ - "C# 字符串格式化" + "C# 字符串格式化" ], "children": [], "export": [ - "Format.json", - "StringFormatting.json" - ] + "Format.json", + "StringFormatting.json" + ], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/4.C#\346\225\260\345\255\227\350\277\220\347\256\227\346\223\215\344\275\234/config.json" "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/4.C#\346\225\260\345\255\227\350\277\220\347\256\227\346\223\215\344\275\234/config.json" index a7e642624fa990875704408a300e76c10c74d303..98d43e00c40279203a4629dfb511b383765ac60c 100644 --- "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/4.C#\346\225\260\345\255\227\350\277\220\347\256\227\346\223\215\344\275\234/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/4.C#\346\225\260\345\255\227\350\277\220\347\256\227\346\223\215\344\275\234/config.json" @@ -1,11 +1,13 @@ { "node_id": "csharp-8891612a2ed349b4a04dee606c44a292", "keywords": [ - "C# 数字运算符", - "C# 四则运算" + "C# 数字运算符", + "C# 四则运算" ], "children": [], "export": [ - "Calc.json" - ] + "Calc.json" + ], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/5.\344\275\277\347\224\250C#\344\273\216.NET\347\261\273\345\272\223\350\260\203\347\224\250\346\226\271\346\263\225/config.json" "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/5.\344\275\277\347\224\250C#\344\273\216.NET\347\261\273\345\272\223\350\260\203\347\224\250\346\226\271\346\263\225/config.json" index 84630bf30db44a845760444107d1bd8e027e2ec9..7aa636f96e84d0bbd2b450ddfce25ab9d6fe17b0 100644 --- "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/5.\344\275\277\347\224\250C#\344\273\216.NET\347\261\273\345\272\223\350\260\203\347\224\250\346\226\271\346\263\225/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/5.\344\275\277\347\224\250C#\344\273\216.NET\347\261\273\345\272\223\350\260\203\347\224\250\346\226\271\346\263\225/config.json" @@ -1,10 +1,12 @@ { "node_id": "csharp-ecdbead6dc0f4676b048a3d3d6a31741", "keywords": [ - ".NET 基础类库" + ".NET 基础类库" ], "children": [], "export": [ - "Guess.json" - ] + "Guess.json" + ], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/6.C# \344\270\255\344\275\277\347\224\250 if-elseif-else \345\210\206\346\224\257\345\210\244\346\226\255/config.json" "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/6.C# \344\270\255\344\275\277\347\224\250 if-elseif-else \345\210\206\346\224\257\345\210\244\346\226\255/config.json" index f6ff27bb029959f0078777308ec408fdeca092ef..e058c8ebb562516f27ebb93d5e7782906affef2c 100644 --- "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/6.C# \344\270\255\344\275\277\347\224\250 if-elseif-else \345\210\206\346\224\257\345\210\244\346\226\255/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/6.C# \344\270\255\344\275\277\347\224\250 if-elseif-else \345\210\206\346\224\257\345\210\244\346\226\255/config.json" @@ -1,11 +1,13 @@ { "node_id": "csharp-d1ae8aa6b969476db5177062e3980a2f", "keywords": [ - "C# 分支判断" + "C# 分支判断" ], "children": [], "export": [ - "Guard.json", - "Switch.json" - ] + "Guard.json", + "Switch.json" + ], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/7.C# \346\225\260\347\273\204\345\222\214 foreach \350\257\255\345\217\245/config.json" "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/7.C# \346\225\260\347\273\204\345\222\214 foreach \350\257\255\345\217\245/config.json" index aea6d685b0b941420535ba1d2233c57ba681448c..e76a2a4d6292183239a843ebbff031227ea87bb3 100644 --- "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/7.C# \346\225\260\347\273\204\345\222\214 foreach \350\257\255\345\217\245/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/7.C# \346\225\260\347\273\204\345\222\214 foreach \350\257\255\345\217\245/config.json" @@ -1,12 +1,14 @@ { "node_id": "csharp-e8990ea17ca34c49b4d0c69b3272bc10", "keywords": [ - "C# 数组", - "foreach", - "斐波那契数列" + "C# 数组", + "foreach", + "斐波那契数列" ], "children": [], "export": [ - "Loop.json" - ] + "Loop.json" + ], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/8.C# \347\274\226\347\240\201\350\247\204\350\214\203/config.json" "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/8.C# \347\274\226\347\240\201\350\247\204\350\214\203/config.json" index ee25d363bbb2a00f23dac726cc9b7645ac4ad155..ce416374e2e2aecbffa8c130a46e8bd7b1147093 100644 --- "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/8.C# \347\274\226\347\240\201\350\247\204\350\214\203/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/8.C# \347\274\226\347\240\201\350\247\204\350\214\203/config.json" @@ -1,11 +1,13 @@ { "node_id": "csharp-302a68c721e44f489e00820b5898ec10", "keywords": [ - "C# 编码规范", - "C# 注释" + "C# 编码规范", + "C# 注释" ], "children": [], "export": [ - "Comments.json" - ] + "Comments.json" + ], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/config.json" "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/config.json" index 26272620c8217f2820a0beed17e3389eae514715..53a1e25528cc5ca05fca6c0ea09efa38132b3f57 100644 --- "a/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/2.C#\350\257\255\346\263\225/config.json" @@ -1,4 +1,6 @@ { "node_id": "csharp-29be47be65ab45a1afa37ac2f2fdccc9", - "keywords": [] + "keywords": [], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/1.C#3.0\347\211\271\346\200\247/config.json" "b/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/1.C#3.0\347\211\271\346\200\247/config.json" index 1956be55318b9ccda821c2636f968cfada0ea5b9..a021e842bf1501e1a2f666f0681bc60b0f8d52e9 100644 --- "a/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/1.C#3.0\347\211\271\346\200\247/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/1.C#3.0\347\211\271\346\200\247/config.json" @@ -9,5 +9,7 @@ "扩展方法" ], "children": [], - "export": [] + "export": [], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/2.C#4.0\347\211\271\346\200\247/config.json" "b/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/2.C#4.0\347\211\271\346\200\247/config.json" index 3a1c4f1ce96d44428b9ae8d835805eba65c066dd..77073bb22845b7e6ff2d6073fa895ef0d004c5a5 100644 --- "a/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/2.C#4.0\347\211\271\346\200\247/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/2.C#4.0\347\211\271\346\200\247/config.json" @@ -7,5 +7,7 @@ "动态查找" ], "children": [], - "export": [] + "export": [], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/3.C#5.0\347\211\271\346\200\247/config.json" "b/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/3.C#5.0\347\211\271\346\200\247/config.json" index 8668f7cdbd1b26265f2aa8205d886119fa940c74..4acd3e86da0c3fb21eb1dead3b00c2baf5331f10 100644 --- "a/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/3.C#5.0\347\211\271\346\200\247/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/3.C#5.0\347\211\271\346\200\247/config.json" @@ -8,5 +8,7 @@ "绑定运算符,:=:" ], "children": [], - "export": [] + "export": [], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/4.C#6.0\347\211\271\346\200\247/config.json" "b/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/4.C#6.0\347\211\271\346\200\247/config.json" index 19f7d766fe25b55d243a5cb1abfa2d209aaaa3bd..8bcedd0aca0b79725a5e19f8954777adedd29ca3 100644 --- "a/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/4.C#6.0\347\211\271\346\200\247/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/4.C#6.0\347\211\271\346\200\247/config.json" @@ -14,5 +14,7 @@ "表达式方法体" ], "children": [], - "export": [] + "export": [], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/5.C#7.0\347\211\271\346\200\247/config.json" "b/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/5.C#7.0\347\211\271\346\200\247/config.json" index 3c1cea7424b7c499a6495a65210a6b70458d1f45..807d6180d3de66978e536e39be4afe5c17fcb3dd 100644 --- "a/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/5.C#7.0\347\211\271\346\200\247/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/5.C#7.0\347\211\271\346\200\247/config.json" @@ -20,5 +20,7 @@ "只读引用" ], "children": [], - "export": [] + "export": [], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/6.C#8.0\347\211\271\346\200\247/config.json" "b/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/6.C#8.0\347\211\271\346\200\247/config.json" index 817e5f6fc2ab3de5419a1899701751cbe801ec60..59536b0ba509082a3f031a0ed092a63c404edb19 100644 --- "a/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/6.C#8.0\347\211\271\346\200\247/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/6.C#8.0\347\211\271\346\200\247/config.json" @@ -9,5 +9,7 @@ "接口成员的默认实现" ], "children": [], - "export": [] + "export": [], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/7.C#9.0\347\211\271\346\200\247/config.json" "b/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/7.C#9.0\347\211\271\346\200\247/config.json" index 58077d0472f73fbf9b55ed24062759325b184916..a1199b190d67a274a1f4a2bd1fd3d6defda13d36 100644 --- "a/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/7.C#9.0\347\211\271\346\200\247/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/7.C#9.0\347\211\271\346\200\247/config.json" @@ -13,5 +13,7 @@ "非破坏性变化" ], "children": [], - "export": [] + "export": [], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/8.C#10.0\345\212\237\350\203\275/config.json" "b/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/8.C#10.0\345\212\237\350\203\275/config.json" index 8d1bb4a9a14df00f2cc3f47de6fe4238fe70c28b..e3686586fc2dc488c45201fbe2d7c130bcd644d3 100644 --- "a/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/8.C#10.0\345\212\237\350\203\275/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/8.C#10.0\345\212\237\350\203\275/config.json" @@ -17,5 +17,7 @@ "文件范围的 namespace" ], "children": [], - "export": [] + "export": [], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/config.json" "b/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/config.json" index 6a901ed321901a43f2adcf456069dcbf3c0c8d2d..2488dc793be82a82ce0139c205ade95a118b9ddc 100644 --- "a/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/3.C#\347\211\271\346\200\247/config.json" @@ -1,4 +1,6 @@ { "node_id": "csharp-a0968f78949448b7948a6a207b1d3262", - "keywords": [] + "keywords": [], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/1..NET\345\210\235\351\230\266/config.json" "b/data/1..NET\345\210\235\351\230\266/config.json" index 47221529b9e6dfc88d099a7d96148dae8cdd0e9d..e356306d2a497e5479965c2b26d18348b6be99f2 100644 --- "a/data/1..NET\345\210\235\351\230\266/config.json" +++ "b/data/1..NET\345\210\235\351\230\266/config.json" @@ -1,4 +1,6 @@ { "node_id": "csharp-ce2781d4e5344ae7b5b82f34c5fcaed2", - "keywords": [] + "keywords": [], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/1.Razor\345\272\224\347\224\250/config.json" "b/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/1.Razor\345\272\224\347\224\250/config.json" index c4bba3eb6721fca882f67b866bb3b6e0d255e40e..6bf18afab7038d18a4b515421af43e954b4c0a49 100644 --- "a/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/1.Razor\345\272\224\347\224\250/config.json" +++ "b/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/1.Razor\345\272\224\347\224\250/config.json" @@ -1,8 +1,10 @@ { "node_id": "csharp-202a0f83809340d2b38e8e0d4b00b48c", "keywords": [ - "Razor" + "Razor" ], "children": [], - "export": [] + "export": [], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/2.MVC/config.json" "b/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/2.MVC/config.json" index d56fe133521934fd355cdd4002c804ae1974c3ab..f2d853e9e28d652d5657bf2906a44a0a63f73909 100644 --- "a/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/2.MVC/config.json" +++ "b/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/2.MVC/config.json" @@ -1,8 +1,10 @@ { "node_id": "csharp-97413a9e08fb4b55a742b45b2d61e13a", "keywords": [ - ".NET MVC" + ".NET MVC" ], "children": [], - "export": [] + "export": [], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/3.Blazor\345\272\224\347\224\250/config.json" "b/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/3.Blazor\345\272\224\347\224\250/config.json" index a0d8b80802b9533f3635d0377aec4fa5efe91ae2..d78ef1315f433418706c121f3e76dea03ae52006 100644 --- "a/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/3.Blazor\345\272\224\347\224\250/config.json" +++ "b/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/3.Blazor\345\272\224\347\224\250/config.json" @@ -1,8 +1,10 @@ { "node_id": "csharp-b3c0aaca71c249fa8bc4052980637613", "keywords": [ - ".NET Blazor" + ".NET Blazor" ], "children": [], - "export": [] + "export": [], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/4.Web API\345\272\224\347\224\250/config.json" "b/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/4.Web API\345\272\224\347\224\250/config.json" index 0af483b75e79d96d3fcefaac5cd4886013d732f3..cd361fd62ad18f55783dc0be3575ba84a0e4f567 100644 --- "a/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/4.Web API\345\272\224\347\224\250/config.json" +++ "b/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/4.Web API\345\272\224\347\224\250/config.json" @@ -1,8 +1,10 @@ { "node_id": "csharp-e1b867ff5a1344bd9a7e34201343711c", "keywords": [ - ".NET Web API" + ".NET Web API" ], "children": [], - "export": [] + "export": [], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/5.Minimal API \345\272\224\347\224\250/config.json" "b/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/5.Minimal API \345\272\224\347\224\250/config.json" index 066c80595d2b25fbfaced4a138bf59201758b1af..6d97118fa86207727be7413538c44d4e62cc2e4c 100644 --- "a/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/5.Minimal API \345\272\224\347\224\250/config.json" +++ "b/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/5.Minimal API \345\272\224\347\224\250/config.json" @@ -1,8 +1,10 @@ { "node_id": "csharp-5ef3b2a32bc344c984bb195b42eae73c", "keywords": [ - ".NET Minimal API" + ".NET Minimal API" ], "children": [], - "export": [] + "export": [], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/config.json" "b/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/config.json" index 5a472c294197069067438ceafb1011a72dc2e339..be4df4a7d4e23a6631d471627de7129714ee3124 100644 --- "a/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/config.json" +++ "b/data/2..NET\344\270\255\351\230\266/1.ASP.NET Core\345\272\224\347\224\250/config.json" @@ -1,4 +1,6 @@ { "node_id": "csharp-f788d93e151e4f0ca4f1f2f809da584a", - "keywords": [] + "keywords": [], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/2..NET\344\270\255\351\230\266/2.\346\241\214\351\235\242\345\272\224\347\224\250/1.WinForm/config.json" "b/data/2..NET\344\270\255\351\230\266/2.\346\241\214\351\235\242\345\272\224\347\224\250/1.WinForm/config.json" index 29f125d1cec66cc7238481fda88a5d80be7c0876..3badf34274a9f6431b91e6c8438bebe1ccef223e 100644 --- "a/data/2..NET\344\270\255\351\230\266/2.\346\241\214\351\235\242\345\272\224\347\224\250/1.WinForm/config.json" +++ "b/data/2..NET\344\270\255\351\230\266/2.\346\241\214\351\235\242\345\272\224\347\224\250/1.WinForm/config.json" @@ -1,8 +1,10 @@ { "node_id": "csharp-6c14a94995674b10aff78bce72366612", "keywords": [ - "WinFrom开发" + "WinFrom开发" ], "children": [], - "export": [] + "export": [], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/2..NET\344\270\255\351\230\266/2.\346\241\214\351\235\242\345\272\224\347\224\250/2.WPF/config.json" "b/data/2..NET\344\270\255\351\230\266/2.\346\241\214\351\235\242\345\272\224\347\224\250/2.WPF/config.json" index 8e16311a55350c44091694b3bbe600af910bac7b..1a78604a2f2c37edc982b359e55cf9e2dcc348a9 100644 --- "a/data/2..NET\344\270\255\351\230\266/2.\346\241\214\351\235\242\345\272\224\347\224\250/2.WPF/config.json" +++ "b/data/2..NET\344\270\255\351\230\266/2.\346\241\214\351\235\242\345\272\224\347\224\250/2.WPF/config.json" @@ -1,8 +1,10 @@ { "node_id": "csharp-ff82db75f96f42b89c75dfbf6fad534f", "keywords": [ - "WPF开发" + "WPF开发" ], "children": [], - "export": [] + "export": [], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/2..NET\344\270\255\351\230\266/2.\346\241\214\351\235\242\345\272\224\347\224\250/3. UWP/config.json" "b/data/2..NET\344\270\255\351\230\266/2.\346\241\214\351\235\242\345\272\224\347\224\250/3. UWP/config.json" index fe974960046a234ce77a5377904bc1602e907ece..28278a1b11216a6b273531bf549293fa986cff22 100644 --- "a/data/2..NET\344\270\255\351\230\266/2.\346\241\214\351\235\242\345\272\224\347\224\250/3. UWP/config.json" +++ "b/data/2..NET\344\270\255\351\230\266/2.\346\241\214\351\235\242\345\272\224\347\224\250/3. UWP/config.json" @@ -1,8 +1,10 @@ { "node_id": "csharp-fd4985c683f64669b906a2cda0a4c070", "keywords": [ - "UWP开发" + "UWP开发" ], "children": [], - "export": [] + "export": [], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/2..NET\344\270\255\351\230\266/2.\346\241\214\351\235\242\345\272\224\347\224\250/config.json" "b/data/2..NET\344\270\255\351\230\266/2.\346\241\214\351\235\242\345\272\224\347\224\250/config.json" index 9af7e4602cfe1f66aea18f1ce0fd1eeb7dc26cbd..8272354ec4a7b29b38139ea9afa4764dd0e24c2a 100644 --- "a/data/2..NET\344\270\255\351\230\266/2.\346\241\214\351\235\242\345\272\224\347\224\250/config.json" +++ "b/data/2..NET\344\270\255\351\230\266/2.\346\241\214\351\235\242\345\272\224\347\224\250/config.json" @@ -1,4 +1,6 @@ { "node_id": "csharp-7f969ccd70e048c99f8699b52cb1b744", - "keywords": [] + "keywords": [], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/2..NET\344\270\255\351\230\266/3.MAUI\350\267\250\345\271\263\345\217\260\347\247\273\345\212\250\345\272\224\347\224\250/config.json" "b/data/2..NET\344\270\255\351\230\266/3.MAUI\350\267\250\345\271\263\345\217\260\347\247\273\345\212\250\345\272\224\347\224\250/config.json" index 805cac2a2282af2b137048a7a3336eda6e31186e..55c3502e3aa299fe73c18a586cb8c07c5eea9ec5 100644 --- "a/data/2..NET\344\270\255\351\230\266/3.MAUI\350\267\250\345\271\263\345\217\260\347\247\273\345\212\250\345\272\224\347\224\250/config.json" +++ "b/data/2..NET\344\270\255\351\230\266/3.MAUI\350\267\250\345\271\263\345\217\260\347\247\273\345\212\250\345\272\224\347\224\250/config.json" @@ -1,4 +1,6 @@ { "node_id": "csharp-119e018d28074c5f99ff3288a70f5e95", - "keywords": [] + "keywords": [], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/2..NET\344\270\255\351\230\266/4.\346\234\272\345\231\250\345\255\246\344\271\240\345\272\224\347\224\250/config.json" "b/data/2..NET\344\270\255\351\230\266/4.\346\234\272\345\231\250\345\255\246\344\271\240\345\272\224\347\224\250/config.json" index 1e650a46c380af1842357514d442ad2b2ebecfad..e6c0b9c4f353d7c2000f3f0087508fb557299f28 100644 --- "a/data/2..NET\344\270\255\351\230\266/4.\346\234\272\345\231\250\345\255\246\344\271\240\345\272\224\347\224\250/config.json" +++ "b/data/2..NET\344\270\255\351\230\266/4.\346\234\272\345\231\250\345\255\246\344\271\240\345\272\224\347\224\250/config.json" @@ -1,4 +1,6 @@ { "node_id": "csharp-d779ab6fdf9d44f6ae18e0126665b9c0", - "keywords": [] + "keywords": [], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/2..NET\344\270\255\351\230\266/5.\346\270\270\346\210\217\345\272\224\347\224\250/config.json" "b/data/2..NET\344\270\255\351\230\266/5.\346\270\270\346\210\217\345\272\224\347\224\250/config.json" index cf023e25662cc45265ab5d60f461a856692883d6..69c91e271c4172f60fd6b6556d07e07370395eb9 100644 --- "a/data/2..NET\344\270\255\351\230\266/5.\346\270\270\346\210\217\345\272\224\347\224\250/config.json" +++ "b/data/2..NET\344\270\255\351\230\266/5.\346\270\270\346\210\217\345\272\224\347\224\250/config.json" @@ -1,4 +1,6 @@ { "node_id": "csharp-f00a308a6b5e4dfdbda247f8ab924bde", - "keywords": [] + "keywords": [], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/2..NET\344\270\255\351\230\266/6.\344\272\221\345\216\237\347\224\237\345\272\224\347\224\250/config.json" "b/data/2..NET\344\270\255\351\230\266/6.\344\272\221\345\216\237\347\224\237\345\272\224\347\224\250/config.json" index a0df894b0b12b46a58bceca8104609d5848f9744..aa0b9a17d2fc9cdd369a74a63d2bc4df5eaf3395 100644 --- "a/data/2..NET\344\270\255\351\230\266/6.\344\272\221\345\216\237\347\224\237\345\272\224\347\224\250/config.json" +++ "b/data/2..NET\344\270\255\351\230\266/6.\344\272\221\345\216\237\347\224\237\345\272\224\347\224\250/config.json" @@ -1,4 +1,6 @@ { "node_id": "csharp-4e9dd748b8b24a9180948c53d649cb86", - "keywords": [] + "keywords": [], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/2..NET\344\270\255\351\230\266/config.json" "b/data/2..NET\344\270\255\351\230\266/config.json" index cf994b4aac7be11ab2cf46e68a60ebbbf5da3a85..62b785bb448870a2347f95a89e0891e0a5606768 100644 --- "a/data/2..NET\344\270\255\351\230\266/config.json" +++ "b/data/2..NET\344\270\255\351\230\266/config.json" @@ -1,4 +1,6 @@ { "node_id": "csharp-e931f114f5f44d53878989744c1f5e99", - "keywords": [] + "keywords": [], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/3..NET\351\253\230\351\230\266/1. Dapr\345\272\224\347\224\250/config.json" "b/data/3..NET\351\253\230\351\230\266/1. Dapr\345\272\224\347\224\250/config.json" index 11e63045feada1b64641fbfa67d7010dbd8842dc..6fba3be2ed8684a7136f06a62dd9af82ce9f3e9b 100644 --- "a/data/3..NET\351\253\230\351\230\266/1. Dapr\345\272\224\347\224\250/config.json" +++ "b/data/3..NET\351\253\230\351\230\266/1. Dapr\345\272\224\347\224\250/config.json" @@ -1,4 +1,6 @@ { "node_id": "csharp-96369fdba7914281b33829b2ad1272da", - "keywords": [] + "keywords": [], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/3..NET\351\253\230\351\230\266/2.Web\350\277\233\351\230\266\345\272\224\347\224\250/config.json" "b/data/3..NET\351\253\230\351\230\266/2.Web\350\277\233\351\230\266\345\272\224\347\224\250/config.json" index ea81beed58aab5ce011242d6d5321a95b086157e..d02171a1d6fca9096ad814a5f6dd081eed77f0fe 100644 --- "a/data/3..NET\351\253\230\351\230\266/2.Web\350\277\233\351\230\266\345\272\224\347\224\250/config.json" +++ "b/data/3..NET\351\253\230\351\230\266/2.Web\350\277\233\351\230\266\345\272\224\347\224\250/config.json" @@ -1,4 +1,6 @@ { "node_id": "csharp-f977fca66f044f05964ae467369a9e2a", - "keywords": [] + "keywords": [], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/3..NET\351\253\230\351\230\266/config.json" "b/data/3..NET\351\253\230\351\230\266/config.json" index f0c710630bf5a93448c70486fa7867606d587e1b..f44fffd87831e20b394bd3d280c84fefae8127a5 100644 --- "a/data/3..NET\351\253\230\351\230\266/config.json" +++ "b/data/3..NET\351\253\230\351\230\266/config.json" @@ -1,4 +1,6 @@ { "node_id": "csharp-abf1bc85e96749d5a8c6a6a32f95d804", - "keywords": [] + "keywords": [], + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git a/data/config.json b/data/config.json index a4bcad16ba65644bd78df2e21e5c6cf6b2c8e071..eca90e1d0ff5627b60be1a386e17c814db3a9261 100644 --- a/data/config.json +++ b/data/config.json @@ -1,5 +1,7 @@ { "tree_name": "csharp", "keywords": [], - "node_id": "csharp-f436d19758c84b0bb741e51f1f839c24" + "node_id": "csharp-f436d19758c84b0bb741e51f1f839c24", + "keywords_must": [], + "keywords_forbid": [] } \ No newline at end of file diff --git a/data/tree.json b/data/tree.json index 94343b8c3480b00ee282ee368c154afccd260bfa..8086254932c8155ffd663ad36fcf8b64306b4881 100644 --- a/data/tree.json +++ b/data/tree.json @@ -21,7 +21,9 @@ "dotnet new", "程序入口" ], - "children": [] + "children": [], + "keywords_must": [], + "keywords_forbid": [] } }, { @@ -32,7 +34,9 @@ ".NET", "跨平台" ], - "children": [] + "children": [], + "keywords_must": [], + "keywords_forbid": [] } }, { @@ -42,7 +46,9 @@ ".NET Standard", ".NET 实现" ], - "children": [] + "children": [], + "keywords_must": [], + "keywords_forbid": [] } }, { @@ -53,7 +59,9 @@ ".NET 类库", ".NET 标准库" ], - "children": [] + "children": [], + "keywords_must": [], + "keywords_forbid": [] } }, { @@ -62,10 +70,14 @@ "keywords": [ ".NET Standard 版本" ], - "children": [] + "children": [], + "keywords_must": [], + "keywords_forbid": [] } } - ] + ], + "keywords_must": [], + "keywords_forbid": [] } }, { @@ -79,7 +91,9 @@ "keywords": [ "C# HelloWorld" ], - "children": [] + "children": [], + "keywords_must": [], + "keywords_forbid": [] } }, { @@ -91,7 +105,9 @@ "C# 整型", "C# 基本类型" ], - "children": [] + "children": [], + "keywords_must": [], + "keywords_forbid": [] } }, { @@ -100,7 +116,9 @@ "keywords": [ "C# 字符串格式化" ], - "children": [] + "children": [], + "keywords_must": [], + "keywords_forbid": [] } }, { @@ -110,7 +128,9 @@ "C# 数字运算符", "C# 四则运算" ], - "children": [] + "children": [], + "keywords_must": [], + "keywords_forbid": [] } }, { @@ -119,7 +139,9 @@ "keywords": [ ".NET 基础类库" ], - "children": [] + "children": [], + "keywords_must": [], + "keywords_forbid": [] } }, { @@ -128,7 +150,9 @@ "keywords": [ "C# 分支判断" ], - "children": [] + "children": [], + "keywords_must": [], + "keywords_forbid": [] } }, { @@ -139,7 +163,9 @@ "foreach", "斐波那契数列" ], - "children": [] + "children": [], + "keywords_must": [], + "keywords_forbid": [] } }, { @@ -149,10 +175,14 @@ "C# 编码规范", "C# 注释" ], - "children": [] + "children": [], + "keywords_must": [], + "keywords_forbid": [] } } - ] + ], + "keywords_must": [], + "keywords_forbid": [] } }, { @@ -171,7 +201,9 @@ "对象与集合初始化器", "扩展方法" ], - "children": [] + "children": [], + "keywords_must": [], + "keywords_forbid": [] } }, { @@ -183,7 +215,9 @@ "命名参数和可选参数", "动态查找" ], - "children": [] + "children": [], + "keywords_must": [], + "keywords_forbid": [] } }, { @@ -196,7 +230,9 @@ "支持null类型运算", "绑定运算符,:=:" ], - "children": [] + "children": [], + "keywords_must": [], + "keywords_forbid": [] } }, { @@ -215,7 +251,9 @@ "在集合初始化器中使用扩展的Add方法", "表达式方法体" ], - "children": [] + "children": [], + "keywords_must": [], + "keywords_forbid": [] } }, { @@ -240,7 +278,9 @@ "占位符", "只读引用" ], - "children": [] + "children": [], + "keywords_must": [], + "keywords_forbid": [] } }, { @@ -254,7 +294,9 @@ "Switch 表达式", "接口成员的默认实现" ], - "children": [] + "children": [], + "keywords_must": [], + "keywords_forbid": [] } }, { @@ -272,7 +314,9 @@ "不可变性", "非破坏性变化" ], - "children": [] + "children": [], + "keywords_must": [], + "keywords_forbid": [] } }, { @@ -294,13 +338,19 @@ "CallerArgumentExpression", "文件范围的 namespace" ], - "children": [] + "children": [], + "keywords_must": [], + "keywords_forbid": [] } } - ] + ], + "keywords_must": [], + "keywords_forbid": [] } } - ] + ], + "keywords_must": [], + "keywords_forbid": [] } }, { @@ -319,7 +369,9 @@ "keywords": [ "Razor" ], - "children": [] + "children": [], + "keywords_must": [], + "keywords_forbid": [] } }, { @@ -328,7 +380,9 @@ "keywords": [ ".NET MVC" ], - "children": [] + "children": [], + "keywords_must": [], + "keywords_forbid": [] } }, { @@ -337,7 +391,9 @@ "keywords": [ ".NET Blazor" ], - "children": [] + "children": [], + "keywords_must": [], + "keywords_forbid": [] } }, { @@ -346,7 +402,9 @@ "keywords": [ ".NET Web API" ], - "children": [] + "children": [], + "keywords_must": [], + "keywords_forbid": [] } }, { @@ -355,10 +413,14 @@ "keywords": [ ".NET Minimal API" ], - "children": [] + "children": [], + "keywords_must": [], + "keywords_forbid": [] } } - ] + ], + "keywords_must": [], + "keywords_forbid": [] } }, { @@ -372,7 +434,9 @@ "keywords": [ "WinFrom开发" ], - "children": [] + "children": [], + "keywords_must": [], + "keywords_forbid": [] } }, { @@ -381,7 +445,9 @@ "keywords": [ "WPF开发" ], - "children": [] + "children": [], + "keywords_must": [], + "keywords_forbid": [] } }, { @@ -390,41 +456,55 @@ "keywords": [ "UWP开发" ], - "children": [] + "children": [], + "keywords_must": [], + "keywords_forbid": [] } } - ] + ], + "keywords_must": [], + "keywords_forbid": [] } }, { "MAUI跨平台移动应用": { "node_id": "csharp-119e018d28074c5f99ff3288a70f5e95", "keywords": [], - "children": [] + "children": [], + "keywords_must": [], + "keywords_forbid": [] } }, { "机器学习应用": { "node_id": "csharp-d779ab6fdf9d44f6ae18e0126665b9c0", "keywords": [], - "children": [] + "children": [], + "keywords_must": [], + "keywords_forbid": [] } }, { "游戏应用": { "node_id": "csharp-f00a308a6b5e4dfdbda247f8ab924bde", "keywords": [], - "children": [] + "children": [], + "keywords_must": [], + "keywords_forbid": [] } }, { "云原生应用": { "node_id": "csharp-4e9dd748b8b24a9180948c53d649cb86", "keywords": [], - "children": [] + "children": [], + "keywords_must": [], + "keywords_forbid": [] } } - ] + ], + "keywords_must": [], + "keywords_forbid": [] } }, { @@ -436,19 +516,27 @@ " Dapr应用": { "node_id": "csharp-96369fdba7914281b33829b2ad1272da", "keywords": [], - "children": [] + "children": [], + "keywords_must": [], + "keywords_forbid": [] } }, { "Web进阶应用": { "node_id": "csharp-f977fca66f044f05964ae467369a9e2a", "keywords": [], - "children": [] + "children": [], + "keywords_must": [], + "keywords_forbid": [] } } - ] + ], + "keywords_must": [], + "keywords_forbid": [] } } - ] + ], + "keywords_must": [], + "keywords_forbid": [] } } \ No newline at end of file diff --git a/src/tree.py b/src/tree.py index eb6acb32722cd2cd144f666743ebfa6bfb67d808..0c58d32b0da0e7099c2d2804fc97cdc35b240e28 100644 --- a/src/tree.py +++ b/src/tree.py @@ -2,10 +2,10 @@ import json import logging import os import re +import subprocess import sys import uuid import re -import git id_set = set() logger = logging.getLogger(__name__) @@ -14,15 +14,31 @@ handler = logging.StreamHandler(sys.stdout) formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) logger.addHandler(handler) -repo = git.Repo(".") -def user_name(): - return repo.config_reader().get_value("user", "name") +def search_author(author_dict, username): + for key in author_dict: + names = author_dict[key] + if username in names: + return key + return username + + +def user_name(md_file, author_dict): + ret = subprocess.Popen([ + "git", "log", md_file + ], stdout=subprocess.PIPE) + lines = list(map(lambda l: l.decode(), ret.stdout.readlines())) + author_lines = [] + for line in lines: + if line.startswith('Author'): + author_lines.append(line.split(' ')[1]) + author_nick_name = author_lines[-1] + return search_author(author_dict, author_nick_name) def load_json(p): - with open(p, 'r') as f: + with open(p, 'r', encoding="utf-8") as f: return json.loads(f.read()) @@ -77,7 +93,18 @@ def check_export(base, cfg): class TreeWalker: - def __init__(self, root, tree_name, title=None, log=None): + def __init__( + self, root, + tree_name, + title=None, + log=None, + authors=None, + enable_notebook=None, + ignore_keywords=False + ): + self.ignore_keywords = ignore_keywords + self.authors = authors if authors else {} + self.enable_notebook = enable_notebook self.name = tree_name self.root = root self.title = tree_name if title is None else title @@ -89,7 +116,9 @@ class TreeWalker: root_node = { "node_id": root["node_id"], "keywords": root["keywords"], - "children": [] + "children": [], + "keywords_must": root["keywords_must"], + "keywords_forbid": root["keywords_forbid"] } self.tree[root["tree_name"]] = root_node self.load_levels(root_node) @@ -144,6 +173,8 @@ class TreeWalker: "node_id": config["node_id"], "keywords": config["keywords"], "children": [], + "keywords_must": config["keywords_must"], + "keywords_forbid": config["keywords_forbid"] } } @@ -195,6 +226,8 @@ class TreeWalker: "tree_name": self.name, "keywords": [], "node_id": self.gen_node_id(), + "keywords_must": [], + "keywords_forbid": [] } dump_json(config_path, config, exist_ok=True, override=True) else: @@ -224,7 +257,9 @@ class TreeWalker: if not os.path.exists(config_path): config = { "node_id": self.gen_node_id(), - "keywords": [] + "keywords": [], + "keywords_must": [], + "keywords_forbid": [] } dump_json(config_path, config, exist_ok=True, override=True) else: @@ -290,6 +325,8 @@ class TreeWalker: "node_id": config["node_id"], "keywords": config["keywords"], "children": [], + "keywords_must": config["keywords_must"], + "keywords_forbid": config["keywords_forbid"] } } return num, result @@ -301,7 +338,9 @@ class TreeWalker: name: { "node_id": config["node_id"], "keywords": config["keywords"], - "children": config.get("children", []) + "children": config.get("children", []), + "keywords_must": config["keywords_must"], + "keywords_forbid": config["keywords_forbid"] } } # if "children" in config: @@ -318,7 +357,8 @@ class TreeWalker: continue mfile = base + ".json" meta_path = os.path.join(section_path, mfile) - self.ensure_exercises_meta(meta_path, source) + md_file = os.path.join(section_path, e) + self.ensure_exercises_meta(meta_path, source, md_file) export = config.get("export", []) if mfile not in export and self.name != "algorithm": export.append(mfile) @@ -339,7 +379,7 @@ class TreeWalker: else: id_set.add(exercise["exercise_id"]) - def ensure_exercises_meta(self, meta_path, source): + def ensure_exercises_meta(self, meta_path, source, md_file): _, mfile = os.path.split(meta_path) meta = None if os.path.exists(meta_path): @@ -354,26 +394,31 @@ class TreeWalker: if "source" not in meta: meta["source"] = source if "author" not in meta: - meta["author"] = user_name() + meta["author"] = user_name(md_file, self.authors) if "type" not in meta: meta["type"] = "code_options" - if meta is None: - meta = { - "type": "code_options", - "author": user_name(), - "source": source, - "notebook_enable": self.default_notebook(), - "exercise_id": uuid.uuid4().hex - } + + if meta is None: + meta = { + "type": "code_options", + "author": user_name(md_file, self.authors), + "source": source, + "notebook_enable": self.default_notebook(), + "exercise_id": uuid.uuid4().hex + } dump_json(meta_path, meta, True, True) def default_notebook(self): + if self.enable_notebook is not None: + return self.enable_notebook if self.name in ["python", "java", "c"]: return True else: return False def check_section_keywords(self, full_path): + if self.ignore_keywords: + return config = self.ensure_section_config(full_path) if not config.get("keywords", []): self.logger.error(f"节点 [{full_path}] 的关键字为空,请修改配置文件写入关键字")