Page MenuHomePhabricator

Arcanist Technical Documentation
Updated TodayPublic

Technical documentation for developing Arcanist.

Lint

ArcanistAbstractMethodBodyXHPASTLinterRuleClassArcanistAbstractMethodBodyXHPASTLinterRuleTestCaseClassArcanistAbstractPrivateMethodXHPASTLinterRuleClassArcanistAbstractPrivateMethodXHPASTLinterRuleTestCaseClassArcanistAliasFunctionXHPASTLinterRuleClassArcanistAliasFunctionXHPASTLinterRuleTestCaseClassArcanistArrayCombineXHPASTLinterRuleClassArcanistArrayCombineXHPASTLinterRuleTestCaseClassArcanistArrayIndexSpacingXHPASTLinterRuleClassArcanistArrayIndexSpacingXHPASTLinterRuleTestCaseClassArcanistArraySeparatorXHPASTLinterRuleClassArcanistArraySeparatorXHPASTLinterRuleTestCaseClassArcanistArrayValueXHPASTLinterRuleClassArcanistArrayValueXHPASTLinterRuleTestCaseClassArcanistBaseXHPASTLinterClassArcanistBinaryExpressionSpacingXHPASTLinterRuleClassArcanistBinaryExpressionSpacingXHPASTLinterRuleTestCaseClassArcanistBinaryNumericScalarCasingXHPASTLinterRuleClassArcanistBinaryNumericScalarCasingXHPASTLinterRuleTestCaseClassArcanistBlacklistedFunctionXHPASTLinterRuleClassArcanistBlacklistedFunctionXHPASTLinterRuleTestCaseClassArcanistBraceFormattingXHPASTLinterRuleClassArcanistBraceFormattingXHPASTLinterRuleTestCaseClassArcanistCallParenthesesXHPASTLinterRuleClassArcanistCallParenthesesXHPASTLinterRuleTestCaseClassArcanistCallTimePassByReferenceXHPASTLinterRuleClassArcanistCallTimePassByReferenceXHPASTLinterRuleTestCaseClassArcanistCastSpacingXHPASTLinterRuleClassArcanistCastSpacingXHPASTLinterRuleTestCaseClassArcanistCheckstyleXMLLintRendererClassArcanistChmodLinterClassEnsures that files are not executable unless they are either binary or contain a shebang.ArcanistChmodLinterTestCaseClassArcanistClassExtendsObjectXHPASTLinterRuleClassArcanistClassExtendsObjectXHPASTLinterRuleTestCaseClassArcanistClassFilenameMismatchXHPASTLinterRuleClassLint that if the file declares exactly one interface or class, the name of the file matches the name of the class, unless the class name is funky like an XHP element.ArcanistClassMustBeDeclaredAbstractXHPASTLinterRuleClassArcanistClassMustBeDeclaredAbstractXHPASTLinterRuleTestCaseClassArcanistClassNameLiteralXHPASTLinterRuleClassArcanistClassNameLiteralXHPASTLinterRuleTestCaseClassArcanistClosureLinterClassUses `gjslint` to detect errors and potential problems in JavaScript code.ArcanistClosureLinterTestCaseClassArcanistCoffeeLintLinterClassArcanistCoffeeLintLinterTestCaseClassArcanistCommentSpacingXHPASTLinterRuleClassArcanistCommentStyleXHPASTLinterRuleClassArcanistCommentStyleXHPASTLinterRuleTestCaseClassArcanistCompilerLintRendererClassArcanistComposerLinterClassArcanistComprehensiveLintEngineClassBasic lint engine which just applies several linters based on the file types.ArcanistConcatenationOperatorXHPASTLinterRuleClassArcanistConcatenationOperatorXHPASTLinterRuleTestCaseClassArcanistConfigurationDrivenLintEngineClassArcanistConsoleLintRendererClassArcanistConsoleLintRendererTestCaseClassArcanistConstructorParenthesesXHPASTLinterRuleClassArcanistConstructorParenthesesXHPASTLinterRuleTestCaseClassArcanistContinueInsideSwitchXHPASTLinterRuleClassArcanistContinueInsideSwitchXHPASTLinterRuleTestCaseClassArcanistControlStatementSpacingXHPASTLinterRuleClassArcanistControlStatementSpacingXHPASTLinterRuleTestCaseClassArcanistCppcheckLinterClassUses Cppcheck to do basic checks in a C++ file.ArcanistCppcheckLinterTestCaseClassArcanistCpplintLinterClassUses Google's `cpplint.py` to check code.ArcanistCpplintLinterTestCaseClassArcanistCSharpLinterClassC# linter for Arcanist.ArcanistCSSLintLinterClassUses "CSS Lint" to detect checkstyle errors in CSS code.ArcanistCSSLintLinterTestCaseClassArcanistCurlyBraceArrayIndexXHPASTLinterRuleClassArcanistCurlyBraceArrayIndexXHPASTLinterRuleTestCaseClassArcanistDeclarationParenthesesXHPASTLinterRuleClassArcanistDeclarationParenthesesXHPASTLinterRuleTestCaseClassArcanistDefaultParametersXHPASTLinterRuleClassArcanistDefaultParametersXHPASTLinterRuleTestCaseClassArcanistDeprecationXHPASTLinterRuleClassArcanistDeprecationXHPASTLinterRuleTestCaseClassArcanistDoubleQuoteXHPASTLinterRuleClassArcanistDoubleQuoteXHPASTLinterRuleTestCaseClassArcanistDuplicateKeysInArrayXHPASTLinterRuleClassFinds duplicate keys in array initializers, as in `array(1 => 'anything', 1 => 'foo')`. Since the first entry is ignored, this is almost certainly an error.ArcanistDuplicateKeysInArrayXHPASTLinterRuleTestCaseClassArcanistDuplicateSwitchCaseXHPASTLinterRuleClassArcanistDuplicateSwitchCaseXHPASTLinterRuleTestCaseClassArcanistDynamicDefineXHPASTLinterRuleClassArcanistDynamicDefineXHPASTLinterRuleTestCaseClassArcanistElseIfUsageXHPASTLinterRuleClassArcanistElseIfUsageXHPASTLinterRuleTestCaseClassArcanistEmptyFileXHPASTLinterRuleClassArcanistEmptyStatementXHPASTLinterRuleClassArcanistEmptyStatementXHPASTLinterRuleTestCaseClassArcanistExitExpressionXHPASTLinterRuleClassExit is parsed as an expression, but using it as such is almost always wrong. That is, this is valid:ArcanistExitExpressionXHPASTLinterRuleTestCaseClassArcanistExternalLinterClassBase class for linters which operate by invoking an external program and parsing results.ArcanistExternalLinterTestCaseClassArcanistExtractUseXHPASTLinterRuleClassArcanistExtractUseXHPASTLinterRuleTestCaseClassArcanistFilenameLinterClassStifles creativity in choosing imaginative file names.ArcanistFilenameLinterTestCaseClassArcanistFlake8LinterClassUses "flake8" to detect various errors in Python code. Requires version 1.7.0 or newer of flake8.ArcanistFlake8LinterTestCaseClassArcanistFormattedStringXHPASTLinterRuleClassArcanistFormattedStringXHPASTLinterRuleTestCaseClassArcanistFunctionCallShouldBeTypeCastXHPASTLinterRuleClassArcanistFunctionCallShouldBeTypeCastXHPASTLinterRuleTestCaseClassArcanistFutureLinterClassArcanistGeneratedLinterClassStops other linters from running on generated code.ArcanistGeneratedLinterTestCaseClassArcanistGlobalVariableXHPASTLinterRuleClassArcanistGlobalVariableXHPASTLinterRuleTestCaseClassArcanistGoLintLinterTestCaseClassArcanistHexadecimalNumericScalarCasingXHPASTLinterRuleClassArcanistHexadecimalNumericScalarCasingXHPASTLinterRuleTestCaseClassArcanistHLintLinterClassCalls `hlint` and parses its results.ArcanistHLintLinterTestCaseClassArcanistImplicitConstructorXHPASTLinterRuleClassArcanistImplicitConstructorXHPASTLinterRuleTestCaseClassArcanistImplicitFallthroughXHPASTLinterRuleClassArcanistImplicitFallthroughXHPASTLinterRuleTestCaseClassArcanistImplicitVisibilityXHPASTLinterRuleClassArcanistImplicitVisibilityXHPASTLinterRuleTestCaseClassArcanistImplodeArgumentOrderXHPASTLinterRuleClassArcanistImplodeArgumentOrderXHPASTLinterRuleTestCaseClassArcanistInlineHTMLXHPASTLinterRuleClassArcanistInlineHTMLXHPASTLinterRuleTestCaseClassArcanistInnerFunctionXHPASTLinterRuleClassArcanistInnerFunctionXHPASTLinterRuleTestCaseClassArcanistInstanceOfOperatorXHPASTLinterRuleClassArcanistInstanceofOperatorXHPASTLinterRuleTestCaseClassArcanistInterfaceAbstractMethodXHPASTLinterRuleClassArcanistInterfaceAbstractMethodXHPASTLinterRuleTestCaseClassArcanistInterfaceMethodBodyXHPASTLinterRuleClassArcanistInterfaceMethodBodyXHPASTLinterRuleTestCaseClassArcanistInvalidDefaultParameterXHPASTLinterRuleClassArcanistInvalidDefaultParameterXHPASTLinterRuleTestCaseClassArcanistInvalidModifiersXHPASTLinterRuleTestCaseClassArcanistInvalidOctalNumericScalarXHPASTLinterRuleClassArcanistInvalidOctalNumericScalarXHPASTLinterRuleTestCaseClassArcanistIsAShouldBeInstanceOfXHPASTLinterRuleClassArcanistIsAShouldBeInstanceOfXHPASTLinterRuleTestCaseClassArcanistJscsLinterClassArcanistJscsLinterTestCaseClassArcanistJSHintLinterClassUses JSHint to detect errors and potential problems in JavaScript code.ArcanistJSHintLinterTestCaseClassArcanistJSONLinterClassA linter for JSON files.ArcanistJSONLinterTestCaseClassArcanistJSONLintLinterClassA linter for JSON files.ArcanistJSONLintRendererClassArcanistKeywordCasingXHPASTLinterRuleClassArcanistKeywordCasingXHPASTLinterRuleTestCaseClassArcanistLambdaFuncFunctionXHPASTLinterRuleClassArcanistLambdaFuncFunctionXHPASTLinterRuleTestCaseClassArcanistLanguageConstructParenthesesXHPASTLinterRuleClassArcanistLanguageConstructParenthesesXHPASTLinterRuleTestCaseClassArcanistLesscLinterClassA linter for LESSCSS files.ArcanistLesscLinterTestCaseClassArcanistLintEngineClassManages lint execution. When you run 'arc lint' or 'arc diff', Arcanist attempts to run lint rules using a lint engine.ArcanistLinterClassImplements lint rules, like syntax checks for a specific language.ArcanistLinterStandardClassA "linter standard" is a collection of linter rules with associated severities and configuration.ArcanistLinterStandardTestCaseClassArcanistLinterTestCaseClassFacilitates implementation of test cases for @{class:ArcanistLinter}s.ArcanistLintMessageClassMessage emitted by a linter, like an error or warning.ArcanistLintMessageTestCaseClassArcanistLintPatcherClassApplies lint patches to the working copy.ArcanistLintRendererClassArcanistLintResultClassA group of @{class:ArcanistLintMessage}s that apply to a file.ArcanistLintSeverityClassDescribes the severity of an @{class:ArcanistLintMessage}.ArcanistListAssignmentXHPASTLinterRuleClassArcanistListAssignmentXHPASTLinterRuleTestCaseClassArcanistLogicalOperatorsXHPASTLinterRuleClassArcanistLogicalOperatorsXHPASTLinterRuleTestCaseClassArcanistLowercaseFunctionsXHPASTLinterRuleClassArcanistLowercaseFunctionsXHPASTLinterRuleTestCaseClassArcanistMergeConflictLinterClassChecks files for unresolved merge conflicts.ArcanistMergeConflictLinterTestCaseClassArcanistMissingLinterExceptionClassArcanistModifierOrderingXHPASTLinterRuleClassArcanistModifierOrderingXHPASTLinterRuleTestCaseClassArcanistNamespaceFirstStatementXHPASTLinterRuleClassArcanistNamespaceFirstStatementXHPASTLinterRuleTestCaseClassArcanistNamingConventionsXHPASTLinterRuleClassArcanistNamingConventionsXHPASTLinterRuleTestCaseClassArcanistNestedNamespacesXHPASTLinterRuleClassArcanistNestedNamespacesXHPASTLinterRuleTestCaseClassArcanistNewlineAfterOpenTagXHPASTLinterRuleClassArcanistNewlineAfterOpenTagXHPASTLinterRuleTestCaseClassArcanistNoLintLinterClassStops other linters from running on code marked with a nolint annotation.ArcanistNoLintLinterTestCaseClassArcanistNoneLintRendererClassArcanistNoParentScopeXHPASTLinterRuleClassArcanistNoParentScopeXHPASTLinterRuleTestCaseClassArcanistObjectOperatorSpacingXHPASTLinterRuleClassArcanistObjectOperatorSpacingXHPASTLinterRuleTestCaseClassArcanistPaamayimNekudotayimSpacingXHPASTLinterRuleClassArcanistPaamayimNekudotayimSpacingXHPASTLinterRuleTestCaseClassArcanistParenthesesSpacingXHPASTLinterRuleClassArcanistParenthesesSpacingXHPASTLinterRuleTestCaseClassArcanistParentMemberReferenceXHPASTLinterRuleClassArcanistParentMemberReferenceXHPASTLinterRuleTestCaseClassArcanistParseStrUseXHPASTLinterRuleClassArcanistParseStrUseXHPASTLinterRuleTestCaseClassArcanistPEP8LinterClassUses "pep8.py" to enforce PEP8 rules for Python.ArcanistPEP8LinterTestCaseClassArcanistPHPCloseTagXHPASTLinterRuleClassArcanistPHPCloseTagXHPASTLinterRuleTestCaseClassArcanistPHPCompatibilityXHPASTLinterRuleClassArcanistPHPCompatibilityXHPASTLinterRuleTestCaseClassArcanistPhpcsLinterClassUses "PHP_CodeSniffer" to detect checkstyle errors in PHP code.ArcanistPhpcsLinterTestCaseClassArcanistPHPEchoTagXHPASTLinterRuleClassArcanistPHPEchoTagXHPASTLinterRuleTestCaseClassArcanistPhpLinterClassUses "php -l" to detect syntax errors in PHP code.ArcanistPhpLinterTestCaseClassArcanistPHPOpenTagXHPASTLinterRuleClassArcanistPHPOpenTagXHPASTLinterRuleTestCaseClassArcanistPHPShortTagXHPASTLinterRuleClassArcanistPHPShortTagXHPASTLinterRuleTestCaseClassArcanistPhutilXHPASTLinterStandardClassArcanistPlusOperatorOnStringsXHPASTLinterRuleClassArcanistPlusOperatorOnStringsXHPASTLinterRuleTestCaseClassArcanistPublicPropertyXHPASTLinterRuleClassArcanistPublicPropertyXHPASTLinterRuleTestCaseClassArcanistPuppetLintLinterClassA linter for Puppet files.ArcanistPuppetLintLinterTestCaseClassArcanistPyFlakesLinterClassUses "PyFlakes" to detect various errors in Python code.ArcanistPyFlakesLinterTestCaseClassArcanistPyLintLinterClassUses "PyLint" to detect various errors in Python code.ArcanistPyLintLinterTestCaseClassArcanistRaggedClassTreeEdgeXHPASTLinterRuleClassArcanistRaggedClassTreeEdgeXHPASTLinterRuleTestCaseClassArcanistReusedAsIteratorXHPASTLinterRuleClassArcanistReusedAsIteratorXHPASTLinterRuleTestCaseClassArcanistReusedIteratorReferenceXHPASTLinterRuleClassFind cases where a `foreach` loop is being iterated using a variable reference and the same variable is used outside of the loop without calling `unset()` or reassigning the variable to another variable reference.ArcanistReusedIteratorReferenceXHPASTLinterRuleTestCaseClassArcanistReusedIteratorXHPASTLinterRuleClassFind cases where loops get nested inside each other but use the same iterator variable. For example:ArcanistReusedIteratorXHPASTLinterRuleTestCaseClassArcanistRuboCopLinterClassArcanistRuboCopLinterTestCaseClassArcanistRubyLinterClassUses `ruby` to detect various errors in Ruby code.ArcanistRubyLinterTestCaseClassArcanistScriptAndRegexLinterClassSimple glue linter which runs some script on each path, and then uses a regex to parse lint messages from the script's output. (This linter uses a script and a regex to interpret the results of some real linter, it does not itself lint both scripts and regexes).ArcanistSelfClassReferenceXHPASTLinterRuleClassArcanistSelfClassReferenceXHPASTLinterRuleTestCaseClassArcanistSelfMemberReferenceXHPASTLinterRuleClassArcanistSelfMemberReferenceXHPASTLinterRuleTestCaseClassArcanistSemicolonSpacingXHPASTLinterRuleClassArcanistSemicolonSpacingXHPASTLinterRuleTestCaseClassArcanistSingleLintEngineClassRun a single linter on every path unconditionally. This is a glue engine for linters like @{class:ArcanistScriptAndRegexLinter}, if you are averse to writing a phutil library. Your linter will receive every path, including paths which have been moved or deleted.ArcanistSlownessXHPASTLinterRuleClassArcanistSlownessXHPASTLinterRuleTestCaseClassArcanistSpellingLinterClassEnforces basic spelling. Spelling inside code is actually pretty hard to get right without false positives. I take a conservative approach and just use a blacklisted set of words that are commonly spelled incorrectly.ArcanistSpellingLinterTestCaseClassArcanistStaticThisXHPASTLinterRuleClassArcanistStaticThisXHPASTLinterRuleTestCaseClassArcanistSummaryLintRendererClassArcanistSyntaxErrorXHPASTLinterRuleClassArcanistTautologicalExpressionXHPASTLinterRuleClassArcanistTautologicalExpressionXHPASTLinterRuleTestCaseClassArcanistTestXHPASTLintSwitchHookClassArcanistTextLinterClassEnforces basic text file rules.ArcanistTextLinterTestCaseClassArcanistThisReassignmentXHPASTLinterRuleClassArcanistThisReassignmentXHPASTLinterRuleTestCaseClassArcanistTodoCommentXHPASTLinterRuleClassArcanistTodoCommentXHPASTLinterRuleTestCaseClassArcanistToStringExceptionXHPASTLinterRuleClassArcanistToStringExceptionXHPASTLinterRuleTestCaseClassArcanistUnableToParseXHPASTLinterRuleClassArcanistUnaryPostfixExpressionSpacingXHPASTLinterRuleClassArcanistUnaryPostfixExpressionSpacingXHPASTLinterRuleTestCaseClassArcanistUnaryPrefixExpressionSpacingXHPASTLinterRuleClassArcanistUnaryPrefixExpressionSpacingXHPASTLinterRuleTestCaseClassArcanistUndeclaredVariableXHPASTLinterRuleClassArcanistUndeclaredVariableXHPASTLinterRuleTestCaseClassArcanistUnexpectedReturnValueXHPASTLinterRuleClassArcanistUnexpectedReturnValueXHPASTLinterRuleTestCaseClassArcanistUnitTestableLintEngineClassLint engine for use in constructing test cases. See @{class:ArcanistLinterTestCase}.ArcanistUnnecessaryFinalModifierXHPASTLinterRuleClassArcanistUnnecessaryFinalModifierXHPASTLinterRuleTestCaseClassArcanistUnnecessarySemicolonXHPASTLinterRuleClassArcanistUnnecessarySymbolAliasXHPASTLinterRuleClassArcanistUnnecessarySymbolAliasXHPASTLinterRuleTestCaseClassArcanistUnsafeDynamicStringXHPASTLinterRuleClassArcanistUnsafeDynamicStringXHPASTLinterRuleTestCaseClassArcanistUselessOverridingMethodXHPASTLinterRuleClassArcanistUselessOverridingMethodXHPASTLinterRuleTestCaseClassArcanistUseStatementNamespacePrefixXHPASTLinterRuleClassArcanistUseStatementNamespacePrefixXHPASTLinterRuleTestCaseClassArcanistVariableReferenceSpacingXHPASTLinterRuleClassArcanistVariableReferenceSpacingXHPASTLinterRuleTestCaseClassArcanistVariableVariableXHPASTLinterRuleClassArcanistVariableVariableXHPASTLinterRuleTestCaseClassArcanistXHPASTLinterClassUses XHPAST to apply lint rules to PHP.ArcanistXHPASTLinterRuleClassArcanistXHPASTLinterRuleTestCaseClassFacilitates implementation of test cases for @{class:ArcanistXHPASTLinterRule}s.ArcanistXHPASTLinterTestCaseClassArcanistXHPASTLintNamingHookClassYou can extend this class and set `xhpast.naminghook` in your `.arclint` to have an opportunity to override lint results for symbol names.ArcanistXHPASTLintNamingHookTestCaseClassTest cases for @{class:ArcanistXHPASTLintNamingHook}.ArcanistXHPASTLintSwitchHookClassYou can extend this class and set `xhpast.switchhook` in your `.arclint` to have an opportunity to override results for linting `switch` statements.ArcanistXMLLinterClassA linter which uses [[http://php.net/simplexml | SimpleXML]] to detect errors and potential problems in XML files.ArcanistXMLLinterTestCaseClassTest cases were mostly taken from https://git.gnome.org/browse/libxml2/tree/test.

Unit Testing

ArcanistConfigurationDrivenUnitTestEngineClassArcanistGoTestResultParserClassGo Test Result Parsing utilityArcanistGoTestResultParserTestCaseClassTest for @{class:ArcanistGoTestResultParser}.ArcanistPhpunitTestResultParserClassPHPUnit Result Parsing utilityArcanistTestResultParserClassAbstract base class for test result parsers.ArcanistUnitConsoleRendererClassArcanistUnitRendererClassArcanistUnitTestEngineClassManages unit test execution.ArcanistUnitTestResultClassRepresents the outcome of running a unit test.ArcanistUnitTestResultTestCaseClassArcanistXUnitTestResultParserClassParser for JUnit, NUnit, etc results formatCSharpToolsTestEngineClassUses cscover (http://github.com/hach-que/cstools) to report code coverage.NoseTestEngineClassVery basic 'nose' unit test engine wrapper.PhpunitTestEngineClassPHPUnit wrapper.PhpunitTestEngineTestCaseClassTests for @{class:PhpunitTestEngine}.PhutilTestCaseClassBase test case for the very simple libphutil test framework.PhutilTestCaseTestCaseClassTest for @{class:PhutilUnitTestEngineTestCase}.PhutilTestSkippedExceptionClassThrown to skip test execution.PhutilTestTerminatedExceptionClassThrown to prematurely end test execution.PhutilUnitTestEngineClassVery basic unit test engine which runs libphutil tests.PhutilUnitTestEngineTestCaseClassVery meta test for @{class:PhutilUnitTestEngine}.PytestTestEngineClassVery basic 'py.test' unit test engine wrapper.XUnitTestEngineClassUses xUnit (http://xunit.codeplex.com/) to test C# code.XUnitTestResultParserTestCaseClassTest for @{class:ArcanistXUnitTestResultParser}.

Free Radicals

__phutil_autoload()FunctionAASTNodeClassAASTNodeListClassAASTTreeClassAn abstract abstract syntax tree.AbstractDirectedGraphClassModels a directed graph in a generic way that works well with graphs stored in a database, and allows you to perform operations like cycle detection.AbstractDirectedGraphTestCaseClassArcanistAliasClassArcanistAliasEffectClassArcanistAliasEngineClassArcanistAliasesConfigOptionClassArcanistAliasWorkflowClassManages aliases for commands with options.ArcanistArcConfigurationEngineExtensionClassArcanistArcToolsetClassArcanistArcWorkflowClassArcanistBaseCommitParserClassArcanistBaseCommitParserTestCaseClassArcanistBlindlyTrustHTTPEngineExtensionClassArcanistBoolConfigOptionClassArcanistBrowseCommitHardpointQueryClassArcanistBrowseCommitURIHardpointQueryClassArcanistBrowseObjectNameURIHardpointQueryClassArcanistBrowsePathURIHardpointQueryClassArcanistBrowseRefClassArcanistBrowseRefInspectorClassArcanistBrowseRevisionURIHardpointQueryClassArcanistBrowseURIHardpointQueryClassArcanistBrowseURIRefClassArcanistBrowseWorkflowClassBrowse files or objects in the Phabricator web interface.ArcanistBuildableBuildsHardpointQueryClassArcanistBuildableRefClassArcanistBuildableSymbolRefClassArcanistBuildBuildplanHardpointQueryClassArcanistBuildPlanRefClassArcanistBuildPlanSymbolRefClassArcanistBuildRefClassArcanistBuildSymbolRefClassArcanistBundleClassConverts changesets between different formats.ArcanistBundleTestCaseClassArcanistCommandClassArcanistCommentRemoverClassArcanistCommentRemoverTestCaseClassArcanistCommitGraphClassArcanistCommitGraphPartitionClassArcanistCommitGraphPartitionQueryClassArcanistCommitGraphQueryClassArcanistCommitGraphSetClassArcanistCommitGraphSetQueryClassArcanistCommitGraphSetTreeViewClassArcanistCommitGraphSetViewClassArcanistCommitGraphTestCaseClassArcanistCommitNodeClassArcanistCommitRefClassArcanistCommitSymbolRefClassArcanistCommitSymbolRefInspectorClassArcanistCommitUpstreamHardpointQueryClassArcanistConduitAuthenticationExceptionClassArcanistConduitCallFutureClassArcanistConduitEngineClassArcanistConduitExceptionClassArcanistConfigOptionClassArcanistConfigurationClassRuntime workflow configuration. In Arcanist, commands you type like "arc diff" or "arc lint" are called "workflows". This class allows you to add new workflows (and extend existing workflows) by subclassing it and then pointing to your subclass in your project configuration.ArcanistConfigurationEngineClassArcanistConfigurationEngineExtensionClassArcanistConfigurationManagerClassThis class holds everything related to configuration and configuration files.ArcanistConfigurationSourceClassArcanistConfigurationSourceListClassArcanistConfigurationSourceValueClassArcanistDefaultsConfigurationSourceClassArcanistDictionaryConfigurationSourceClassArcanistDiffByteSizeExceptionClassArcanistDiffChangeClassRepresents a change to an individual path.ArcanistDiffChangeTypeClassDefines constants for file types and operations in changesets.ArcanistDifferentialCommitMessageClassRepresents a parsed commit message.ArcanistDifferentialCommitMessageParserExceptionClassThrown when a commit message isn't parseable.ArcanistDifferentialDependencyGraphClassArcanistDifferentialRevisionHashClassArcanistDifferentialRevisionStatusClassArcanistDiffHunkClassRepresents a contiguous set of added and removed lines in a diff.ArcanistDiffParserClassParses diffs from a working copy.ArcanistDiffParserTestCaseClassTest cases for @{class:ArcanistDiffParser}.ArcanistDiffUtilsClassDumping ground for diff- and diff-algorithm-related miscellany.ArcanistDiffUtilsTestCaseClassTest cases for @{class:ArcanistDiffUtils}.ArcanistDiffVectorNodeClassArcanistDiffVectorTreeClassArcanistEventTypeClassArcanistFileConfigurationSourceClassArcanistFileDataRefClassReference to a file or block of file data which can be uploaded using @{class:ArcanistFileUploader}.ArcanistFileRefClassArcanistFileSymbolRefClassArcanistFilesystemAPIClassArcanistFilesystemWorkingCopyClassArcanistFileUploaderClassUpload a list of @{class:ArcanistFileDataRef} objects over Conduit.ArcanistGitAPIClassInterfaces with Git working copies.ArcanistGitCommitGraphQueryClassArcanistGitCommitMessageHardpointQueryClassArcanistGitCommitSymbolCommitHardpointQueryClassArcanistGitLocalStateClassArcanistGitRawCommitClassArcanistGitRawCommitTestCaseClassArcanistGitRepositoryMarkerQueryClassArcanistGitRepositoryRemoteQueryClassArcanistGitUpstreamPathClassArcanistGitWorkEngineClassArcanistGitWorkingCopyClassArcanistGitWorkingCopyRevisionHardpointQueryClassArcanistGridCellClassArcanistGridColumnClassArcanistGridRowClassArcanistGridViewClassArcanistHardpointClassArcanistHardpointEngineClassArcanistHardpointFutureListClassArcanistHardpointListClassArcanistHardpointObjectClassArcanistHardpointQueryClassArcanistHardpointRequestClassArcanistHardpointRequestListClassArcanistHardpointTaskClassArcanistHardpointTaskResultClassArcanistHelpWorkflowClassArcanistHgClientChannelClassChannel to a Mercurial "cmdserver" client. For a detailed description of the "cmdserver" protocol, see @{class:ArcanistHgServerChannel}. This channel implements the other half of the protocol: it decodes messages from the client and encodes messages from the server.ArcanistHgProxyClientClassClient for an @{class:ArcanistHgProxyServer}. This client talks to a PHP process which serves as a proxy in front of a Mercurial server process. The PHP proxy allows multiple clients to use the same Mercurial server.ArcanistHgProxyServerClassServer which @{class:ArcanistHgProxyClient} clients connect to. This server binds to a Mercurial working copy and creates a Mercurial process and a unix domain socket in that working copy. It listens for connections on the socket, reads commands from them, and forwards their requests to the Mercurial process. It then returns responses to the original clients.ArcanistHgServerChannelClassChannel to a Mercurial "cmdserver" server. Messages sent to the server look like this:ArcanistLandCommitClassArcanistLandCommitSetClassArcanistLandPushFailureExceptionClassArcanistLandSymbolClassArcanistLandTargetClassArcanistListConfigOptionClassArcanistLocalConfigurationSourceClassArcanistLogEngineClassArcanistLogMessageClassArcanistMarkerRefClassArcanistMercurialCommitGraphQueryClassArcanistMercurialCommitMessageHardpointQueryClassArcanistMercurialParserClassParses output from various "hg" commands into structured data. This class provides low-level APIs for reading "hg" output.ArcanistMercurialParserTestCaseClassArcanistMercurialRepositoryRemoteQueryClassArcanistMercurialWorkEngineClassArcanistMercurialWorkingCopyClassArcanistMercurialWorkingCopyRevisionHardpointQueryClassArcanistMessageRevisionHardpointQueryClassArcanistMissingArgumentTerminatorExceptionClassArcanistMultiSourceConfigOptionClassArcanistNoEffectExceptionClassThrown when lint or unit tests have no effect, i.e. no paths are affected by any linter or no unit tests provide coverage.ArcanistNoEngineExceptionClassThrown when no engine is configured for linting or running unit tests.ArcanistNoURIConduitExceptionClassArcanistObjectListHardpointClassArcanistPasteRefClassArcanistPasteSymbolRefClassArcanistPhutilWorkflowClassArcanistProjectConfigurationSourceClassArcanistPromptResponseClassArcanistPromptsConfigOptionClassArcanistPromptsWorkflowClassArcanistRefClassArcanistRefInspectorClassArcanistRefViewClassArcanistRemoteRefClassArcanistRemoteRefInspectorClassArcanistRemoteRepositoryRefsHardpointQueryClassArcanistRepositoryAPIClassInterfaces with the VCS in the working copy.ArcanistRepositoryAPIMiscTestCaseClassArcanistRepositoryAPIStateTestCaseClassArcanistRepositoryMarkerQueryClassArcanistRepositoryQueryClassArcanistRepositoryRefClassArcanistRepositoryRemoteQueryClassArcanistRepositoryURINormalizerClassNormalize repository URIs. For example, these URIs are generally equivalent and all point at the same repository:ArcanistRepositoryURINormalizerTestCaseClassArcanistRevisionAuthorHardpointQueryClassArcanistRevisionBuildableHardpointQueryClassArcanistRevisionCommitMessageHardpointQueryClassArcanistRevisionParentRevisionsHardpointQueryClassArcanistRevisionRefClassArcanistRevisionRefSourceClassArcanistRevisionSymbolRefClassArcanistRuntimeClassArcanistRuntimeConfigurationSourceClassArcanistRuntimeHardpointQueryClassArcanistScalarHardpointClassArcanistSettingClassArcanistSettingsClassArcanistShellCompleteWorkflowClassArcanistSimpleCommitGraphQueryClassArcanistSimpleSymbolHardpointQueryClassArcanistSimpleSymbolRefClassArcanistSimpleSymbolRefInspectorClassArcanistSingleSourceConfigOptionClassArcanistStringConfigOptionClassArcanistStringListConfigOptionClassArcanistSubversionAPIClassInterfaces with Subversion working copies.ArcanistSubversionWorkingCopyClassArcanistSymbolEngineClassArcanistSymbolRefClassArcanistSystemConfigurationSourceClassArcanistTaskRefClassArcanistTaskSymbolRefClassArcanistTerminalStringInterfaceInterfaceArcanistToolsetClassArcanistUsageExceptionClassThrown when there is a problem with how a user is invoking a command, rather than a technical problem.ArcanistUSEnglishTranslationClassArcanistUserAbortExceptionClassThrown when the user chooses not to continue when warned that they're about to do something dangerous.ArcanistUserConfigurationSourceClassArcanistUserRefClassArcanistUserSymbolHardpointQueryClassArcanistUserSymbolRefClassArcanistUserSymbolRefInspectorClassArcanistVectorHardpointClassArcanistVersionWorkflowClassDisplay the current version of Arcanist.ArcanistWildConfigOptionClassThis option type makes it easier to manage unknown options with unknown types.ArcanistWorkEngineClassArcanistWorkflowArgumentClassArcanistWorkflowEngineClassArcanistWorkflowGitHardpointQueryClassArcanistWorkflowInformationClassArcanistWorkflowMercurialHardpointQueryClassArcanistWorkingCopyClassArcanistWorkingCopyConfigurationSourceClassArcanistWorkingCopyIdentityClassInterfaces with basic information about the working copy.ArcanistWorkingCopyPathClassArcanistWorkingCopyStateRefClassArcanistWorkingCopyStateRefInspectorClassBaseHTTPFutureClassExecute HTTP requests with a future-oriented API. For example:CaseInsensitiveArrayClassA case-insensitive associative array.CaseInsensitiveArrayTestCaseClassCommandExceptionClassException thrown when a system command fails.ConduitClientClassConduitClientExceptionClassConduitClientTestCaseClassConduitFutureClassConduitSearchFutureClasscsprintf()FunctionFormat a shell command string. This function behaves like `sprintf`, except that all the normal conversions (like "%s") will be properly escaped, and additional conversions are supported:exec_manual()FunctionExecute a command and capture stdout, stderr, and the return value.ExecFutureClassExecute system commands in parallel using futures.ExecFutureTestCaseClassexecx()FunctionExecute a command and capture stdout and stderr. If the command exits with a nonzero error code, a @{class:CommandException} will be thrown. If you need to manually handle error conditions, use @{function:exec_manual}.FileFinderClassFind files on disk matching criteria, like the 'find' system utility. Use of this class is straightforward:FileFinderTestCaseClassFileListClassA list of files, primarily useful for parsing command line arguments. This class makes it easier to deal with user-specified lists of files and directories used by command line tools.FilesystemExceptionClassException thrown by Filesystem to indicate an error accessing the file system.FilesystemTestCaseClassFutureClassA 'future' or 'promise' is an object which represents the result of some pending computation. For a more complete overview of futures, see @{article:Using Futures}.FutureAgentClassFutureIteratorClassFutureIterator aggregates @{class:Future}s and allows you to respond to them in the order they resolve. This is useful because it minimizes the amount of time your program spends waiting on parallel processes.FutureIteratorTestCaseClassFuturePoolClassFutureProxyClassWraps another @{class:Future} and allows you to post-process its result once it resolves.gitsprintf()FunctionFormat a Git ref selector. This formatting is important when executing commands like "git log" which can not unambiguously parse all values as ref selectors.hgsprintf()FunctionFormat a Mercurial revset expression. Supports the following conversions:HTTPFutureClassSocket-based HTTP future, for making HTTP requests using future semantics. This is an alternative to @{class:CURLFuture} which has better resolution behavior (select()-based wait instead of busy wait) but fewer features. You should prefer this class to @{class:CURLFuture} unless you need its advanced features (like HTTP/1.1, chunked transfer encoding, gzip, etc.).HTTPFutureCertificateResponseStatusClassHTTPFutureCURLResponseStatusClassHTTPFutureHTTPResponseStatusClassHTTPFutureParseResponseStatusClassHTTPFutureResponseStatusClassHTTPFutureTransportResponseStatusClassHTTPSFutureClassVery basic HTTPS future.ImmediateFutureClassDegenerate future which returns an already-existing result without performing any computation.jsprintf()FunctionFormat a Javascript string, using JSON to export complex values. This function behaves like `sprintf`, except that all the normal conversions (like "%s") will be properly escaped, and additional conversions are supported:ldap_sprintf()FunctionFormat an LDAP string. This function behaves like `sprintf`, except that all the normal conversions (like "%s") will be properly escaped, and additional conversions are supported:LibphutilUSEnglishTranslationClassLinesOfALargeClassAbstraction for processing large inputs without holding them in memory. This class implements line-oriented, buffered reads of some external stream, where a "line" is characterized by some delimiter character. This provides a straightforward interface for most large-input tasks, with relatively good performance.LinesOfALargeExecFutureClassRead the output stream of an @{class:ExecFuture} one line at a time. This abstraction allows you to process large inputs without holding them in memory. If you know your inputs fit in memory, it is generally more efficient (and certainly simpler) to read the entire input and `explode()` it. For more information, see @{class:LinesOfALarge}. See also @{class:LinesOfALargeFile} for a similar abstraction that works on files.LinesOfALargeExecFutureTestCaseClassLinesOfALargeFileClassRead the lines of a file, one at a time. This allows you to process large files without holding them in memory. In most cases, it is more efficient (and certainly simpler) to read the entire file and `explode()` it. For more information, see @{class:LinesOfALarge}. See also @{class:LinesOfALargeExecFuture}, for a similar abstraction that works on executed commands.LinesOfALargeFileTestCaseClassMFilterTestHelperClassPhageActionClassPhageAgentActionClassPhageAgentBootloaderClassPhageAgentTestCaseClassPhageExecuteActionClassPhageExecWorkflowClassPhageLocalActionClassPhagePHPAgentClassPhagePHPAgentBootloaderClassPhagePlanActionClassPhageToolsetClassPhageWorkflowClassphlog()Functionlibphutil log function for development debugging. Takes any argument and forwards it to registered listeners. This is essentially a more powerful version of `error_log()`.PhobjectClassBase class for libphutil objects. Enforces stricter object semantics than PHP.PhobjectTestCaseClassPHPASTParserTestCaseClasspht()FunctionTranslate a string. It uses a translator set by `PhutilTranslator::setInstance()` or translations specified by `PhutilTranslator::getInstance()->setTranslations()` and language rules set by `PhutilTranslator::getInstance()->setLocale()`.phutil_console_confirm()Functionphutil_console_format()Functionphutil_console_get_terminal_width()FunctionDetermine the width of the terminal, if possible. Returns `null` on failure.phutil_console_prompt()Functionphutil_console_require_tty()Functionphutil_console_select()Functionphutil_console_wrap()FunctionSoft wrap text for display on a console, respecting UTF8 character boundaries and ANSI color escape sequences.phutil_count()FunctionCount all elements in an array, or something in an object.phutil_date_format()Functionphutil_error_listener_example()FunctionExample @{class:PhutilErrorHandler} error listener callback. When you call `PhutilErrorHandler::setErrorListener()`, you must pass a callback function with the same signature as this one.phutil_format_bytes()FunctionFormat a byte count for human consumption, e.g. "10MB" instead of "10485760".phutil_format_relative_time()Functionphutil_format_relative_time_detailed()FunctionFormat a relative time (duration) into weeks, days, hours, minutes, seconds, but unlike phabricator_format_relative_time, does so for more than just the largest unit.phutil_format_units_generic()Functionphutil_get_signal_name()FunctionReturn a human-readable signal name (like "SIGINT" or "SIGKILL") for a given signal number.phutil_get_system_locale()FunctionReturn the current system locale setting (LC_ALL).phutil_is_system_locale_available()FunctionTest if a system locale (LC_ALL) is available on the system.phutil_is_utf8()FunctionDetermine if a string is valid UTF-8.phutil_is_utf8_slowly()FunctionDetermine if a string is valid UTF-8, slowly.phutil_is_utf8_with_only_bmp_characters()FunctionDetermine if a string is valid UTF-8, with only basic multilingual plane characters. This is particularly important because MySQL's `utf8` column types silently truncate strings which contain characters outside of this set.phutil_parse_bytes()FunctionParse a human-readable byte description (like "6MB") into an integer.phutil_passthru()FunctionWrapper for @{class:PhutilExecPassthru}.phutil_person()FunctionProvide a gendered argument to the translation engine.phutil_register_library()Functionphutil_register_library_map()Functionphutil_set_system_locale()FunctionSet the system locale (LC_ALL) to a particular value.phutil_utf8_console_strlen()FunctionFind the console display length of a UTF-8 string. This may differ from the character length of the string if it contains double-width characters, like many Chinese characters.phutil_utf8_convert()FunctionConvert a string from one encoding (like ISO-8859-1) to another encoding (like UTF-8).phutil_utf8_encode_codepoint()FunctionConvert a Unicode codepoint into a UTF8-encoded string.phutil_utf8_hard_wrap()FunctionHard-wrap a block of UTF-8 text with no embedded HTML tags and entities.phutil_utf8_hard_wrap_html()FunctionHard-wrap a block of UTF-8 text with embedded HTML tags and entities.phutil_utf8_is_cjk()FunctionTest if a string contains Chinese, Japanese, or Korean characters.phutil_utf8_is_combining_character()FunctionDetermine if a given unicode character is a combining character or not.phutil_utf8_strlen()FunctionFind the character length of a UTF-8 string.phutil_utf8_strtolower()FunctionConvert a string to lower case in a UTF8-aware way. Similar to @{function:strtolower}.phutil_utf8_strtoupper()FunctionConvert a string to upper case in a UTF8-aware way. Similar to @{function:strtoupper}.phutil_utf8_strtr()FunctionReplace characters in a string in a UTF-aware way. Similar to @{function:strtr}.phutil_utf8_ucwords()FunctionConvert a string to title case in a UTF8-aware way. This function doesn't necessarily do a great job, but the builtin implementation of `ucwords()` can completely destroy inputs, so it just has to be better than that. Similar to @{function:ucwords}.phutil_utf8ize()FunctionConvert a string into valid UTF-8. This function is quite slow.phutil_utf8v()FunctionSplit a UTF-8 string into an array of characters. Combining characters are also split.phutil_utf8v_codepoints()FunctionSplit a UTF-8 string into an array of codepoints (as integers).phutil_utf8v_combine_characters()FunctionMerge combining characters in a UTF-8 string.phutil_utf8v_combined()FunctionSplit a UTF-8 string into an array of characters. Combining characters are not split.PhutilAggregateExceptionClassException that aggregates other exceptions into a single exception. For example, if you have several objects which can perform a task and just want at least one of them to succeed, you can do something like this:PhutilAllCapsEnglishLocaleClassA test locale which transforms strings into uppercase.PhutilArgumentParserClassParser for command-line arguments for scripts. Like similar parsers, this class allows you to specify, validate, and render help for command-line arguments. For example:PhutilArgumentParserExceptionClassPhutilArgumentParserTestCaseClassPhutilArgumentSpecificationClassPhutilArgumentSpecificationExceptionClassPhutilArgumentSpecificationTestCaseClassPhutilArgumentSpellingCorrectorClassPhutilArgumentSpellingCorrectorTestCaseClassPhutilArgumentUsageExceptionClassPhutilArgumentWorkflowClassUsed with @{class:PhutilArgumentParser} to build command line tools which operate in several modes, called "workflows", like `git`, `svn`, `arc`, `apt-get`. For example, you might build a simple calculator like this:PhutilArrayClassAbstract base class for implementing objects that behave like arrays. This class wraps a basic array and provides trivial implementations for `Countable`, `ArrayAccess` and `Iterator`, so subclasses need only implement specializations.PhutilArrayCheckClassPhutilArrayTestCaseClassTest cases for @{class:PhutilArray} subclasses.PhutilArrayWithDefaultValueClassArray-like object with a default value that is populated when nonexistent keys are accessed. This is particularly useful to avoid constructs like this:PhutilAsanaFutureClassPhutilAWSCloudFormationFutureClassPhutilAWSCloudWatchFutureClassPhutilAWSEC2FutureClassPhutilAWSExceptionClassPhutilAWSFutureClassPhutilAWSManagementWorkflowClassPhutilAWSS3DeleteManagementWorkflowClassPhutilAWSS3FutureClassPhutilAWSS3GetManagementWorkflowClassPhutilAWSS3ManagementWorkflowClassPhutilAWSS3PutManagementWorkflowClassPhutilAWSv4SignatureClassPhutilAWSv4SignatureTestCaseClassPhutilBacktraceSignalHandlerClassSignal handler for SIGHUP which prints the current backtrace out to a file. This is particularly helpful in debugging hung/spinning processes.PhutilBallOfPHPClassConcatenates PHP files together into a single stream. Used by Phage to transmit bootloading code.PhutilBinaryAnalyzerClassPhutilBinaryAnalyzerTestCaseClassPhutilBootloaderClassIMPORTANT: Do not call any libphutil functions in this class, including functions like @{function:id}, @{function:idx} and @{function:pht}. They may not have loaded yet.PhutilBootloaderExceptionClassPhutilBritishEnglishLocaleClassSerious, legitimate British English locale.PhutilBufferedIteratorClassSimple iterator that loads results page-by-page and handles buffering. In particular, this maps well to iterators that load database results page by page and allows you to implement an iterator over a large result set without needing to hold the entire set in memory.PhutilBufferedIteratorTestCaseClassTest cases for @{class:PhutilExampleBufferedIterator}.PhutilBugtraqParserClassReplaces ticket or issue IDs in a block of text with links. This mechanism is based on (and compatible with) the Bugtraq system in TortiseSVN. SeePhutilBugtraqParserTestCaseClassPhutilCallbackFilterIteratorClassNOTE: This class has the same purpose as `CallbackFilterIterator` in PHP 5.4.PhutilCallbackSignalHandlerClassPhutilChannelClassWrapper around streams, pipes, and other things that have basic read/write I/O characteristics.PhutilChannelChannelClassChannel that wraps some other channel. This class is not interesting on its own and just serves as a no-op proxy, but extending it allows you to compose channels to mutate their characteristics (for instance, to add protocol semantics with @{class:PhutilProtocolChannel}).PhutilChannelTestCaseClassPhutilChunkedIteratorClassThis is an iterator version of `array_chunk()`.PhutilChunkedIteratorTestCaseClassTest cases for @{class:PhutilChunkedIterator}.PhutilCIDRBlockClassCIDR notation IP block, like "172.30.0.0/16".PhutilCIDRListClassList of CIDR notation IP blocks, like "172.30.0.0/16".PhutilClassMapQueryClassLoad a map of concrete subclasses of some abstract parent class.PhutilCloudWatchMetricClassPhutilCommandStringClassPhutilConsoleClassProvides access to the command-line console. Instead of reading from or writing to stdin/stdout/stderr directly, this class provides a richer API including support for ANSI color and formatting, convenience methods for prompting the user, and the ability to interact with stdin/stdout/stderr in some other process instead of this one.PhutilConsoleBlockClassPhutilConsoleErrorClassPhutilConsoleFormatterClassPhutilConsoleInfoClassPhutilConsoleListClassPhutilConsoleLogLineClassPhutilConsoleMessageClassPhutilConsoleMetricsClassPhutilConsoleMetricsSignalHandlerClassPhutilConsoleProgressBarClassShow a progress bar on the console. Usage:PhutilConsoleProgressSinkClassPhutilConsoleServerClassPhutilConsoleServerChannelClassPhutilConsoleSkipClassPhutilConsoleStdinNotInteractiveExceptionClassThrown when you prompt the user with @{function:phutil_console_prompt} or @{function:phutil_console_confirm} but stdin is not an interactive TTY so the user can't possibly respond. Usually this means the user ran the command with something piped into stdin.PhutilConsoleTableClassShow a table in the console. Usage:PhutilConsoleViewClassPhutilConsoleWarningClassPhutilConsoleWrapTestCaseClassPhutilCowsayClassParser and renderer for ".cow" files used by the `cowsay` program.PhutilCowsayTestCaseClassPhutilCsprintfTestCaseClassPhutilCzechLocaleClassLocale for "Czech (Czech Republic)".PhutilDeferredLogClassObject that writes to a logfile when it is destroyed. This allows you to add more data to the log as execution unfolds, while still ensuring a write in normal circumstances (see below for discussion of cases where writes may not occur).PhutilDeferredLogTestCaseClassPhutilDiffBinaryAnalyzerClassPhutilDirectedScalarGraphClassConcrete subclass of @{class:AbstractDirectedGraph} which can not load any data from external sources.PhutilDirectoryFixtureClassPhutilDocblockParserClassParse a docblock comment from source code into raw text documentation and metadata (like "@author" and "@return").PhutilDocblockParserTestCaseClassTest cases for @{class:PhutilDocblockParser}.PhutilDOMNodeClassPhutilEditDistanceMatrixClassCompute edit distance between two scalar sequences. This class uses Levenshtein (or Damerau-Levenshtein) to compute the edit distance between two inputs. The inputs are arrays containing any scalars (not just strings) so it can be used with, e.g., utf8 sequences.PhutilEditDistanceMatrixTestCaseClassPhutilEditorConfigClassParser for [[http://editorconfig.org/ | EditorConfig]] files.PhutilEditorConfigTestCaseClassPhutilEmailAddressClassBasic email address parser. This parser is very liberal and does not attempt to be fully RFC-compliant, because trying to do so is a crazy mess. However, it should parse all reasonable addresses which are actually in use on the internet today.PhutilEmailAddressTestCaseClassTest cases for @{class:PhutilEmailAddress} parser.PhutilEmojiLocaleClassA picture is worth a thousand words.PhutilEnglishCanadaLocaleClassLocale for "English (Canada)".PhutilErrorHandlerTestCaseClassPhutilErrorTrapClassTrap PHP errors while this object is alive, so they can be accessed and included in exceptions or other types of logging. For example, if you have code like this:PhutilEventClassPhutilEventConstantsClassPhutilEventEngineClassPhutilEventListenerClassPhutilEventTypeClassPhutilExampleBufferedIteratorClassExample implementation and test case for @{class:PhutilBufferedIterator}.PhutilExecChannelClassChannel on an underlying @{class:ExecFuture}. For a description of channels, see @{class:PhutilChannel}.PhutilExecutionEnvironmentClassGet information about the current execution environment.PhutilFileLockClassWrapper around `flock()` for advisory filesystem locking. Usage is straightforward:PhutilFileLockTestCaseClassPhutilFrenchLocaleClassLocale for "French (France)".PhutilGermanLocaleClassLocale for "German (Germany)".PhutilGitBinaryAnalyzerClassPhutilGitHubFutureClassPhutilGitHubResponseClassPhutilGitsprintfTestCaseClassPhutilGitURIClassParser for the alternate URI scheme used by SCP and Git, which look like this:PhutilGitURITestCaseClassPhutilHashingIteratorClassPhutilHashingIteratorTestCaseClassPhutilHelpArgumentWorkflowClassPhutilHgsprintfTestCaseClassPhutilHTMLParserClassPhutilHTMLParserTestCaseClassPhutilHTTPEngineExtensionClassExtend HTTP behavior by injecting proxies or compromising SSL.PhutilHTTPResponseClassPhutilHTTPResponseParserClassPhutilHTTPResponseParserTestCaseClassPhutilINIParserExceptionClassPhutilInvalidRuleParserGeneratorExceptionClassPhutilInvalidStateExceptionClassPhutilInvalidStateExceptionTestCaseClassPhutilIPAddressClassRepresent and manipulate IPv4 and IPv6 addresses.PhutilIPAddressTestCaseClassPhutilIPv4AddressClassRepresent and manipulate IPv4 addresses.PhutilIPv6AddressClassRepresent and manipulate IPv6 addresses.PhutilIrreducibleRuleParserGeneratorExceptionClassPhutilJavaFragmentLexerClassPhutilJSONFragmentLexerClassSyntax highlighting lexer for JSON fragments.PhutilJSONParserClassA JSON parser.PhutilJSONParserExceptionClassPhutilJSONParserTestCaseClassPhutilJSONProtocolChannelClassChannel that transmits dictionaries of primitives using JSON serialization. This channel is not binary safe.PhutilJSONProtocolChannelTestCaseClassPhutilKoreanLocaleClassThe Korean (Republic of Korea) LocalePhutilLanguageGuesserClassVery simple class to guess the languages of source files which we failed to determine by examining file name/extension rules.PhutilLanguageGuesserTestCaseClassPhutilLexerClassSlow, inefficient regexp-based lexer. Define rules like this:PhutilLibraryConflictExceptionClassThrown when you attempt to load two different copies of a library with the same name. Trying to load the second copy of the library will trigger this, and the library will not be loaded.PhutilLibraryTestCaseClassPhutilLocaleClassDefines a locale for translations.PhutilLocaleTestCaseClassPhutilLockClassBase class for locks, like file locks.PhutilLockExceptionClassPhutilLogFileChannelClassA @{class:PhutilChannelChannel} which wraps some other channel and writes data passed over it to a log file.PhutilLunarPhaseClassCompute the phase of the terran moon for a given epoch.PhutilLunarPhaseTestCaseClassPhutilMethodNotImplementedExceptionClassAn exception thrown when a method is called on a class which does not provide an implementation for the called method. This is sometimes the case when a base class expects subclasses to provide their own implementations, for example.PhutilMetricsChannelClassA @{class:PhutilChannelChannel} which wraps some other channel and provides metrics about its use (e.g., bytes read and bytes written).PhutilModuleUtilsTestCaseClassPhutilNumberClassPhutilOAuth1FutureClassProxy future that implements OAuth1 request signing. For references, see:PhutilOAuth1FutureTestCaseClassPhutilOpaqueEnvelopeClassOpaque reference to a string (like a password) that won't put any sensitive data in stack traces, var_dump(), print_r(), error logs, etc. Usage:PhutilOpaqueEnvelopeKeyClassHolds the key for @{class:PhutilOpaqueEnvelope} in a logically distant location so it will never appear in stack traces, etc. You should never need to use this class directly. See @{class:PhutilOpaqueEnvelope} for information about opaque envelopes.PhutilOpaqueEnvelopeTestCaseClassPhutilParserGeneratorClassSimple LR(1) parser generator. Generally, build a parser by setting terminals and rules, then calling @{method:processGrammar}. For example, here is a simple grammar which accepts one or more "a" followed by exactly one "b":PhutilParserGeneratorExceptionClassPhutilParserGeneratorTestCaseClassPhutilPayPalAPIFutureClassPhutilPersonInterfacePhutilPersonTestClassPhutilPHPFragmentLexerClassPHP lexer which can handle fragments of source code, e.g. for syntax highlighting of inline snippets. This is largely based on Pygments, but alters some rules to better annotate symbols from source fragments.PhutilPHPFragmentLexerTestCaseClassPhutilPHPObjectProtocolChannelClassChannel that transmits PHP objects using PHP serialization. This channel is binary safe.PhutilPHPObjectProtocolChannelTestCaseClassPhutilPhtTestCaseClassTest cases for functions in pht.php.PhutilPirateEnglishLocaleClassArrr!PhutilPortugueseBrazilLocaleClassLocale for "Portuguese (Brazil)".PhutilPortuguesePortugalLocaleClassLocale for "Portuguese (Portugal)".PhutilPostmarkFutureClassPhutilPregsprintfTestCaseClassPhutilProcessQueryClassPhutilProcessRefClassPhutilProcessRefTestCaseClassPhutilProgressSinkClassPhutilProtocolChannelClassWraps a @{class:PhutilChannel} and implements a message-oriented protocol on top of it. A protocol channel behaves like a normal channel, except that @{method:read} and @{method:write} are message-oriented and the protocol channel handles encoding and parsing messages for transmission.PhutilProxyExceptionClassPrior to PHP 5.3, PHP does not support nested exceptions; this class provides limited support for nested exceptions. Use methods on @{class:PhutilErrorHandler} to unnest exceptions in a forward-compatible way.PhutilProxyIteratorClassPhutilPygmentizeBinaryAnalyzerClassPhutilPythonFragmentLexerClassPython lexer which can handle fragments of source code, e.g. for syntax highlighting of inline snippets. This is largely based on Pygments:PhutilQueryStringParserClassUtilities for parsing HTTP query strings.PhutilQueryStringParserTestCaseClassTest cases for @{class:PhutilQueryStringParser} parser.PhutilRawEnglishLocaleClassA test locale which displays the raw strings which are fed into the translation engine.PhutilReadableSerializerClassSerialize PHP values and objects into a human-readable format, useful for displaying errors.PhutilReadableSerializerTestCaseClassPhutilRopeClassString-like object which reduces the cost of managing large strings. This is particularly useful for buffering large amounts of data that is being passed to `fwrite()`.PhutilRopeTestCaseClassPhutilServiceProfilerClassSimple event store for service calls, so they can be printed to stdout or displayed in a debug console.PhutilShellLexerClassLexer for shell-like argument strings. Somewhat similar to Python's shlex.PhutilShellLexerTestCaseClassPhutilSignalHandlerClassPhutilSignalRouterClassPhutilSimpleOptionsClassUtilities for parsing simple option lists used in Remarkup, like codeblocks:PhutilSimpleOptionsLexerClassLexer for simple options, like:PhutilSimpleOptionsLexerTestCaseClassPhutilSimpleOptionsTestCaseClassPhutilSimplifiedChineseLocaleClassLocale for "Chinese (Simplified)".PhutilSlackFutureClassPhutilSocketChannelClassChannel on an underlying stream socket or socket pair. For a description of channels, see @{class:PhutilChannel}.PhutilSortVectorClassPhutilSpanishSpainLocaleClassThe Spanish (Spain) LocalePhutilStreamIteratorClassPhutilSubversionBinaryAnalyzerClassPhutilSymbolLoaderClassQuery and load Phutil classes, interfaces and functions.PhutilSystemClassInteract with the operating system.PhutilSystemTestCaseClassPhutilTerminalStringClassString escaped for terminal output. See @{function:tsprintf}.PhutilTestPhobjectClassPhutilTraditionalChineseLocaleClassLocale for "Chinese (Traditional)".PhutilTranslationClassPhutilTranslationTestCaseClassPhutilTranslatorClassPhutilTranslatorTestCaseClassPhutilTsprintfTestCaseClassPhutilTwitchFutureClassPhutilTypeCheckExceptionClassPhutilTypeExtraParametersExceptionClassPhutilTypeLexerClassLexer for a simple type grammar. See @{class:PhutilTypeSpec} for a description.PhutilTypeMissingParametersExceptionClassPhutilTypeSpecClassPerform type checks using a simple type grammar. The grammar supports the following basic types:PhutilTypeSpecTestCaseClassPhutilUnknownSymbolParserGeneratorExceptionClassPhutilUnreachableRuleParserGeneratorExceptionClassPhutilUnreachableTerminalParserGeneratorExceptionClassPhutilURIClassStructural representation of a URI.PhutilUrisprintfTestCaseClassPhutilURITestCaseClassTest cases for @{class:PhutilURI} parser.PhutilUSEnglishLocaleClassThe default English locale.PhutilUTF8StringTruncatorClassTruncate a UTF-8 string to a some maximum number of bytes, codepoints, or glyphs.PhutilUTF8TestCaseClassTest cases for functions in utf8.php.PhutilUtilsTestCaseClassTest cases for functions in utils.php.PhutilVeryWowEnglishLocaleClassMuch locale! Very English! Wow!PhutilWordPressFutureClassPhutilXHPASTBinaryClasspregsprintf()FunctionFormat a regular expression. Supports the following conversions:TempFileClassSimple wrapper to create a temporary file and guarantee it will be deleted on object destruction. Used like a string to path:TestAbstractDirectedGraphClasstsprintf()FunctionFormat text for terminal output. This function behaves like `sprintf`, except that all the normal conversions (like "%s") will be properly escaped, and additional conversions are supported:urisprintf()FunctionFormat a URI. This function behaves like `sprintf`, except that all the normal conversions (like "%s") will be properly escaped, and additional conversions are supported:vcsprintf()FunctionVersion of @{function:csprintf} that takes a vector of arguments.vjsprintf()Functionvurisprintf()FunctionXHPASTNodeClassXHPASTNodeTestCaseClassXHPASTSyntaxErrorExceptionClassXHPASTTokenClassXHPASTTreeClassXHPASTTreeTestCaseClassxsprintf_command()Function@{function:xsprintf} callback for @{function:csprintf}.xsprintf_git()Function@{function:xsprintf} callback for Git encoding.xsprintf_javascript()Function@{function:xsprintf} callback for JavaScript encoding.xsprintf_ldap()Function@{function:ldap_sprintf} callback for LDAP encoding.xsprintf_mercurial()Function@{function:xsprintf} callback for Mercurial encoding.xsprintf_regex()Function@{function:xsprintf} callback for regular expressions.xsprintf_terminal()FunctionCallback for terminal encoding, see @{function:tsprintf} for use.xsprintf_uri()Function@{function:urisprintf} callback for URI encoding.XsprintfUnknownConversionExceptionClass