ceedling 1.1.5 → 1.1.7

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.
Files changed (99) hide show
  1. checksums.yaml +4 -4
  2. data/GIT_COMMIT_SHA +1 -1
  3. data/Gemfile +4 -0
  4. data/Gemfile.lock +2 -0
  5. data/README.md +4 -1
  6. data/assets/tests_with_conditional_includes/src/feature_config.h +13 -0
  7. data/assets/tests_with_conditional_includes/src/feature_extra.h +13 -0
  8. data/assets/tests_with_conditional_includes/src/local_flag_extra.h +13 -0
  9. data/assets/tests_with_conditional_includes/src/nested_extra.h +13 -0
  10. data/assets/tests_with_conditional_includes/src/nested_wrapper.h +16 -0
  11. data/assets/tests_with_conditional_includes/src/project_flag_extra.h +13 -0
  12. data/assets/tests_with_conditional_includes/src/widget.c +48 -0
  13. data/assets/tests_with_conditional_includes/src/widget.h +15 -0
  14. data/assets/tests_with_conditional_includes/src/widget_feature.c +29 -0
  15. data/assets/tests_with_conditional_includes/src/widget_feature.h +13 -0
  16. data/assets/tests_with_conditional_includes/test/test_widget.c +44 -0
  17. data/assets/tests_with_conditional_includes/test/test_widget_feature.c +31 -0
  18. data/docs/Changelog.md +31 -1
  19. data/docs/KnownIssues.md +1 -0
  20. data/docs/mkdocs/configuration/project-file.md +25 -7
  21. data/docs/mkdocs/configuration/reference/cexception.md +1 -1
  22. data/docs/mkdocs/configuration/reference/cmock.md +1 -1
  23. data/docs/mkdocs/configuration/reference/unity.md +1 -1
  24. data/docs/mkdocs/getting-started/quick-start.md +11 -8
  25. data/docs/mkdocs/plugins/gcov/gcovr.md +324 -189
  26. data/docs/mkdocs/plugins/gcov/reportgenerator.md +113 -31
  27. data/docs/mkdocs/reference/gcov-plugin.md +21 -3
  28. data/docs/mkdocs/snapshot/plugins/gcov/config/defaults.yml +0 -1
  29. data/examples/wondrous_forest/src/SensorHal.h +13 -0
  30. data/examples/wondrous_forest/src/TemperatureSensor.c +12 -5
  31. data/examples/wondrous_forest/src/TemperatureSensor.h +5 -4
  32. data/examples/wondrous_forest/test/TestTemperatureSensor.c +32 -3
  33. data/lib/ceedling/generators/generator_test_results_backtrace.rb +16 -8
  34. data/lib/ceedling/generators/generator_test_runner.rb +25 -1
  35. data/lib/ceedling/partials/partializer.rb +8 -1
  36. data/lib/ceedling/plugins/plugin_reportinator.rb +9 -0
  37. data/lib/ceedling/plugins/report_tests_stdout_plugin.rb +1 -1
  38. data/lib/ceedling/preprocess/preprocessinator.rb +22 -0
  39. data/lib/ceedling/preprocess/preprocessinator_includes_handler.rb +33 -0
  40. data/lib/version.rb +1 -1
  41. data/plugins/gcov/config/defaults.yml +0 -1
  42. data/plugins/gcov/lib/gcov.rb +35 -16
  43. data/plugins/gcov/lib/gcovr_reportinator.rb +31 -1
  44. data/plugins/valgrind/lib/valgrind.rb +1 -1
  45. data/site-local/configuration/project-file.html +78 -8
  46. data/site-local/configuration/reference/cexception.html +5 -5
  47. data/site-local/configuration/reference/cmock.html +5 -5
  48. data/site-local/configuration/reference/unity.html +5 -5
  49. data/site-local/getting-started/quick-start.html +13 -9
  50. data/site-local/plugins/gcov/gcovr.html +1215 -255
  51. data/site-local/plugins/gcov/reportgenerator.html +404 -46
  52. data/site-local/reference/gcov-plugin.html +40 -7
  53. data/site-local/sitemap.xml.gz +0 -0
  54. data/site-local/snapshot/plugins/gcov/config/defaults.yml +0 -1
  55. data/spec/support/system/spec_system_helper.rb +11 -0
  56. data/spec/support/system/system_context.rb +25 -12
  57. data/spec/system/conditional_include_macro_visibility_spec.rb +152 -0
  58. data/spec/system/deployment_as_gem_spec.rb +2 -0
  59. data/spec/system/deployment_as_vendor_spec.rb +2 -0
  60. data/spec/system/encoding_stress_spec.rb +4 -4
  61. data/spec/system/example_wondrous_forest_spec.rb +2 -2
  62. data/spec/system/gcov_deployment_spec.rb +2 -0
  63. data/spec/system/support/common_test_cases.rb +47 -1
  64. data/spec/system/support/gcov_common_test_cases.rb +52 -0
  65. data/spec/system/test_runner_system_include_spec.rb +90 -0
  66. data/spec/units/generators/generator_test_results_backtrace_spec.rb +51 -0
  67. data/spec/units/generators/generator_test_runner_spec.rb +69 -0
  68. data/spec/units/partials/partializer_spec.rb +69 -0
  69. data/spec/units/plugin_reportinator_spec.rb +38 -0
  70. data/spec/units/preprocess/preprocessinator_includes_handler_spec.rb +61 -0
  71. data/spec/units/preprocess/preprocessinator_spec.rb +136 -0
  72. data/vendor/c_exception/lib/CException.h +1 -1
  73. data/vendor/c_exception/project.yml +2 -2
  74. data/vendor/c_exception/test/TestException.c +1 -1
  75. data/vendor/c_exception/test/support/CExceptionConfig.h +5 -11
  76. data/vendor/cmock/docs/CMockChangeLog.md +23 -22
  77. data/vendor/cmock/scripts/create_makefile.rb +4 -3
  78. data/vendor/cmock/src/cmock.h +1 -1
  79. data/vendor/cmock/vendor/c_exception/lib/CException.h +1 -1
  80. data/vendor/cmock/vendor/c_exception/project.yml +2 -2
  81. data/vendor/cmock/vendor/c_exception/test/TestException.c +1 -1
  82. data/vendor/cmock/vendor/c_exception/test/support/CExceptionConfig.h +5 -11
  83. data/vendor/cmock/vendor/unity/auto/generate_test_runner.rb +85 -29
  84. data/vendor/cmock/vendor/unity/docs/UnityChangeLog.md +1 -0
  85. data/vendor/cmock/vendor/unity/examples/unity_config.h +8 -0
  86. data/vendor/cmock/vendor/unity/src/unity.c +9 -1
  87. data/vendor/cmock/vendor/unity/src/unity.h +1 -1
  88. data/vendor/cmock/vendor/unity/test/rakefile +2 -1
  89. data/vendor/cmock/vendor/unity/test/testdata/testRunnerGeneratorEmpty.c +13 -0
  90. data/vendor/cmock/vendor/unity/test/tests/test_generate_test_runner.rb +31 -0
  91. data/vendor/unity/auto/generate_test_runner.rb +63 -57
  92. data/vendor/unity/docs/UnityChangeLog.md +1 -0
  93. data/vendor/unity/examples/unity_config.h +8 -0
  94. data/vendor/unity/src/unity.c +9 -1
  95. data/vendor/unity/src/unity.h +1 -1
  96. data/vendor/unity/test/rakefile +2 -1
  97. data/vendor/unity/test/tests/test_generate_test_runner.rb +20 -0
  98. metadata +23 -3
  99. data/vendor/cmock/vendor/unity/auto/run_test.erb +0 -37
@@ -50,6 +50,28 @@ class GcovrReportinator < GcovReportinator
50
50
  "(found #{@gcovr_version.major}.#{@gcovr_version.minor})"
51
51
  )
52
52
  end
53
+
54
+ # --decisions requires gcovr 6+; --fail-under-decision (which depends on --decisions)
55
+ # is a distinct, later addition requiring gcovr 7+ -- confirmed directly against real
56
+ # gcovr 6.0, which rejects --fail-under-decision outright as an unrecognized argument.
57
+ # Raised here, upfront, rather than left to surface as gcovr's own opaque CLI error or
58
+ # silently dropped -- either of which would leave a configured coverage threshold
59
+ # quietly never actually checked.
60
+ gcovr_opts = @config[GCOVR_SETTING_PREFIX.to_sym] || {}
61
+
62
+ if !gcovr_opts[:fail_under_decision].nil? && !min_version?( @gcovr_version, 7, 0 )
63
+ raise CeedlingException.new(
64
+ ":gcov ↳ :gcovr ↳ :fail_under_decision ➡️ requires gcovr 7 or higher " \
65
+ "(found #{@gcovr_version.major}.#{@gcovr_version.minor})"
66
+ )
67
+ end
68
+
69
+ if gcovr_opts[:decisions] && !min_version?( @gcovr_version, 6, 0 )
70
+ raise CeedlingException.new(
71
+ ":gcov ↳ :gcovr ↳ :decisions ➡️ requires gcovr 6 or higher " \
72
+ "(found #{@gcovr_version.major}.#{@gcovr_version.minor})"
73
+ )
74
+ end
53
75
  end
54
76
 
55
77
  # Generate the gcovr report(s) specified in the options.
@@ -112,6 +134,14 @@ class GcovrReportinator < GcovReportinator
112
134
  args += "--merge-mode-functions \"#{gcovr_opts[:merge_mode_function]}\" " unless gcovr_opts[:merge_mode_function].nil?
113
135
  end
114
136
 
137
+ # --fail-under-decision is a no-op to gcovr without --decisions also present (that's
138
+ # what actually turns decision-coverage analysis on) -- :fail_under_decision implies
139
+ # it automatically so the threshold option can never be configured into silently
140
+ # failing outright. initialize already guarantees gcovr 6+ whenever either is set
141
+ # (7+ specifically whenever :fail_under_decision is set), matching this method's own
142
+ # 6+ gate above.
143
+ args += "--decisions " if gcovr_opts[:decisions] || !gcovr_opts[:fail_under_decision].nil?
144
+
115
145
  [:fail_under_line,
116
146
  :fail_under_branch,
117
147
  :fail_under_decision,
@@ -327,7 +357,7 @@ class GcovrReportinator < GcovReportinator
327
357
  # configuration must come from the gcovr configuration file itself.
328
358
  IGNORED_WHEN_CONFIG_FILE_SET = [
329
359
  :report_include, :report_exclude, :gcov_filter, :gcov_exclude, :exclude_directories,
330
- :branches, :sort_uncovered, :sort_percentage, :print_summary, :gcov_executable,
360
+ :branches, :decisions, :sort_uncovered, :sort_percentage, :print_summary, :gcov_executable,
331
361
  :exclude_unreachable_branches, :exclude_throw_branches, :use_gcov_files, :gcov_ignore_parse_errors,
332
362
  :keep, :delete, :threads, :merge_mode_function,
333
363
  :fail_under_line, :fail_under_branch, :fail_under_decision, :fail_under_function,
@@ -101,7 +101,7 @@ class Valgrind < Plugin
101
101
  results: results
102
102
  }
103
103
 
104
- verbosity = (results[:counts][:failed] > 0) ? Verbosity::ERRORS : Verbosity::NORMAL
104
+ verbosity = @plugin_reportinator.test_results_floor_verbosity
105
105
 
106
106
  # Print unit test suite results
107
107
  @plugin_reportinator.run_test_results_report( hash, verbosity )
@@ -1684,6 +1684,34 @@
1684
1684
  </span>
1685
1685
  </a>
1686
1686
 
1687
+ <nav class="md-nav" aria-label="Some YAML Learnin’">
1688
+ <ul class="md-nav__list">
1689
+
1690
+ <li class="md-nav__item">
1691
+ <a href="#yaml-highlights-overview" class="md-nav__link">
1692
+ <span class="md-ellipsis">
1693
+
1694
+ YAML highlights &amp; overview
1695
+
1696
+ </span>
1697
+ </a>
1698
+
1699
+ </li>
1700
+
1701
+ <li class="md-nav__item">
1702
+ <a href="#yaml-anchors-aliases-and-extensions" class="md-nav__link">
1703
+ <span class="md-ellipsis">
1704
+
1705
+ YAML anchors, aliases, and extensions
1706
+
1707
+ </span>
1708
+ </a>
1709
+
1710
+ </li>
1711
+
1712
+ </ul>
1713
+ </nav>
1714
+
1687
1715
  </li>
1688
1716
 
1689
1717
  <li class="md-nav__item">
@@ -4102,6 +4130,34 @@
4102
4130
  </span>
4103
4131
  </a>
4104
4132
 
4133
+ <nav class="md-nav" aria-label="Some YAML Learnin’">
4134
+ <ul class="md-nav__list">
4135
+
4136
+ <li class="md-nav__item">
4137
+ <a href="#yaml-highlights-overview" class="md-nav__link">
4138
+ <span class="md-ellipsis">
4139
+
4140
+ YAML highlights &amp; overview
4141
+
4142
+ </span>
4143
+ </a>
4144
+
4145
+ </li>
4146
+
4147
+ <li class="md-nav__item">
4148
+ <a href="#yaml-anchors-aliases-and-extensions" class="md-nav__link">
4149
+ <span class="md-ellipsis">
4150
+
4151
+ YAML anchors, aliases, and extensions
4152
+
4153
+ </span>
4154
+ </a>
4155
+
4156
+ </li>
4157
+
4158
+ </ul>
4159
+ </nav>
4160
+
4105
4161
  </li>
4106
4162
 
4107
4163
  <li class="md-nav__item">
@@ -4241,10 +4297,20 @@
4241
4297
  example of a complete project configuration.</p>
4242
4298
  </div>
4243
4299
  <h2 id="some-yaml-learnin">Some YAML Learnin’</h2>
4244
- <p>Please consult YAML documentation for the finer points of format
4245
- and to understand details of our YAML-based configuration file.</p>
4246
4300
  <p>We recommend <a href="http://en.wikipedia.org/wiki/Yaml">Wikipedia’s entry on YAML</a>
4247
- for this. A few highlights from that reference page:</p>
4301
+ and <a href="https://www.educative.io/blog/advanced-yaml-syntax-cheatsheet">educative.io’s advanced YAML cheatsheet</a>
4302
+ for a simple overview of YAML and its syntax sufficient for
4303
+ understanding your Ceedling project configuration.</p>
4304
+ <div class="admonition tip">
4305
+ <p class="admonition-title"><code>ceedling dumpconfig</code> to verify your YAML</p>
4306
+ <p>Ceedling provides a means to export the final result of YAML
4307
+ processing for your inspection via <a href="../getting-started/command-line.html#ceedling-dumpconfig-filepath-sections"><code>dumpconfig</code></a>.
4308
+ Dump output includes the resolution of advanced YAML features and
4309
+ Ceedling’s own manipulations. This is a good way to troubleshoot
4310
+ your project configuration.</p>
4311
+ </div>
4312
+ <h3 id="yaml-highlights-overview">YAML highlights &amp; overview</h3>
4313
+ <p>A few points from the preceding references:</p>
4248
4314
  <ul>
4249
4315
  <li>
4250
4316
  <p>YAML streams are encoded using the set of printable Unicode
@@ -4279,12 +4345,16 @@ for this. A few highlights from that reference page:</p>
4279
4345
  punctuation can generally be represented without needing
4280
4346
  to be enclosed in quotes.</p>
4281
4347
  </li>
4282
- <li>
4283
- <p>Repeated nodes are initially denoted by an ampersand (<code>&amp;</code>) and
4284
- thereafter referenced with an asterisk (<code>*</code>). These are known as
4285
- anchors and aliases in YAML speak.</p>
4286
- </li>
4287
4348
  </ul>
4349
+ <h3 id="yaml-anchors-aliases-and-extensions">YAML anchors, aliases, and extensions</h3>
4350
+ <p>YAML provides several “shortcuts” for referencing and modifying blocks
4351
+ of YAML so you can avoid duplication. This is advanced YAML and
4352
+ well beyond the scope of Ceedling documentation. However, know that
4353
+ Ceedling’s YAML parser is entirely capable of handling these advanced
4354
+ aspects of YAML.</p>
4355
+ <p>See this <a href="https://www.educative.io/blog/advanced-yaml-syntax-cheatsheet#anchors">cheatsheet entry</a>
4356
+ and <a href="https://blog.daemonl.com/2016/02/yaml.html">this guide</a>
4357
+ for much more on these powerful but finicky features.</p>
4288
4358
  <h2 id="notes-on-project-file-structure">Notes on Project File Structure</h2>
4289
4359
  <ul>
4290
4360
  <li>
@@ -2344,10 +2344,10 @@
2344
2344
  <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
2345
2345
 
2346
2346
  <li class="md-nav__item">
2347
- <a href="#exmaple-cmock-yaml" class="md-nav__link">
2347
+ <a href="#example-cmock-yaml" class="md-nav__link">
2348
2348
  <span class="md-ellipsis">
2349
2349
 
2350
- Exmaple :cmock YAML
2350
+ Example :cmock YAML
2351
2351
 
2352
2352
  </span>
2353
2353
  </a>
@@ -4046,10 +4046,10 @@
4046
4046
  <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
4047
4047
 
4048
4048
  <li class="md-nav__item">
4049
- <a href="#exmaple-cmock-yaml" class="md-nav__link">
4049
+ <a href="#example-cmock-yaml" class="md-nav__link">
4050
4050
  <span class="md-ellipsis">
4051
4051
 
4052
- Exmaple :cmock YAML
4052
+ Example :cmock YAML
4053
4053
 
4054
4054
  </span>
4055
4055
  </a>
@@ -4155,7 +4155,7 @@
4155
4155
 
4156
4156
  <h1 id="cexception"><code>:cexception</code></h1>
4157
4157
  <p><strong>Configure CException’s features</strong></p>
4158
- <h2 id="exmaple-cmock-yaml">Exmaple <code>:cmock</code> YAML</h2>
4158
+ <h2 id="example-cmock-yaml">Example <code>:cmock</code> YAML</h2>
4159
4159
  <div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nt">:cexception</span><span class="p">:</span>
4160
4160
  <a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="w"> </span><span class="nt">:defines</span><span class="p">:</span>
4161
4161
  <a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="w"> </span><span class="c1"># Enables CException `#include`ing CExceptionConfig.h</span>
@@ -2288,10 +2288,10 @@
2288
2288
  <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
2289
2289
 
2290
2290
  <li class="md-nav__item">
2291
- <a href="#exmaple-cmock-yaml" class="md-nav__link">
2291
+ <a href="#example-cmock-yaml" class="md-nav__link">
2292
2292
  <span class="md-ellipsis">
2293
2293
 
2294
- Exmaple :cmock YAML
2294
+ Example :cmock YAML
2295
2295
 
2296
2296
  </span>
2297
2297
  </a>
@@ -4112,10 +4112,10 @@
4112
4112
  <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
4113
4113
 
4114
4114
  <li class="md-nav__item">
4115
- <a href="#exmaple-cmock-yaml" class="md-nav__link">
4115
+ <a href="#example-cmock-yaml" class="md-nav__link">
4116
4116
  <span class="md-ellipsis">
4117
4117
 
4118
- Exmaple :cmock YAML
4118
+ Example :cmock YAML
4119
4119
 
4120
4120
  </span>
4121
4121
  </a>
@@ -4290,7 +4290,7 @@
4290
4290
  <p>Ceedling sets values for a subset of CMock settings. All CMock options are
4291
4291
  available to be set, but only those options set by Ceedling in an automated
4292
4292
  fashion are documented below. See <a href="https://github.com/ThrowTheSwitch/CMock/blob/master/docs/CMock_Summary.md">CMock documentation</a>.</p>
4293
- <h2 id="exmaple-cmock-yaml">Exmaple <code>:cmock</code> YAML</h2>
4293
+ <h2 id="example-cmock-yaml">Example <code>:cmock</code> YAML</h2>
4294
4294
  <div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nt">:cmock</span><span class="p">:</span>
4295
4295
  <a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="w"> </span><span class="nt">:when_no_prototypes</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">:warn</span>
4296
4296
  <a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="w"> </span><span class="nt">:enforce_strict_ordering</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">TRUE</span>
@@ -2260,10 +2260,10 @@
2260
2260
  <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
2261
2261
 
2262
2262
  <li class="md-nav__item">
2263
- <a href="#exmaple-unity-yaml" class="md-nav__link">
2263
+ <a href="#example-unity-yaml" class="md-nav__link">
2264
2264
  <span class="md-ellipsis">
2265
2265
 
2266
- Exmaple :unity YAML
2266
+ Example :unity YAML
2267
2267
 
2268
2268
  </span>
2269
2269
  </a>
@@ -4057,10 +4057,10 @@
4057
4057
  <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
4058
4058
 
4059
4059
  <li class="md-nav__item">
4060
- <a href="#exmaple-unity-yaml" class="md-nav__link">
4060
+ <a href="#example-unity-yaml" class="md-nav__link">
4061
4061
  <span class="md-ellipsis">
4062
4062
 
4063
- Exmaple :unity YAML
4063
+ Example :unity YAML
4064
4064
 
4065
4065
  </span>
4066
4066
  </a>
@@ -4177,7 +4177,7 @@
4177
4177
 
4178
4178
  <h1 id="unity"><code>:unity</code></h1>
4179
4179
  <p><strong>Configure Unity’s features</strong></p>
4180
- <h2 id="exmaple-unity-yaml">Exmaple <code>:unity</code> YAML</h2>
4180
+ <h2 id="example-unity-yaml">Example <code>:unity</code> YAML</h2>
4181
4181
  <div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nt">:unity</span><span class="p">:</span>
4182
4182
  <a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="w"> </span><span class="nt">:defines</span><span class="p">:</span>
4183
4183
  <a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">UNITY_INT_WIDTH=16</span><span class="w"> </span><span class="c1"># 16 bit processor without support for 32 bit instructions</span>
@@ -4185,6 +4185,12 @@ configuration file could be as simple as this:</p>
4185
4185
  through running build tasks. Jump down just a teeny bit to see what the Ceedling
4186
4186
  command line looks like and navigate to all the documentation for the steps
4187
4187
  listed immediately below.</p>
4188
+ <div class="admonition warning">
4189
+ <p class="admonition-title">C toolchain requirement</p>
4190
+ <p>Ceedling requires a command line C toolchain be available in your path and is
4191
+ flexible enough to work with most anything. By default, Ceedling is ready to
4192
+ work with <a href="https://gcc.gnu.org">GCC</a> out of the box (we recommend <a href="http://www.mingw.org/">MinGW</a> on Windows).</p>
4193
+ </div>
4188
4194
  <ol>
4189
4195
  <li><a href="installation.html">Install Ceedling</a></li>
4190
4196
  <li>Create a project<ul>
@@ -4200,16 +4206,14 @@ listed immediately below.</p>
4200
4206
  </li>
4201
4207
  <li>Run Ceedling tasks (see next section) from the working directory of your project.</li>
4202
4208
  </ol>
4203
- <div class="admonition note">
4204
- <p class="admonition-title">Note</p>
4205
- <p>Ceedling requires a command line C toolchain be available in your path. It’s
4206
- flexible enough to work with most anything on any platform. By default, Ceedling
4207
- is ready to work with <a href="https://gcc.gnu.org">GCC</a> out of the box (we recommend the <a href="http://www.mingw.org/">MinGW</a> project
4208
- on Windows).</p>
4209
+ <p>A common build strategy is to use your target toolchain for release builds—with or
4210
+ without Ceedling—but rely on Ceedling + GCC for test builds (more on this
4211
+ <a href="../overview/index.html">here</a>).</p>
4212
+ <div class="admonition tip">
4213
+ <p class="admonition-title">Ceedling VS Code extension</p>
4214
+ <p>If you are a Visual Studio Code user, you may want to install the
4215
+ <a href="https://marketplace.visualstudio.com/items?itemName=throw-the-switch.vscode-ceedling">Ceedling extension</a>.</p>
4209
4216
  </div>
4210
- <p>A common build strategy with tooling other than GCC is to use your target
4211
- toolchain for release builds—with or without Ceedling—but rely on Ceedling +
4212
- GCC for test builds (more on all this <a href="../overview/index.html">here</a>).</p>
4213
4217
  <h2 id="command-line-build-tasks">Command Line &amp; Build Tasks</h2>
4214
4218
  <p>Once you have Ceedling installed, you always have access to <code>ceedling help</code>.</p>
4215
4219
  <p>Once you have Ceedling installed, you have options for project creation