diff --git a/core/modules/migrate/src/Plugin/migrate/process/Substr.php b/core/modules/migrate/src/Plugin/migrate/process/Substr.php
index ab6171a..48da82d 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/Substr.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/Substr.php
@@ -9,7 +9,39 @@
 use Drupal\Component\Utility\Unicode;
 
 /**
- * This plugin returns a substring of the current value.
+ * Returns the portion of the current value in the process pipeline specified by
+ * the start and length parameters. Unicode::substr is used to get the sub string.
+ *
+ * Available configuration parameters
+ *   - start: (optional) The returned string will start at the start'th position in string.
+ *   - length: (optional) The maximum number of characters in the returned string.
+ *
+ * If start is NULL and length is an integer, the start position is the beginning
+ * of the string. If start is an integer and length is NULL the substring
+ * starting from the start position until the end of the string will be returned.
+ * If both start and length are NULL the entire string is returned.
+ *
+ * Here is an example:
+ *
+ * @code
+ * process:
+ *   new_text_field:
+ *     plugin: substr
+ *     source: some_text_field
+ *       start: 2
+ *       length: 7
+ * @endcode
+ *
+ * If some_text_field was 'Marie Skłodowska Curie' then
+ * $destination['new_text_field'] would be 'Skłodowska'.
+ *
+ * The PHP equivalent of this is:
+ *
+ * @code
+ * $destination['new_text_field'] = substr($source['soume_text_field'], 6, 10)
+ * @endcode
+ *
+ * @see \Drupal\migrate\Plugin\MigrateProcessInterface
  *
  * @MigrateProcessPlugin(
  *   id = "substr"
@@ -19,6 +51,8 @@ class Substr extends ProcessPluginBase {
 
   /**
    * {@inheritdoc}
+   *
+   * @throws \Drupal\migrate\MigrateException
    */
   public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
     $start = isset($this->configuration['start']) ? $this->configuration['start'] : 0;
