ceedling 1.1.2 → 1.1.4

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 (173) hide show
  1. checksums.yaml +4 -4
  2. data/GIT_COMMIT_SHA +1 -1
  3. data/README.md +1 -1
  4. data/assets/fake_crash_test_fixture.rb +14 -0
  5. data/assets/partial_all_module.h +11 -0
  6. data/assets/run_with_ubsan.rb +15 -0
  7. data/assets/same_dir_pairing_module.c +4 -0
  8. data/assets/same_dir_pairing_module.h +8 -0
  9. data/assets/same_dir_pairing_module_func.h +6 -0
  10. data/assets/same_dir_pairing_other.c +4 -0
  11. data/assets/same_dir_pairing_other.h +8 -0
  12. data/assets/test_example_file_crash_sigsegv_with_param.c +32 -0
  13. data/assets/test_example_file_ub_shift_overflow.c +22 -0
  14. data/assets/test_partial_all_module.c +16 -0
  15. data/assets/test_same_dir_pairing.c +23 -0
  16. data/bin/actions_wrapper.rb +7 -6
  17. data/docs/Changelog.md +29 -1
  18. data/docs/mkdocs/configuration/reference/index.md +8 -0
  19. data/docs/mkdocs/configuration/reference/partials.md +38 -0
  20. data/examples/wondrous_forest/src/LightSensor.c +21 -4
  21. data/examples/wondrous_forest/src/LightSensor.h +12 -4
  22. data/examples/wondrous_forest/test/TestLightSensor.c +34 -4
  23. data/lib/ceedling/c_extractor/c_extractor.rb +37 -11
  24. data/lib/ceedling/c_extractor/c_extractor_constants.rb +0 -3
  25. data/lib/ceedling/c_extractor/c_extractor_declarations.rb +26 -25
  26. data/lib/ceedling/c_extractor/c_extractor_functions.rb +5 -12
  27. data/lib/ceedling/config/configurator.rb +8 -1
  28. data/lib/ceedling/config/configurator_setup.rb +26 -0
  29. data/lib/ceedling/defaults.rb +16 -2
  30. data/lib/ceedling/file_path_utils.rb +7 -0
  31. data/lib/ceedling/file_wrapper.rb +8 -0
  32. data/lib/ceedling/generators/generator.rb +15 -0
  33. data/lib/ceedling/generators/generator_helper.rb +25 -6
  34. data/lib/ceedling/generators/generator_partials.rb +84 -3
  35. data/lib/ceedling/generators/generator_test_results_backtrace.rb +268 -100
  36. data/lib/ceedling/generators/generator_test_runner.rb +20 -2
  37. data/lib/ceedling/includes/includes.rb +66 -11
  38. data/lib/ceedling/objects.yml +5 -0
  39. data/lib/ceedling/partials/partializer.rb +18 -3
  40. data/lib/ceedling/partials/partializer_utils.rb +6 -1
  41. data/lib/ceedling/preprocess/preprocessinator_includes_handler.rb +43 -16
  42. data/lib/ceedling/test_invoker/test_build_executor.rb +19 -8
  43. data/lib/version.rb +1 -1
  44. data/mkdocs.yml +1 -0
  45. data/plugins/gcov/lib/gcov.rb +2 -2
  46. data/site-local/404.html +30 -0
  47. data/site-local/configuration/environment-vars.html +30 -0
  48. data/site-local/configuration/global-collections.html +30 -0
  49. data/site-local/configuration/index.html +30 -0
  50. data/site-local/configuration/loading.html +30 -0
  51. data/site-local/configuration/mixins.html +30 -0
  52. data/site-local/configuration/parallel-builds.html +30 -0
  53. data/site-local/configuration/project-file.html +30 -0
  54. data/site-local/configuration/reference/cexception.html +30 -0
  55. data/site-local/configuration/reference/cmock.html +30 -0
  56. data/site-local/configuration/reference/defines.html +30 -0
  57. data/site-local/configuration/reference/environment.html +30 -0
  58. data/site-local/configuration/reference/extension.html +30 -0
  59. data/site-local/configuration/reference/files.html +30 -0
  60. data/site-local/configuration/reference/flags.html +30 -0
  61. data/site-local/configuration/reference/index.html +36 -0
  62. data/site-local/configuration/reference/libraries.html +30 -0
  63. data/site-local/configuration/reference/mixins.html +30 -0
  64. data/site-local/configuration/reference/partials.html +4257 -0
  65. data/site-local/configuration/reference/paths.html +30 -0
  66. data/site-local/configuration/reference/plugins.html +30 -0
  67. data/site-local/configuration/reference/project.html +30 -0
  68. data/site-local/configuration/reference/release-build.html +31 -1
  69. data/site-local/configuration/reference/test-build.html +31 -1
  70. data/site-local/configuration/reference/test-runner.html +30 -0
  71. data/site-local/configuration/reference/tools.html +30 -0
  72. data/site-local/configuration/reference/unity.html +30 -0
  73. data/site-local/configuration/which-ceedling.html +30 -0
  74. data/site-local/development/index.html +30 -0
  75. data/site-local/development/plugins/configuration.html +30 -0
  76. data/site-local/development/plugins/index.html +30 -0
  77. data/site-local/development/plugins/plugin-subclass.html +30 -0
  78. data/site-local/development/plugins/rake-tasks.html +30 -0
  79. data/site-local/development/workflow.html +30 -0
  80. data/site-local/getting-started/command-line.html +30 -0
  81. data/site-local/getting-started/example-projects/cipher-quest.html +30 -0
  82. data/site-local/getting-started/example-projects/index.html +30 -0
  83. data/site-local/getting-started/example-projects/temp-sensor.html +30 -0
  84. data/site-local/getting-started/example-projects/wondrous-forest.html +30 -0
  85. data/site-local/getting-started/index.html +30 -0
  86. data/site-local/getting-started/installation.html +30 -0
  87. data/site-local/getting-started/quick-start.html +30 -0
  88. data/site-local/help.html +30 -0
  89. data/site-local/index.html +30 -0
  90. data/site-local/overview/build-system.html +30 -0
  91. data/site-local/overview/index.html +30 -0
  92. data/site-local/overview/test-environments.html +30 -0
  93. data/site-local/overview/tools-and-frameworks.html +30 -0
  94. data/site-local/plugins/beep.html +30 -0
  95. data/site-local/plugins/bullseye.html +30 -0
  96. data/site-local/plugins/command-hooks.html +30 -0
  97. data/site-local/plugins/compile-commands-json-db.html +30 -0
  98. data/site-local/plugins/cppcheck.html +30 -0
  99. data/site-local/plugins/dependencies.html +30 -0
  100. data/site-local/plugins/fff.html +30 -0
  101. data/site-local/plugins/gcov/examples.html +30 -0
  102. data/site-local/plugins/gcov/gcovr.html +30 -0
  103. data/site-local/plugins/gcov/index.html +30 -0
  104. data/site-local/plugins/gcov/overview.html +30 -0
  105. data/site-local/plugins/gcov/reportgenerator.html +30 -0
  106. data/site-local/plugins/gcov/reporting.html +30 -0
  107. data/site-local/plugins/gcov/setup.html +30 -0
  108. data/site-local/plugins/gcov/tool-versions.html +30 -0
  109. data/site-local/plugins/gcov/troubleshooting.html +30 -0
  110. data/site-local/plugins/index.html +30 -0
  111. data/site-local/plugins/module-generator.html +30 -0
  112. data/site-local/plugins/report-build-warnings-log.html +30 -0
  113. data/site-local/plugins/report-tests-gtestlike-stdout.html +30 -0
  114. data/site-local/plugins/report-tests-ide-stdout.html +30 -0
  115. data/site-local/plugins/report-tests-log-factory.html +30 -0
  116. data/site-local/plugins/report-tests-pretty-stdout.html +30 -0
  117. data/site-local/plugins/report-tests-raw-output-log.html +30 -0
  118. data/site-local/plugins/report-tests-teamcity-stdout.html +30 -0
  119. data/site-local/plugins/valgrind.html +30 -0
  120. data/site-local/project/release-history.html +30 -0
  121. data/site-local/project/upgrade.html +30 -0
  122. data/site-local/reference/build-directives.html +30 -0
  123. data/site-local/reference/command-line.html +30 -0
  124. data/site-local/reference/environment-vars.html +30 -0
  125. data/site-local/reference/gcov-plugin.html +30 -0
  126. data/site-local/reference/global-collections.html +30 -0
  127. data/site-local/reference/index.html +30 -0
  128. data/site-local/reference/partials-macros.html +30 -0
  129. data/site-local/reference/project-configuration.html +30 -0
  130. data/site-local/sitemap.xml.gz +0 -0
  131. data/site-local/snapshot/examples/cipher_quest/index.html +30 -0
  132. data/site-local/snapshot/examples/temp_sensor/index.html +30 -0
  133. data/site-local/snapshot/examples/wondrous_forest/index.html +30 -0
  134. data/site-local/testing-guide/build-directives.html +30 -0
  135. data/site-local/testing-guide/conventions.html +30 -0
  136. data/site-local/testing-guide/frameworks.html +30 -0
  137. data/site-local/testing-guide/index.html +30 -0
  138. data/site-local/testing-guide/partials/configuration.html +30 -0
  139. data/site-local/testing-guide/partials/conventions.html +30 -0
  140. data/site-local/testing-guide/partials/directives.html +30 -0
  141. data/site-local/testing-guide/partials/example.html +30 -0
  142. data/site-local/testing-guide/partials/index.html +30 -0
  143. data/site-local/testing-guide/partials/overview.html +30 -0
  144. data/site-local/testing-guide/partials/variables.html +30 -0
  145. data/site-local/testing-guide/test-cases.html +30 -0
  146. data/site-local/testing-guide/test-sample.html +30 -0
  147. data/site-local/testing-guide/test-suite-anatomy.html +30 -0
  148. data/spec/support/system/spec_system_helper.rb +25 -0
  149. data/spec/support/system/system_context.rb +15 -0
  150. data/spec/system/deployment_as_gem_spec.rb +14 -0
  151. data/spec/system/deployment_as_vendor_spec.rb +19 -0
  152. data/spec/system/encoding_stress_spec.rb +4 -4
  153. data/spec/system/example_wondrous_forest_spec.rb +2 -2
  154. data/spec/system/support/common_test_cases.rb +227 -0
  155. data/spec/units/c_extractor/c_extractor_declarations_spec.rb +27 -4
  156. data/spec/units/c_extractor/c_extractor_functions_spec.rb +1 -11
  157. data/spec/units/c_extractor/c_extractor_integration_spec.rb +18 -11
  158. data/spec/units/c_extractor/c_extractor_spec.rb +57 -1
  159. data/spec/units/config/configurator_setup_spec.rb +61 -0
  160. data/spec/units/configurator_spec.rb +45 -0
  161. data/spec/units/file_path_utils_spec.rb +17 -0
  162. data/spec/units/generators/generator_helper_spec.rb +34 -7
  163. data/spec/units/generators/generator_partials_spec.rb +120 -12
  164. data/spec/units/generators/generator_test_results_backtrace_spec.rb +248 -41
  165. data/spec/units/generators/generator_test_runner_spec.rb +26 -2
  166. data/spec/units/includes/include_spec.rb +30 -18
  167. data/spec/units/includes/includes_spec.rb +100 -10
  168. data/spec/units/partials/partializer_spec.rb +113 -1
  169. data/spec/units/partials/partializer_utils_spec.rb +11 -0
  170. data/spec/units/preprocess/preprocessinator_includes_handler_spec.rb +96 -7
  171. data/spec/units/system_wrapper_spec.rb +72 -0
  172. data/spec/units/test_context_extractor_spec.rb +3 -3
  173. metadata +20 -2
@@ -83,7 +83,7 @@ class Partializer
83
83
  end
84
84
 
85
85
  # When `test:` is provided, logs the resulting includes at OBNOXIOUS.
86
- def remap_implementation_header_includes(name:, includes:, partials:, test: nil)
86
+ def remap_implementation_header_includes(name:, includes:, partials:, types_header: nil, test: nil)
87
87
  _includes = includes.clone()
88
88
 
89
89
  # Get list of all partialized module names
@@ -96,6 +96,10 @@ class Partializer
96
96
  modules: ([name] + partialized_modules)
97
97
  )
98
98
 
99
+ # When this module has any typedefs or aggregate definitions, they live in a shared
100
+ # header generated once and included here rather than duplicated inline.
101
+ _includes << UserInclude.new(types_header) if types_header
102
+
99
103
  # Remove any duplicates
100
104
  Includes.sanitize!(_includes)
101
105
 
@@ -153,7 +157,7 @@ class Partializer
153
157
  end
154
158
 
155
159
  # When `test:` is provided, logs the resulting includes at OBNOXIOUS.
156
- def remap_interface_header_includes(name:, includes:, partials:, test: nil)
160
+ def remap_interface_header_includes(name:, includes:, partials:, types_header: nil, test: nil)
157
161
  _includes = includes.clone()
158
162
 
159
163
  # Get list of all partialized module names
@@ -166,6 +170,10 @@ class Partializer
166
170
  modules: ([name] + partialized_modules)
167
171
  )
168
172
 
173
+ # When this module has any typedefs or aggregate definitions, they live in a shared
174
+ # header generated once and included here rather than duplicated inline.
175
+ _includes << UserInclude.new(types_header) if types_header
176
+
169
177
  # Remove any duplicates
170
178
  Includes.sanitize!(_includes)
171
179
 
@@ -341,8 +349,15 @@ class Partializer
341
349
  Verbosity::DEBUG
342
350
  )
343
351
 
352
+ # A mock interface only ever needs a signature, never a body, so a declaration-only
353
+ # function (no body found anywhere in this module's merged content) is just as valid a
354
+ # candidate as one with a definition -- unlike extract_implementation_functions, which
355
+ # needs real code to inject and so stays definitions-only. A function named in both
356
+ # (declared in the header, defined in the paired source) is only counted once.
357
+ candidates = definitions + declarations.reject { |d| definitions.any? { |f| f.name == d.name } }
358
+
344
359
  # Build initial list by visibility; ACCUMULATE yields []
345
- funcs = @helper.filter_and_transform_funcs(definitions, pf.type, :interface)
360
+ funcs = @helper.filter_and_transform_funcs(candidates, pf.type, :interface)
346
361
 
347
362
  # Additions: search definitions first, then declarations
348
363
  pf.additions.each do |name|
@@ -47,9 +47,14 @@ class PartializerUtils
47
47
  code_block: new_code_block
48
48
  )
49
49
  when :interface
50
+ # A signature sourced from a CFunctionDefinition never carries a trailing semicolon
51
+ # (it's followed by a body, not one), but a signature sourced from a
52
+ # CFunctionDeclaration always does (it's a bare prototype). Strip it here so
53
+ # callers can render "#{signature};" uniformly regardless of which kind of
54
+ # function this interface entry came from.
50
55
  Partials.manufacture_function_declaration(
51
56
  name: func.name,
52
- signature: signature
57
+ signature: signature.sub(/;\s*\z/, '')
53
58
  )
54
59
  else
55
60
  PartializerRuntime.raise_on_option(output_type)
@@ -19,6 +19,7 @@ class PreprocessinatorIncludesHandler
19
19
  :include_factory,
20
20
  :tool_executor,
21
21
  :file_wrapper,
22
+ :file_path_utils,
22
23
  :yaml_wrapper,
23
24
  :parsing_parcels,
24
25
  :loginator,
@@ -48,25 +49,51 @@ class PreprocessinatorIncludesHandler
48
49
  # Notes:
49
50
  # - This approach can have gaps with advacnced user-level macros like `#include <MACRO>`.
50
51
  # By including Ceedling's vendor search path, we support Partials macros of this sort.
51
- # - Gaps can be minimized with proper defines in the project file. However, needed, complex macros
52
+ # - Gaps can be minimized with proper defines in the project file. However, needed, complex macros
52
53
  # located in other header files could still gum up the works.
53
54
  # - Many errors can occur but may not necessarily prevent usable results.
54
- command =
55
- @tool_executor.build_command_line(
56
- @configurator.tools_test_bare_includes_preprocessor,
57
- # No additional arguments
58
- [],
59
- # Argument replacement
60
- filepath,
61
- defines,
62
- flags,
63
- search_paths
55
+ #
56
+ # GCC's quoted #include resolution always checks the directory of the file it's currently
57
+ # processing, independent of search paths -- a real sibling header on disk is opened and
58
+ # recursed into regardless of the restricted search paths above. Staging an isolated,
59
+ # sibling-free copy of the file being scanned keeps this pass's output limited to genuine
60
+ # top-level #include statements only. The isolation directory is minted directly inside the
61
+ # test's own preprocess-files build directory (already created in an earlier build stage) --
62
+ # no dedicated subdirectory or filename-based naming, to keep the resulting path as short as
63
+ # possible for platforms with tight path length limits.
64
+ isolation_parent = @file_path_utils.form_test_preprocess_files_path( test )
65
+ isolation_dir = @file_wrapper.mkdir_tmp( nil, isolation_parent )
66
+ isolated_filepath = File.join( isolation_dir, filename )
67
+
68
+ begin
69
+ @file_wrapper.cp( filepath, isolated_filepath )
70
+
71
+ msg = @reportinator.generate_module_progress(
72
+ operation: "Isolating a sibling-free copy for bare-includes extraction at",
73
+ module_name: test,
74
+ filename: isolated_filepath
64
75
  )
65
-
66
- # Assume possible errors so we have best shot at extracting results from preprocessing.
67
- # Full code compilation will catch any breaking code errors
68
- command[:options][:boom] = false
69
- shell_result = @tool_executor.exec( command )
76
+ @loginator.log( msg, Verbosity::OBNOXIOUS )
77
+
78
+ command =
79
+ @tool_executor.build_command_line(
80
+ @configurator.tools_test_bare_includes_preprocessor,
81
+ # No additional arguments
82
+ [],
83
+ # Argument replacement
84
+ isolated_filepath,
85
+ defines,
86
+ flags,
87
+ search_paths
88
+ )
89
+
90
+ # Assume possible errors so we have best shot at extracting results from preprocessing.
91
+ # Full code compilation will catch any breaking code errors
92
+ command[:options][:boom] = false
93
+ shell_result = @tool_executor.exec( command )
94
+ ensure
95
+ @file_wrapper.rm_rf( isolation_dir )
96
+ end
70
97
 
71
98
  make_rules = shell_result[:output]
72
99
 
@@ -183,6 +183,15 @@ class TestBuildExecutor
183
183
 
184
184
  @partializer.sanitize( module_contents )
185
185
 
186
+ # Generated once and shared by the implementation and interface headers below (via
187
+ # their own includes lists), so a module tested and mocked in the same test file gets
188
+ # exactly one C definition of each of its typedefs and aggregate types.
189
+ types_header = @generator.generate_partial_types(
190
+ name: name,
191
+ c_module: module_contents,
192
+ output_path: testable.paths[:partials]
193
+ )
194
+
186
195
  implementation = @partializer.extract_implementation_functions(
187
196
  test: name,
188
197
  partial: config.module,
@@ -211,10 +220,11 @@ class TestBuildExecutor
211
220
  function_definitions: implementation,
212
221
  c_module: module_contents,
213
222
  header_includes: @partializer.remap_implementation_header_includes(
214
- name: config.module,
215
- includes: (config.source.includes + config.header.includes),
216
- partials: testable.partials.configs,
217
- test: name
223
+ name: config.module,
224
+ includes: (config.source.includes + config.header.includes),
225
+ partials: testable.partials.configs,
226
+ types_header: types_header,
227
+ test: name
218
228
  ),
219
229
  source_includes: @partializer.remap_implementation_source_includes(
220
230
  name: config.module,
@@ -236,10 +246,11 @@ class TestBuildExecutor
236
246
  partial: config.module,
237
247
  function_declarations: interface,
238
248
  includes: @partializer.remap_interface_header_includes(
239
- name: config.module,
240
- includes: (config.source.includes + config.header.includes),
241
- partials: testable.partials.configs,
242
- test: name
249
+ name: config.module,
250
+ includes: (config.source.includes + config.header.includes),
251
+ partials: testable.partials.configs,
252
+ types_header: types_header,
253
+ test: name
243
254
  ),
244
255
  c_module: module_contents,
245
256
  input_filepath: config.header.filepath,
data/lib/version.rb CHANGED
@@ -15,7 +15,7 @@
15
15
  module Ceedling
16
16
  module Version
17
17
  # Convenience constants for gem building, etc.
18
- GEM = '1.1.2'
18
+ GEM = '1.1.4'
19
19
  TAG = GEM
20
20
 
21
21
  # If run as a script print Ceedling's version to $stdout
data/mkdocs.yml CHANGED
@@ -137,6 +137,7 @@ nav:
137
137
  - Global Project Settings: configuration/reference/project.md
138
138
  - Mixins: configuration/reference/mixins.md
139
139
  - Test Build Settings: configuration/reference/test-build.md
140
+ - Partials Settings: configuration/reference/partials.md
140
141
  - Release Build Settings: configuration/reference/release-build.md
141
142
  - Search Paths: configuration/reference/paths.md
142
143
  - File Collections: configuration/reference/files.md
@@ -354,8 +354,8 @@ class Gcov < Plugin
354
354
 
355
355
  shell_result = @tool_executor.exec( command )
356
356
 
357
- # First line of gcc --version: "gcc (...platform info...) major.minor.patch"
358
- version_match = shell_result[:output].match(/^gcc\s+.*\s+(\d+)\.(\d+)\.\d+/)
357
+ # First line of gcc --version: "gcc[.exe] (...platform info...) major.minor.patch"
358
+ version_match = shell_result[:output].match(/^gcc(?:#{Regexp.escape(EXTENSION_WIN_EXE)})?\s+.*\s+(\d+)\.(\d+)\.\d+/)
359
359
 
360
360
  if version_match.nil? || version_match[1].nil? || version_match[2].nil?
361
361
  raise CeedlingException.new("Could not collect `gcc` version from its command line")
data/site-local/404.html CHANGED
@@ -1777,6 +1777,8 @@
1777
1777
 
1778
1778
 
1779
1779
 
1780
+
1781
+
1780
1782
 
1781
1783
 
1782
1784
 
@@ -1924,6 +1926,34 @@
1924
1926
 
1925
1927
 
1926
1928
 
1929
+ <li class="md-nav__item">
1930
+ <a href="/configuration/reference/partials.html" class="md-nav__link">
1931
+
1932
+
1933
+
1934
+ <span class="md-ellipsis">
1935
+
1936
+
1937
+ Partials Settings
1938
+
1939
+
1940
+
1941
+ </span>
1942
+
1943
+
1944
+
1945
+ </a>
1946
+ </li>
1947
+
1948
+
1949
+
1950
+
1951
+
1952
+
1953
+
1954
+
1955
+
1956
+
1927
1957
  <li class="md-nav__item">
1928
1958
  <a href="/configuration/reference/release-build.html" class="md-nav__link">
1929
1959
 
@@ -1803,6 +1803,8 @@
1803
1803
 
1804
1804
 
1805
1805
 
1806
+
1807
+
1806
1808
 
1807
1809
 
1808
1810
 
@@ -1953,6 +1955,34 @@
1953
1955
 
1954
1956
 
1955
1957
 
1958
+ <li class="md-nav__item">
1959
+ <a href="reference/partials.html" class="md-nav__link">
1960
+
1961
+
1962
+
1963
+ <span class="md-ellipsis">
1964
+
1965
+
1966
+ Partials Settings
1967
+
1968
+
1969
+
1970
+ </span>
1971
+
1972
+
1973
+
1974
+ </a>
1975
+ </li>
1976
+
1977
+
1978
+
1979
+
1980
+
1981
+
1982
+
1983
+
1984
+
1985
+
1956
1986
  <li class="md-nav__item">
1957
1987
  <a href="reference/release-build.html" class="md-nav__link">
1958
1988
 
@@ -1803,6 +1803,8 @@
1803
1803
 
1804
1804
 
1805
1805
 
1806
+
1807
+
1806
1808
 
1807
1809
 
1808
1810
 
@@ -1953,6 +1955,34 @@
1953
1955
 
1954
1956
 
1955
1957
 
1958
+ <li class="md-nav__item">
1959
+ <a href="reference/partials.html" class="md-nav__link">
1960
+
1961
+
1962
+
1963
+ <span class="md-ellipsis">
1964
+
1965
+
1966
+ Partials Settings
1967
+
1968
+
1969
+
1970
+ </span>
1971
+
1972
+
1973
+
1974
+ </a>
1975
+ </li>
1976
+
1977
+
1978
+
1979
+
1980
+
1981
+
1982
+
1983
+
1984
+
1985
+
1956
1986
  <li class="md-nav__item">
1957
1987
  <a href="reference/release-build.html" class="md-nav__link">
1958
1988
 
@@ -1793,6 +1793,8 @@
1793
1793
 
1794
1794
 
1795
1795
 
1796
+
1797
+
1796
1798
 
1797
1799
 
1798
1800
 
@@ -1943,6 +1945,34 @@
1943
1945
 
1944
1946
 
1945
1947
 
1948
+ <li class="md-nav__item">
1949
+ <a href="reference/partials.html" class="md-nav__link">
1950
+
1951
+
1952
+
1953
+ <span class="md-ellipsis">
1954
+
1955
+
1956
+ Partials Settings
1957
+
1958
+
1959
+
1960
+ </span>
1961
+
1962
+
1963
+
1964
+ </a>
1965
+ </li>
1966
+
1967
+
1968
+
1969
+
1970
+
1971
+
1972
+
1973
+
1974
+
1975
+
1946
1976
  <li class="md-nav__item">
1947
1977
  <a href="reference/release-build.html" class="md-nav__link">
1948
1978
 
@@ -1912,6 +1912,8 @@
1912
1912
 
1913
1913
 
1914
1914
 
1915
+
1916
+
1915
1917
 
1916
1918
 
1917
1919
 
@@ -2062,6 +2064,34 @@
2062
2064
 
2063
2065
 
2064
2066
 
2067
+ <li class="md-nav__item">
2068
+ <a href="reference/partials.html" class="md-nav__link">
2069
+
2070
+
2071
+
2072
+ <span class="md-ellipsis">
2073
+
2074
+
2075
+ Partials Settings
2076
+
2077
+
2078
+
2079
+ </span>
2080
+
2081
+
2082
+
2083
+ </a>
2084
+ </li>
2085
+
2086
+
2087
+
2088
+
2089
+
2090
+
2091
+
2092
+
2093
+
2094
+
2065
2095
  <li class="md-nav__item">
2066
2096
  <a href="reference/release-build.html" class="md-nav__link">
2067
2097
 
@@ -2040,6 +2040,8 @@
2040
2040
 
2041
2041
 
2042
2042
 
2043
+
2044
+
2043
2045
 
2044
2046
 
2045
2047
 
@@ -2190,6 +2192,34 @@
2190
2192
 
2191
2193
 
2192
2194
 
2195
+ <li class="md-nav__item">
2196
+ <a href="reference/partials.html" class="md-nav__link">
2197
+
2198
+
2199
+
2200
+ <span class="md-ellipsis">
2201
+
2202
+
2203
+ Partials Settings
2204
+
2205
+
2206
+
2207
+ </span>
2208
+
2209
+
2210
+
2211
+ </a>
2212
+ </li>
2213
+
2214
+
2215
+
2216
+
2217
+
2218
+
2219
+
2220
+
2221
+
2222
+
2193
2223
  <li class="md-nav__item">
2194
2224
  <a href="reference/release-build.html" class="md-nav__link">
2195
2225
 
@@ -1901,6 +1901,8 @@
1901
1901
 
1902
1902
 
1903
1903
 
1904
+
1905
+
1904
1906
 
1905
1907
 
1906
1908
 
@@ -2051,6 +2053,34 @@
2051
2053
 
2052
2054
 
2053
2055
 
2056
+ <li class="md-nav__item">
2057
+ <a href="reference/partials.html" class="md-nav__link">
2058
+
2059
+
2060
+
2061
+ <span class="md-ellipsis">
2062
+
2063
+
2064
+ Partials Settings
2065
+
2066
+
2067
+
2068
+ </span>
2069
+
2070
+
2071
+
2072
+ </a>
2073
+ </li>
2074
+
2075
+
2076
+
2077
+
2078
+
2079
+
2080
+
2081
+
2082
+
2083
+
2054
2084
  <li class="md-nav__item">
2055
2085
  <a href="reference/release-build.html" class="md-nav__link">
2056
2086
 
@@ -1912,6 +1912,8 @@
1912
1912
 
1913
1913
 
1914
1914
 
1915
+
1916
+
1915
1917
 
1916
1918
 
1917
1919
 
@@ -2062,6 +2064,34 @@
2062
2064
 
2063
2065
 
2064
2066
 
2067
+ <li class="md-nav__item">
2068
+ <a href="reference/partials.html" class="md-nav__link">
2069
+
2070
+
2071
+
2072
+ <span class="md-ellipsis">
2073
+
2074
+
2075
+ Partials Settings
2076
+
2077
+
2078
+
2079
+ </span>
2080
+
2081
+
2082
+
2083
+ </a>
2084
+ </li>
2085
+
2086
+
2087
+
2088
+
2089
+
2090
+
2091
+
2092
+
2093
+
2094
+
2065
2095
  <li class="md-nav__item">
2066
2096
  <a href="reference/release-build.html" class="md-nav__link">
2067
2097
 
@@ -1795,6 +1795,8 @@
1795
1795
 
1796
1796
 
1797
1797
 
1798
+
1799
+
1798
1800
 
1799
1801
 
1800
1802
 
@@ -1945,6 +1947,34 @@
1945
1947
 
1946
1948
 
1947
1949
 
1950
+ <li class="md-nav__item">
1951
+ <a href="partials.html" class="md-nav__link">
1952
+
1953
+
1954
+
1955
+ <span class="md-ellipsis">
1956
+
1957
+
1958
+ Partials Settings
1959
+
1960
+
1961
+
1962
+ </span>
1963
+
1964
+
1965
+
1966
+ </a>
1967
+ </li>
1968
+
1969
+
1970
+
1971
+
1972
+
1973
+
1974
+
1975
+
1976
+
1977
+
1948
1978
  <li class="md-nav__item">
1949
1979
  <a href="release-build.html" class="md-nav__link">
1950
1980
 
@@ -1795,6 +1795,8 @@
1795
1795
 
1796
1796
 
1797
1797
 
1798
+
1799
+
1798
1800
 
1799
1801
 
1800
1802
 
@@ -1945,6 +1947,34 @@
1945
1947
 
1946
1948
 
1947
1949
 
1950
+ <li class="md-nav__item">
1951
+ <a href="partials.html" class="md-nav__link">
1952
+
1953
+
1954
+
1955
+ <span class="md-ellipsis">
1956
+
1957
+
1958
+ Partials Settings
1959
+
1960
+
1961
+
1962
+ </span>
1963
+
1964
+
1965
+
1966
+ </a>
1967
+ </li>
1968
+
1969
+
1970
+
1971
+
1972
+
1973
+
1974
+
1975
+
1976
+
1977
+
1948
1978
  <li class="md-nav__item">
1949
1979
  <a href="release-build.html" class="md-nav__link">
1950
1980