summaryrefslogtreecommitdiff
path: root/protocols/Telegram/tdlib/td/td/generate/TlDocumentationGenerator.php
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/Telegram/tdlib/td/td/generate/TlDocumentationGenerator.php')
-rw-r--r--protocols/Telegram/tdlib/td/td/generate/TlDocumentationGenerator.php28
1 files changed, 26 insertions, 2 deletions
diff --git a/protocols/Telegram/tdlib/td/td/generate/TlDocumentationGenerator.php b/protocols/Telegram/tdlib/td/td/generate/TlDocumentationGenerator.php
index f30ca382e1..09c0f58c70 100644
--- a/protocols/Telegram/tdlib/td/td/generate/TlDocumentationGenerator.php
+++ b/protocols/Telegram/tdlib/td/td/generate/TlDocumentationGenerator.php
@@ -6,6 +6,15 @@ abstract class TlDocumentationGenerator
private $documentation = array();
private $line_replacement = array();
+ private function isBuiltInType($type)
+ {
+ if (in_array($type, array('Bool', 'int32', 'int53', 'int64', 'double', 'string', 'bytes'))) {
+ return true;
+ }
+ return substr($type, 0, 7) === 'vector<' && substr($type, -1, 1) === '>' && $this->isBuiltInType(substr($type, 7, -1));
+ }
+
+
final protected function printError($error)
{
fwrite(STDERR, "$error near line \"".rtrim($this->current_line)."\"\n");
@@ -101,6 +110,7 @@ abstract class TlDocumentationGenerator
{
$lines = array_filter(array_map('trim', file($tl_scheme_file)));
$description = '';
+ $description_line_count = 0;
$current_class = '';
$is_function = false;
$need_class_description = false;
@@ -120,8 +130,16 @@ abstract class TlDocumentationGenerator
$this->printError('Wrong comment');
continue;
}
- if ($line[2] === '@' || $line[2] === '-') {
- $description .= trim(substr($line, 2 + intval($line[2] === '-'))).' ';
+ if ($line[2] === '@') {
+ if (substr($line, 2, 7) !== '@class ') {
+ $description_line_count++;
+ }
+ $description .= trim(substr($line, 2)).' ';
+ } elseif ($line[2] === '-') {
+ if (strpos($line, '@') !== false) {
+ $description_line_count += 100;
+ }
+ $description .= trim(substr($line, 3)).' ';
} else {
$this->printError('Unexpected comment');
}
@@ -240,6 +258,8 @@ abstract class TlDocumentationGenerator
if (array_keys($info) !== array_keys($known_fields)) {
$this->printError("Have wrong documentation for class `$class_name`");
+ } else if ($description_line_count === 1 ? count($known_fields) >= 4 : $description_line_count !== count($known_fields) + 1) {
+ $this->printError("Documentation for fields of class `$class_name` must be split to different lines");
}
$base_class_name = $current_class ?: $this->getBaseClassName($is_function);
@@ -255,6 +275,9 @@ abstract class TlDocumentationGenerator
$may_be_null = stripos($info[$name], 'may be null') !== false;
$field_name = $this->getFieldName($name, $class_name);
$field_type_name = $this->getTypeName($field_type);
+ if ($this->isBuiltInType($field_type) && ($may_be_null || stripos($info[$name], '; pass null') !== false)) {
+ $this->printError("Field `$name` of class `$class_name` can't be marked as nullable");
+ }
$this->addFieldDocumentation($class_name, $field_name, $field_type_name, $info[$name], $may_be_null);
}
@@ -274,6 +297,7 @@ abstract class TlDocumentationGenerator
}
$description = '';
+ $description_line_count = 0;
}
}