<commit_before>/*

moves is a convenience package that implements composable Moves to make it
easy to implement common logic. The Base move type is a very simple move that
implements the basic stubs necessary for your straightforward moves to have
minimal boilerplate.

You interact with and configure various move types by implementing interfaces.
Those interfaes are defined in the moveinterfaces subpackage, to make this
package's design more clear.

There are many move types defined. Some are designed to be used directly with
minimal modification; others are powerful move types that are designed to be
sub-classed.

DefaultConfig

In a number of cases you'll just use moves in this package will minimal
overriding. In those cases it's a pain to write up MoveTypeConfigs because
it's mostly boilerplate.

DefaultConfig is a package-level constructor that takes a manager, and an
example move struct that embeds moves from this pacakge, and returns a default
config object with reaonsable defaults so you don't have to. It uses
move.MoveTypeName and move.MoveTypeHelpText to generate strings, which moves
in this package normally do reasonable things with. Example use:

	type myMove struct {
		moves.DealCountComponents
	}

	func (m *myMove) GameStack(gState boardgame.MutableSubState) boardgame.MutableStack {
		return gState.(*gameState).DrawStack
	}

	func (m *myMove) PlayerStack(pState boardgame.MutablePlayerState) boardgame.MutableStack {
		return pState.(*playerState).Hand
	}

	func NewManager(storage boardgame.StorageManager) *boardgame.GameManager {

		//...
		manager.AddMoves(
			//Name, HelpText, MoveConstructor, and IsFixUp will be set reasonably.
			moves.DefaultConfig(manager, new(myMove)),
		)
		//...

	}
<commit_msg>One typo fix in package doc for DefaultConfig. Part of #528.<commit_after>/*

moves is a convenience package that implements composable Moves to make it
easy to implement common logic. The Base move type is a very simple move that
implements the basic stubs necessary for your straightforward moves to have
minimal boilerplate.

You interact with and configure various move types by implementing interfaces.
Those interfaes are defined in the moveinterfaces subpackage, to make this
package's design more clear.

There are many move types defined. Some are designed to be used directly with
minimal modification; others are powerful move types that are designed to be
sub-classed.

DefaultConfig

In a number of cases you'll just use moves in this package will minimal
overriding. In those cases it's a pain to write up MoveTypeConfigs because
it's mostly boilerplate.

DefaultConfig is a package-level constructor that takes a manager, and an
example move struct that embeds moves from this pacakge, and returns a default
config object with reaonsable defaults so you don't have to. It uses
move.MoveTypeName and move.MoveTypeHelpText to generate strings, which moves
in this package normally do reasonable things with. Example use:

	type myMove struct {
		moves.DealCountComponents
	}

	func (m *myMove) GameStack(gState boardgame.MutableSubState) boardgame.MutableStack {
		return gState.(*gameState).DrawStack
	}

	func (m *myMove) PlayerStack(pState boardgame.MutablePlayerState) boardgame.MutableStack {
		return pState.(*playerState).Hand
	}

	func NewManager(storage boardgame.StorageManager) *boardgame.GameManager {

		//...
		manager.AddMoves(
			//Name, HelpText, MoveConstructor, and IsFixUp will be set reasonably.
			moves.MustDefaultConfig(manager, new(myMove)),
		)
		//...

	}

{'fraction_non_alphanumeric': 0.05393956509460604, 'fraction_numerical': 0.0008472182999152782, 'mean_word_length': 4.6672, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '595875', 'n_tokens_mistral': 990, 'n_tokens_neox': 917, 'n_words': 438}