| // Copyright 2014 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'package:file/file.dart'; |
| import 'package:file/local.dart'; |
| import 'package:path/path.dart' as path; |
| |
| // Represents the locations of all of the data for snippets. |
| class SnippetConfiguration { |
| const SnippetConfiguration({ |
| required this.configDirectory, |
| required this.skeletonsDirectory, |
| this.filesystem = const LocalFileSystem(), |
| }); |
| |
| final FileSystem filesystem; |
| |
| /// This is the configuration directory for the snippets system, containing |
| /// the skeletons and templates. |
| final Directory configDirectory; |
| |
| /// The directory containing the HTML skeletons to be filled out with metadata |
| /// and returned to dartdoc for insertion in the output. |
| final Directory skeletonsDirectory; |
| |
| /// Gets the skeleton file to use for the given [SampleType] and DartPad |
| /// preference. |
| File getHtmlSkeletonFile(String type) { |
| final String filename = |
| type == 'dartpad' ? 'dartpad-sample.html' : '$type.html'; |
| return filesystem.file(path.join(skeletonsDirectory.path, filename)); |
| } |
| } |
| |
| /// A class to compute the configuration of the snippets input and output |
| /// locations based in the current location of the snippets main.dart. |
| class FlutterRepoSnippetConfiguration extends SnippetConfiguration { |
| FlutterRepoSnippetConfiguration({required this.flutterRoot, super.filesystem}) |
| : super( |
| configDirectory: _underRoot(filesystem, flutterRoot, |
| const <String>['dev', 'snippets', 'config']), |
| skeletonsDirectory: _underRoot(filesystem, flutterRoot, |
| const <String>['dev', 'snippets', 'config', 'skeletons']), |
| ); |
| |
| final Directory flutterRoot; |
| |
| static Directory _underRoot( |
| FileSystem fs, Directory flutterRoot, List<String> dirs) => |
| fs.directory(path.canonicalize( |
| path.joinAll(<String>[flutterRoot.absolute.path, ...dirs]))); |
| } |