IncludeCPP 4.0.2__py3-none-any.whl → 4.3.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -127,6 +127,7 @@ struct VariableBinding {
127
127
  };
128
128
 
129
129
  // v2.0: STRUCT() Bindings for Plain-Old-Data types
130
+ // v4.1.1: Added CONSTRUCTOR and METHOD support (same as CLASS)
130
131
  struct StructBinding {
131
132
  std::string module_name;
132
133
  std::string struct_name;
@@ -135,6 +136,11 @@ struct StructBinding {
135
136
  bool is_template = false;
136
137
  std::string documentation;
137
138
 
139
+ // v4.1.1: CONSTRUCTOR and METHOD support for STRUCT (same as CLASS)
140
+ std::vector<ConstructorInfo> constructors;
141
+ std::vector<MethodSignature> method_signatures;
142
+ std::vector<std::string> methods; // Simple method names for backward compatibility
143
+
138
144
  // Helper methods
139
145
  std::string get_full_name() const {
140
146
  return struct_name;
@@ -2,7 +2,7 @@
2
2
  "name": "cssl",
3
3
  "displayName": "CSSL Language",
4
4
  "description": "Professional syntax highlighting, snippets, and language support for CSSL scripts (.cssl, .cssl-pl, .cssl-mod)",
5
- "version": "1.6.0",
5
+ "version": "1.7.1",
6
6
  "publisher": "IncludeCPP",
7
7
  "icon": "images/cssl.png",
8
8
  "engines": {
@@ -151,6 +151,48 @@
151
151
  "description": "Show output panel when running CSSL files"
152
152
  }
153
153
  }
154
+ },
155
+ "configurationDefaults": {
156
+ "editor.tokenColorCustomizations": {
157
+ "textMateRules": [
158
+ {
159
+ "scope": "storage.modifier.cssl",
160
+ "settings": {
161
+ "fontStyle": "italic"
162
+ }
163
+ },
164
+ {
165
+ "scope": "storage.modifier.extends.cssl",
166
+ "settings": {
167
+ "fontStyle": "italic"
168
+ }
169
+ },
170
+ {
171
+ "scope": "storage.modifier.overwrites.cssl",
172
+ "settings": {
173
+ "fontStyle": "italic"
174
+ }
175
+ },
176
+ {
177
+ "scope": "support.type.cssl",
178
+ "settings": {
179
+ "foreground": "#C586C0"
180
+ }
181
+ },
182
+ {
183
+ "scope": "variable.other.declaration.cssl",
184
+ "settings": {
185
+ "foreground": "#9CDCFE"
186
+ }
187
+ },
188
+ {
189
+ "scope": "variable.parameter.cssl",
190
+ "settings": {
191
+ "foreground": "#9CDCFE"
192
+ }
193
+ }
194
+ ]
195
+ }
154
196
  }
155
197
  }
156
198
  }
@@ -15,6 +15,7 @@
15
15
  { "include": "#super-call" },
16
16
  { "include": "#sql-types" },
17
17
  { "include": "#keywords" },
18
+ { "include": "#typed-declarations" },
18
19
  { "include": "#types" },
19
20
  { "include": "#function-modifiers" },
20
21
  { "include": "#injection-operators" },
@@ -211,17 +212,21 @@
211
212
  { "include": "#constructor-definition" },
212
213
  { "include": "#class-method-definition" },
213
214
  { "include": "#class-member-declaration" },
215
+ { "include": "#typed-declarations" },
214
216
  { "include": "#types" },
217
+ { "include": "#function-modifiers" },
215
218
  { "include": "#this-access" },
216
219
  { "include": "#captured-references" },
217
220
  { "include": "#global-references" },
218
221
  { "include": "#shared-references" },
222
+ { "include": "#instance-references" },
219
223
  { "include": "#strings" },
220
224
  { "include": "#numbers" },
221
225
  { "include": "#keywords" },
222
226
  { "include": "#function-calls" },
223
227
  { "include": "#builtins" },
224
- { "include": "#operators" }
228
+ { "include": "#operators" },
229
+ { "include": "#constants" }
225
230
  ]
226
231
  },
227
232
  {
@@ -241,17 +246,21 @@
241
246
  { "include": "#constructor-definition" },
242
247
  { "include": "#class-method-definition" },
243
248
  { "include": "#class-member-declaration" },
249
+ { "include": "#typed-declarations" },
244
250
  { "include": "#types" },
251
+ { "include": "#function-modifiers" },
245
252
  { "include": "#this-access" },
246
253
  { "include": "#captured-references" },
247
254
  { "include": "#global-references" },
248
255
  { "include": "#shared-references" },
256
+ { "include": "#instance-references" },
249
257
  { "include": "#strings" },
250
258
  { "include": "#numbers" },
251
259
  { "include": "#keywords" },
252
260
  { "include": "#function-calls" },
253
261
  { "include": "#builtins" },
254
- { "include": "#operators" }
262
+ { "include": "#operators" },
263
+ { "include": "#constants" }
255
264
  ]
256
265
  },
257
266
  {
@@ -267,17 +276,21 @@
267
276
  { "include": "#constructor-definition" },
268
277
  { "include": "#class-method-definition" },
269
278
  { "include": "#class-member-declaration" },
279
+ { "include": "#typed-declarations" },
270
280
  { "include": "#types" },
281
+ { "include": "#function-modifiers" },
271
282
  { "include": "#this-access" },
272
283
  { "include": "#captured-references" },
273
284
  { "include": "#global-references" },
274
285
  { "include": "#shared-references" },
286
+ { "include": "#instance-references" },
275
287
  { "include": "#strings" },
276
288
  { "include": "#numbers" },
277
289
  { "include": "#keywords" },
278
290
  { "include": "#function-calls" },
279
291
  { "include": "#builtins" },
280
- { "include": "#operators" }
292
+ { "include": "#operators" },
293
+ { "include": "#constants" }
281
294
  ]
282
295
  }
283
296
  ]
@@ -354,11 +367,42 @@
354
367
  "class-member-declaration": {
355
368
  "patterns": [
356
369
  {
370
+ "comment": "Generic type member: datastruct<dynamic> Container;",
371
+ "name": "meta.member.generic.cssl",
372
+ "match": "(\\b(?:array|vector|stack|list|dictionary|dict|map|datastruct|dataspace|shuffled|iterator|combo|openquote|tuple|set|queue))(<)([^>]+)(>)\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\s*;",
373
+ "captures": {
374
+ "1": { "name": "support.type.cssl" },
375
+ "2": { "name": "punctuation.definition.typeparameters.begin.cssl" },
376
+ "3": { "name": "support.type.cssl" },
377
+ "4": { "name": "punctuation.definition.typeparameters.end.cssl" },
378
+ "5": { "name": "variable.other.declaration.cssl" }
379
+ }
380
+ },
381
+ {
382
+ "comment": "Primitive type member: string ApiID;",
357
383
  "name": "meta.member.cssl",
358
- "match": "\\b(int|string|float|bool|dynamic|auto)\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\s*;",
384
+ "match": "\\b(int|string|float|bool|dynamic|auto|void|json|long|double)\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\s*;",
359
385
  "captures": {
360
- "1": { "name": "storage.type.cssl" },
361
- "2": { "name": "variable.other.member.cssl" }
386
+ "1": { "name": "support.type.cssl" },
387
+ "2": { "name": "variable.other.declaration.cssl" }
388
+ }
389
+ },
390
+ {
391
+ "comment": "Container type member without generic: list items;",
392
+ "name": "meta.member.container.cssl",
393
+ "match": "\\b(array|vector|stack|list|dictionary|dict|map|datastruct|dataspace|shuffled|iterator|combo|openquote|tuple|set|queue)\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\s*;",
394
+ "captures": {
395
+ "1": { "name": "support.type.cssl" },
396
+ "2": { "name": "variable.other.declaration.cssl" }
397
+ }
398
+ },
399
+ {
400
+ "comment": "Primitive type member with assignment: string ApiID = value;",
401
+ "name": "meta.member.assigned.cssl",
402
+ "match": "\\b(int|string|float|bool|dynamic|auto|void|json|long|double)\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\s*=",
403
+ "captures": {
404
+ "1": { "name": "support.type.cssl" },
405
+ "2": { "name": "variable.other.declaration.cssl" }
362
406
  }
363
407
  }
364
408
  ]
@@ -391,11 +435,11 @@
391
435
  "patterns": [
392
436
  {
393
437
  "name": "keyword.control.cssl",
394
- "match": "\\b(if|else|elif|while|for|foreach|in|range|switch|case|default|break|continue|return|try|catch|finally|throw)\\b"
438
+ "match": "\\b(if|else|elif|while|for|foreach|in|range|switch|case|default|break|continue|return|try|catch|finally|throw|except|always)\\b"
395
439
  },
396
440
  {
397
441
  "name": "storage.type.class.cssl",
398
- "match": "\\b(class|struct|structure|enum|interface)\\b"
442
+ "match": "\\b(class|struct|structure|enum|interface|bytearrayed)\\b"
399
443
  },
400
444
  {
401
445
  "name": "storage.modifier.extends.cssl",
@@ -440,10 +484,65 @@
440
484
  }
441
485
  ]
442
486
  },
487
+ "typed-declarations": {
488
+ "patterns": [
489
+ {
490
+ "comment": "Generic type declaration: datastruct<dynamic> Container; or vector<int> items;",
491
+ "name": "meta.declaration.typed.generic.cssl",
492
+ "match": "(\\b(?:array|vector|stack|list|dictionary|dict|map|datastruct|dataspace|shuffled|iterator|combo|openquote|tuple|set|queue))(<)([^>]+)(>)\\s+([a-zA-Z_][a-zA-Z0-9_]*)",
493
+ "captures": {
494
+ "1": { "name": "support.type.cssl" },
495
+ "2": { "name": "punctuation.definition.typeparameters.begin.cssl" },
496
+ "3": { "name": "support.type.cssl" },
497
+ "4": { "name": "punctuation.definition.typeparameters.end.cssl" },
498
+ "5": { "name": "variable.other.declaration.cssl" }
499
+ }
500
+ },
501
+ {
502
+ "comment": "Primitive type declaration: string ID; or int count;",
503
+ "name": "meta.declaration.typed.primitive.cssl",
504
+ "match": "\\b(int|string|float|bool|void|json|dynamic|auto|long|double)\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\s*(?=[;=])",
505
+ "captures": {
506
+ "1": { "name": "support.type.cssl" },
507
+ "2": { "name": "variable.other.declaration.cssl" }
508
+ }
509
+ },
510
+ {
511
+ "comment": "Container type declaration without generic: list items;",
512
+ "name": "meta.declaration.typed.container.cssl",
513
+ "match": "\\b(array|vector|stack|list|dictionary|dict|map|datastruct|dataspace|shuffled|iterator|combo|openquote|tuple|set|queue)\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\s*(?=[;=])",
514
+ "captures": {
515
+ "1": { "name": "support.type.cssl" },
516
+ "2": { "name": "variable.other.declaration.cssl" }
517
+ }
518
+ },
519
+ {
520
+ "comment": "Generic type in function parameter: func(datastruct<dynamic> param)",
521
+ "name": "meta.parameter.typed.generic.cssl",
522
+ "match": "(\\b(?:array|vector|stack|list|dictionary|dict|map|datastruct|dataspace|shuffled|iterator|combo|openquote|tuple|set|queue))(<)([^>]+)(>)\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\s*(?=[,)])",
523
+ "captures": {
524
+ "1": { "name": "support.type.cssl" },
525
+ "2": { "name": "punctuation.definition.typeparameters.begin.cssl" },
526
+ "3": { "name": "support.type.cssl" },
527
+ "4": { "name": "punctuation.definition.typeparameters.end.cssl" },
528
+ "5": { "name": "variable.parameter.cssl" }
529
+ }
530
+ },
531
+ {
532
+ "comment": "Primitive type in function parameter: func(string name)",
533
+ "name": "meta.parameter.typed.primitive.cssl",
534
+ "match": "\\b(int|string|float|bool|void|json|dynamic|auto|long|double)\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\s*(?=[,)])",
535
+ "captures": {
536
+ "1": { "name": "support.type.cssl" },
537
+ "2": { "name": "variable.parameter.cssl" }
538
+ }
539
+ }
540
+ ]
541
+ },
443
542
  "types": {
444
543
  "patterns": [
445
544
  {
446
- "name": "storage.type.primitive.cssl",
545
+ "name": "support.type.cssl",
447
546
  "match": "\\b(int|string|float|bool|void|json|dynamic|auto|long|double)\\b"
448
547
  },
449
548
  {
@@ -451,27 +550,63 @@
451
550
  "name": "meta.generic.cssl",
452
551
  "match": "(\\b(?:array|vector|stack|list|dictionary|dict|map|datastruct|dataspace|shuffled|iterator|combo|openquote|tuple|set|queue))(<)([^>]+)(>)",
453
552
  "captures": {
454
- "1": { "name": "storage.type.container.cssl" },
553
+ "1": { "name": "support.type.cssl" },
455
554
  "2": { "name": "punctuation.definition.typeparameters.begin.cssl" },
456
- "3": { "name": "storage.type.parameter.cssl" },
555
+ "3": { "name": "support.type.cssl" },
457
556
  "4": { "name": "punctuation.definition.typeparameters.end.cssl" }
458
557
  }
459
558
  },
460
559
  {
461
- "name": "storage.type.container.cssl",
560
+ "name": "support.type.cssl",
462
561
  "match": "\\b(array|vector|stack|list|dictionary|dict|map|datastruct|dataspace|shuffled|iterator|combo|openquote|instance|tuple|set|queue)\\b"
463
562
  },
464
563
  {
465
- "name": "storage.type.combo-open.cssl",
564
+ "name": "support.type.cssl",
466
565
  "match": "\\bcombo\\s*<\\s*open\\s*&"
467
566
  }
468
567
  ]
469
568
  },
470
569
  "function-modifiers": {
471
570
  "patterns": [
571
+ {
572
+ "comment": "embedded keyword - italic, darker purple/magenta",
573
+ "name": "keyword.control.embedded.cssl",
574
+ "match": "\\b(embedded)\\s+(?=(class|[a-zA-Z_]))",
575
+ "captures": {
576
+ "1": { "name": "keyword.control.embedded.cssl" }
577
+ }
578
+ },
579
+ {
580
+ "comment": "embedded function/class name - same color as switch",
581
+ "name": "meta.embedded.definition.cssl",
582
+ "match": "\\b(embedded)\\s+(class\\s+)?([a-zA-Z_][a-zA-Z0-9_]*)",
583
+ "captures": {
584
+ "1": { "name": "keyword.control.embedded.cssl" },
585
+ "2": { "name": "storage.type.class.cssl" },
586
+ "3": { "name": "keyword.control.cssl" }
587
+ }
588
+ },
589
+ {
590
+ "comment": "open ParamName - ParamName in orange",
591
+ "name": "meta.open.parameter.cssl",
592
+ "match": "\\b(open)\\s+([a-zA-Z_][a-zA-Z0-9_]*)",
593
+ "captures": {
594
+ "1": { "name": "storage.modifier.cssl" },
595
+ "2": { "name": "constant.character.escape.infuse.cssl" }
596
+ }
597
+ },
598
+ {
599
+ "comment": "switch(variable) - variable in orange",
600
+ "name": "meta.switch.expression.cssl",
601
+ "match": "\\b(switch)\\s*\\(\\s*([a-zA-Z_][a-zA-Z0-9_]*)\\s*\\)",
602
+ "captures": {
603
+ "1": { "name": "keyword.control.cssl" },
604
+ "2": { "name": "constant.character.escape.infuse.cssl" }
605
+ }
606
+ },
472
607
  {
473
608
  "name": "storage.modifier.cssl",
474
- "match": "\\b(undefined|open|closed|private|virtual|meta|super|sqlbased|protected|limited)\\b"
609
+ "match": "\\b(undefined|open|closed|private|virtual|meta|super|sqlbased|protected|limited|const|static|final|abstract|readonly)\\b"
475
610
  }
476
611
  ]
477
612
  },
@@ -619,24 +754,48 @@
619
754
  "instance-references": {
620
755
  "patterns": [
621
756
  {
622
- "comment": "instance<\"name\"> - shared instance reference with string",
757
+ "comment": "instance<\"name\"> varName - shared instance declaration with variable",
758
+ "name": "meta.instance.declaration.cssl",
759
+ "match": "(\\binstance)(<)(\"[^\"]+\")(>)\\s+([a-zA-Z_][a-zA-Z0-9_]*)",
760
+ "captures": {
761
+ "1": { "name": "support.type.cssl" },
762
+ "2": { "name": "punctuation.definition.typeparameters.begin.cssl" },
763
+ "3": { "name": "string.quoted.double.cssl" },
764
+ "4": { "name": "punctuation.definition.typeparameters.end.cssl" },
765
+ "5": { "name": "variable.other.declaration.cssl" }
766
+ }
767
+ },
768
+ {
769
+ "comment": "instance<Type> varName - shared instance declaration with type and variable",
770
+ "name": "meta.instance.declaration.cssl",
771
+ "match": "(\\binstance)(<)([a-zA-Z_][a-zA-Z0-9_]*)(>)\\s+([a-zA-Z_][a-zA-Z0-9_]*)",
772
+ "captures": {
773
+ "1": { "name": "support.type.cssl" },
774
+ "2": { "name": "punctuation.definition.typeparameters.begin.cssl" },
775
+ "3": { "name": "support.type.cssl" },
776
+ "4": { "name": "punctuation.definition.typeparameters.end.cssl" },
777
+ "5": { "name": "variable.other.declaration.cssl" }
778
+ }
779
+ },
780
+ {
781
+ "comment": "instance<\"name\"> - shared instance reference without variable",
623
782
  "name": "meta.instance.cssl",
624
783
  "match": "(\\binstance)(<)(\"[^\"]+\")(>)",
625
784
  "captures": {
626
- "1": { "name": "storage.type.instance.cssl" },
785
+ "1": { "name": "support.type.cssl" },
627
786
  "2": { "name": "punctuation.definition.typeparameters.begin.cssl" },
628
787
  "3": { "name": "string.quoted.double.cssl" },
629
788
  "4": { "name": "punctuation.definition.typeparameters.end.cssl" }
630
789
  }
631
790
  },
632
791
  {
633
- "comment": "instance<Type> - shared instance reference with type",
792
+ "comment": "instance<Type> - shared instance reference without variable",
634
793
  "name": "meta.instance.cssl",
635
794
  "match": "(\\binstance)(<)([a-zA-Z_][a-zA-Z0-9_]*)(>)",
636
795
  "captures": {
637
- "1": { "name": "storage.type.instance.cssl" },
796
+ "1": { "name": "support.type.cssl" },
638
797
  "2": { "name": "punctuation.definition.typeparameters.begin.cssl" },
639
- "3": { "name": "entity.name.type.cssl" },
798
+ "3": { "name": "support.type.cssl" },
640
799
  "4": { "name": "punctuation.definition.typeparameters.end.cssl" }
641
800
  }
642
801
  }
@@ -0,0 +1,277 @@
1
+ Metadata-Version: 2.4
2
+ Name: IncludeCPP
3
+ Version: 4.3.0
4
+ Summary: Professional C++ Python bindings with type-generic templates, pystubs and native threading
5
+ Home-page: https://github.com/liliassg/IncludeCPP
6
+ Author: Lilias Hatterscheidt
7
+ Author-email: Lilias Hatterscheidt <hatterscheidt.lilias@gmail.com>
8
+ License: MIT
9
+ Project-URL: Repository, https://github.com/liliassg/IncludeCPP
10
+ Project-URL: Bug Tracker, https://github.com/liliassg/IncludeCPP/issues
11
+ Keywords: c++,python,bindings,pybind11,template,performance,threading
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
15
+ Classifier: Programming Language :: Python :: 3.9
16
+ Classifier: Programming Language :: Python :: 3.10
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Programming Language :: C++
21
+ Classifier: License :: OSI Approved :: MIT License
22
+ Classifier: Operating System :: OS Independent
23
+ Requires-Python: >=3.8
24
+ Description-Content-Type: text/markdown
25
+ License-File: LICENSE
26
+ Requires-Dist: pybind11>=2.11.0
27
+ Requires-Dist: click>=8.0.0
28
+ Requires-Dist: typing-extensions>=4.0.0
29
+ Requires-Dist: requests>=2.28.0
30
+ Requires-Dist: colorama>=0.4.0
31
+ Dynamic: author
32
+ Dynamic: home-page
33
+ Dynamic: license-file
34
+ Dynamic: requires-python
35
+
36
+ # IncludeCPP
37
+
38
+ Use C++ code in Python. Write your C++ functions and classes, IncludeCPP generates the Python bindings automatically.
39
+
40
+ ```bash
41
+ pip install IncludeCPP
42
+ ```
43
+
44
+ ## Quick Start
45
+
46
+ ### 1. Create a Project
47
+
48
+ ```bash
49
+ mkdir myproject && cd myproject
50
+ includecpp init
51
+ ```
52
+
53
+ This creates:
54
+ - `cpp.proj` - your project settings
55
+ - `include/` - put your C++ files here
56
+ - `plugins/` - binding files go here (auto-generated)
57
+
58
+ ### 2. Write Some C++
59
+
60
+ Create `include/math.cpp`:
61
+
62
+ ```cpp
63
+ namespace includecpp {
64
+
65
+ int add(int a, int b) {
66
+ return a + b;
67
+ }
68
+
69
+ int multiply(int a, int b) {
70
+ return a * b;
71
+ }
72
+
73
+ }
74
+ ```
75
+
76
+ Your code must be inside `namespace includecpp`. Everything outside is ignored.
77
+
78
+ ### 3. Generate Bindings
79
+
80
+ ```bash
81
+ includecpp plugin math include/math.cpp
82
+ ```
83
+
84
+ This scans your C++ and creates `plugins/math.cp` with the binding instructions.
85
+
86
+ ### 4. Build
87
+
88
+ ```bash
89
+ includecpp rebuild
90
+ ```
91
+
92
+ Compiles your C++ into a Python module.
93
+
94
+ ### 5. Use in Python
95
+
96
+ ```python
97
+ from includecpp import math
98
+
99
+ print(math.add(2, 3)) # 5
100
+ print(math.multiply(4, 5)) # 20
101
+ ```
102
+
103
+ Done. Your C++ code works in Python.
104
+
105
+ ---
106
+
107
+ ## Classes
108
+
109
+ C++ classes work the same way:
110
+
111
+ ```cpp
112
+ // include/calculator.cpp
113
+ #include <vector>
114
+
115
+ namespace includecpp {
116
+
117
+ class Calculator {
118
+ public:
119
+ Calculator() : result(0) {}
120
+
121
+ void add(int x) { result += x; }
122
+ void subtract(int x) { result -= x; }
123
+ int getResult() { return result; }
124
+ void reset() { result = 0; }
125
+
126
+ private:
127
+ int result;
128
+ };
129
+
130
+ }
131
+ ```
132
+
133
+ Generate and build:
134
+
135
+ ```bash
136
+ includecpp plugin calculator include/calculator.cpp
137
+ includecpp rebuild
138
+ ```
139
+
140
+ Use in Python:
141
+
142
+ ```python
143
+ from includecpp import calculator
144
+
145
+ calc = calculator.Calculator()
146
+ calc.add(10)
147
+ calc.add(5)
148
+ calc.subtract(3)
149
+ print(calc.getResult()) # 12
150
+ ```
151
+
152
+ ---
153
+
154
+ ## Development Workflow
155
+
156
+ When you're actively working on your C++:
157
+
158
+ ```bash
159
+ # Regenerate bindings AND rebuild in one command
160
+ includecpp auto math
161
+
162
+ # Fast rebuild (skips unchanged files, ~0.4s when nothing changed)
163
+ includecpp rebuild --fast
164
+
165
+ # Rebuild everything from scratch
166
+ includecpp rebuild --clean
167
+ ```
168
+
169
+ ---
170
+
171
+ ## CLI Commands
172
+
173
+ | Command | What it does |
174
+ |---------|-------------|
175
+ | `init` | Create project structure |
176
+ | `plugin <name> <file.cpp>` | Generate bindings from C++ |
177
+ | `auto <name>` | Regenerate bindings + rebuild |
178
+ | `rebuild` | Compile all modules |
179
+ | `rebuild --fast` | Fast incremental build |
180
+ | `rebuild --clean` | Full clean rebuild |
181
+ | `get <name>` | Show module's API |
182
+
183
+ ---
184
+
185
+ ## Project Configuration
186
+
187
+ The `cpp.proj` file controls your build:
188
+
189
+ ```json
190
+ {
191
+ "project": "MyProject",
192
+ "include": "/include",
193
+ "plugins": "/plugins",
194
+ "compiler": {
195
+ "standard": "c++17",
196
+ "optimization": "O3"
197
+ }
198
+ }
199
+ ```
200
+
201
+ ---
202
+
203
+ ## Plugin Files (.cp)
204
+
205
+ The `.cp` files tell IncludeCPP what to expose. They're auto-generated, but you can edit them:
206
+
207
+ ```
208
+ SOURCE(calculator.cpp) calculator
209
+
210
+ PUBLIC(
211
+ calculator CLASS(Calculator) {
212
+ CONSTRUCTOR()
213
+ METHOD(add)
214
+ METHOD(subtract)
215
+ METHOD(getResult)
216
+ METHOD(reset)
217
+ }
218
+ )
219
+ ```
220
+
221
+ Common directives:
222
+ - `CLASS(Name)` - expose a class
223
+ - `METHOD(name)` - expose a method
224
+ - `FUNC(name)` - expose a function
225
+ - `FIELD(name)` - expose a member variable
226
+ - `CONSTRUCTOR()` or `CONSTRUCTOR(int, string)` - expose constructor
227
+
228
+ ---
229
+
230
+ ## Requirements
231
+
232
+ - Python 3.9+
233
+ - C++ compiler (g++, clang++, or MSVC)
234
+ - CMake
235
+
236
+ pybind11 is installed automatically.
237
+
238
+ ---
239
+
240
+ ## More Help
241
+
242
+ ```bash
243
+ includecpp --doc # Full documentation
244
+ includecpp --changelog # Version history
245
+ includecpp <command> --help
246
+ ```
247
+
248
+ ---
249
+
250
+ ## Experimental Features
251
+
252
+ IncludeCPP also includes experimental features that are still in development:
253
+
254
+ - **CSSL** - A scripting language for runtime code manipulation
255
+ - **AI Commands** - OpenAI-powered code analysis (`includecpp ai`)
256
+ - **CPPY** - Python to C++ conversion (`includecpp cppy`)
257
+
258
+ These are hidden by default. To enable them:
259
+
260
+ ```bash
261
+ includecpp settings
262
+ ```
263
+
264
+ Check "Enable Experimental Features" and save.
265
+
266
+ Warning: Experimental features may have bugs or breaking changes between versions.
267
+
268
+ ---
269
+
270
+ ## Issues
271
+
272
+ Report bugs at: https://github.com/liliassg/IncludeCPP/issues
273
+
274
+ ```bash
275
+ includecpp bug # Quick bug report
276
+ includecpp update # Update to latest version
277
+ ```