Mercurial > octave
diff doc/interpreter/doccheck/mk-undocumented-list.pl @ 33417:8643f7ca9504 bytecode-interpreter
maint: merge default to bytecode-interpreter
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Tue, 16 Apr 2024 14:24:48 -0400 |
parents | doc/interpreter/doccheck/mk_undocumented_list@d338695e2823 doc/interpreter/doccheck/mk_undocumented_list@48c2df4bb207 |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/interpreter/doccheck/mk-undocumented-list.pl Tue Apr 16 14:24:48 2024 -0400 @@ -0,0 +1,188 @@ +#!/usr/bin/perl -w + +######################################################################## +## +## Copyright (C) 2010-2024 The Octave Project Developers +## +## See the file COPYRIGHT.md in the top-level directory of this +## distribution or <https://octave.org/copyright/>. +## +## This file is part of Octave. +## +## Octave is free software: you can redistribute it and/or modify it +## under the terms of the GNU General Public License as published by +## the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## +## Octave is distributed in the hope that it will be useful, but +## WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with Octave; see the file COPYING. If not, see +## <https://www.gnu.org/licenses/>. +## +######################################################################## + +################################################################################ +# File: mk-undocumented-list.pl +# Purpose: Create a list of functions present in Octave, but without a +# corresponding DOCSTRING entry in one of the *.txi files +# Usage: make doc/interpreter/undocumented_list +# Documentation: see README in doccheck directory +################################################################################ +# Get a list from Octave of all visible functions +@octave_output = <<`_END_OCT_SCRIPT_`; +../../run-octave --norc --quiet --no-history --eval '\ + funclist = vertcat (__list_functions__ , __builtins__); \ + funclist = funclist(! strncmp (funclist, \"meta.\", 5)) \ + disp ("#!-separator-!#") \ + where = cellfun (\@which, funclist, \"UniformOutput\", 0)' +_END_OCT_SCRIPT_ + +unless (@octave_output) { die "Unable to invoke 'run-octave'. Exiting\n" } + +################################################################################ +# Winnow list of functions that require a DOCSTRING + +# First, divide output in to list of functions and list of locations +$idx = 0; +while (($_ = $octave_output[$idx++]) !~ /^#!-separator-!#$/) +{ + push(@all_functions, $1) if (/] = (\w+)$/); +} +while ($_ = $octave_output[$idx++]) +{ + push(@where, $1) if (/] = (.+)$/); +} + +# Sanity check that Octave script worked +if ($#all_functions != $#where) +{ + die "Unequal number of functions and locations. Parsing failed\n"; +} + +# Second, remove functions based on directory location +# deprecated directory, legacy directory, doc/interpreter directory, +# test/ directory +FUNC: foreach $idx (0 .. $#where) +{ + next FUNC if ($where[$idx] =~ /deprecated/i); + next FUNC if ($where[$idx] =~ /legacy/i); + next FUNC if ($where[$idx] =~ /interpreter/i); + next FUNC if ($where[$idx] =~ m#test/#i); + + push (@functions, $all_functions[$idx]); +} + +# Third, remove functions based on naming patterns +# Remove internal functions from the list of features requiring a DOCSTRING +@functions = grep (! /^__/, @functions); + +# Fourth, remove exceptions based on name that do not require documentation +# Load list of function exceptions not requiring a DOCSTRING +# Exception data is stored at the bottom of this script +foreach $_ (<DATA>) +{ chomp, $exceptions{$_}=1; } + +# Remove exception data from the list +@functions = grep (! $exceptions{$_}, @functions); + +################################################################################ +# Get a list of all documented functions +foreach $txi_file (glob("*.txi")) +{ + open(TXI_FILE, $txi_file) or die "Unable to open $txi_file for reading\n"; + while (<TXI_FILE>) + { + $docstrings{$1} = 1 if (/\@DOCSTRING\((\w+)\)/); + } +} + +################################################################################ +# Find features which have not been documented in the txi files +@undocumented = grep (! $docstrings{$_}, @functions); + +# Exit successfully if no undocumented functions +exit(0) if (! @undocumented); + +$, = "\n"; # Set output record separator +print sort(@undocumented); +print "\n"; +exit(1); + +################################################################################ +# Exception list of functions not requiring a DOCSTRING +################################################################################ +# desktop : Remove when terminal widget is no longer experimental +# bytecode : Remove when VM is no longer experimental +################################################################################ +__DATA__ +angle +bessel +besselh +besseli +besselk +bessely +bug_report +bytecode +chdir +dbnext +debug +desktop +end +exit +F_DUPFD +F_GETFD +F_GETFL +F_SETFD +F_SETFL +fact +finite +flipdim +fmod +gammaln +gui_mainfcn +home +i +ifelse +import +inf +inverse +isbool +isfinite +J +j +java2mat +lstat +metaclass +nan +nargchk +O_APPEND +O_ASYNC +O_CREAT +O_EXCL +O_NONBLOCK +O_RDONLY +O_RDWR +O_SYNC +O_TRUNC +O_WRONLY +putenv +rticks +setenv +slash +thetaticks +tolower +toupper +ylabel +ylim +ytickangle +yticklabels +yticks +zlabel +zlim +ztickangle +zticklabels +zticks