09631c38fa12c2004a491dd1dbb887f399254141
[scilab.git] / scilab / modules / slint / src / cpp / DeprecatedChecker.cpp
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2015 - Scilab Enterprises - Calixte DENIZET
4  *  Copyright (C) 2012 - 2016 - Scilab Enterprises
5  *  Copyright (C) 2017, 2018 - Samuel GOUGEON
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13  *
14  */
15
16 #include "checkers/DeprecatedChecker.hxx"
17
18 namespace slint
19 {
20
21 std::unordered_map<std::wstring, std::wstring> DeprecatedChecker::deprecated = initDep();
22 std::unordered_map<std::wstring, std::shared_ptr<SLintChecker>> DeprecatedChecker::partiallyDeprecated = initPartDep();
23
24 void DeprecatedChecker::preCheckNode(const ast::Exp & e, SLintContext & context, SLintResult & result)
25 {
26     const ast::CallExp & ce = static_cast<const ast::CallExp &>(e);
27     if (ce.getName().isSimpleVar())
28     {
29         const std::wstring & name = static_cast<const ast::SimpleVar &>(ce.getName()).getSymbol().getName();
30         const auto i = deprecated.find(name);
31         if (i != deprecated.end())
32         {
33             if (i->second.empty())
34             {
35                 result.report(context, e.getLocation(), *this, _("Deprecated function: %s."), name);
36             }
37             else
38             {
39                 result.report(context, e.getLocation(), *this, _("Deprecated function %s: use %s instead."), name, i->second);
40             }
41         }
42         else
43         {
44             const auto i = partiallyDeprecated.find(name);
45             if (i != partiallyDeprecated.end())
46             {
47                 i->second->preCheckNode(e, context, result);
48             }
49         }
50     }
51 }
52
53 void DeprecatedChecker::postCheckNode(const ast::Exp & e, SLintContext & context, SLintResult & result)
54 {
55 }
56
57 const std::string DeprecatedChecker::getName() const
58 {
59     return "DeprecatedChecker";
60 }
61
62 void DeprecatedChecker::__Svd::preCheckNode(const ast::Exp & e, SLintContext & context, SLintResult & result)
63 {
64     const ast::CallExp & ce = static_cast<const ast::CallExp &>(e);
65     const ast::exps_t args = ce.getArgs();
66     if (args.size() == 2)
67     {
68         const ast::Exp & second = *args.back();
69         if (second.isDoubleExp() && static_cast<const ast::DoubleExp &>(second).getValue() == 0)
70         {
71             result.report(context, e.getLocation(), *this, _("svd(..., 0) is deprecated."));
72         }
73     }
74 }
75
76 void DeprecatedChecker::__Mfprintf::preCheckNode(const ast::Exp & e, SLintContext & context, SLintResult & result)
77 {
78     const ast::CallExp & ce = static_cast<const ast::CallExp &>(e);
79     const ast::exps_t args = ce.getArgs();
80     if (args.size() != 0)
81     {
82         const ast::Exp & first = *args.front();
83         if (first.isDoubleExp() && static_cast<const ast::DoubleExp &>(first).getValue() == -1)
84         {
85             result.report(context, e.getLocation(), *this, _("mfprintf(-1, ...) is deprecated."));
86         }
87     }
88 }
89
90 std::unordered_map<std::wstring, std::wstring> DeprecatedChecker::initDep()
91 {
92     // TODO: get this list from a conf file
93     std::unordered_map<std::wstring, std::wstring> map;
94
95     // Scilab 6.1.0 => 6.1.x
96
97     // Scilab 6.0.x => 6.1.0
98     map.emplace(L"get_figure_handle", L"findobj(\'figure_id\',n)");
99     map.emplace(L"champ1", L"champ.colored");
100     map.emplace(L"%sn", L"ellipj");
101     map.emplace(L"dirname", L"fileparts");
102     map.emplace(L"_d", L"_");
103     map.emplace(L"dgettext", L"gettext");
104     map.emplace(L"datatipToggle", L"datatipManagerMode");
105     map.emplace(L"denom", L".den");
106     map.emplace(L"frexp", L"log2");
107     map.emplace(L"eval", L"evstr");
108     map.emplace(L"getPreferencesValue", L"xmlGetValues");
109     map.emplace(L"hypermat", L"zeros|matrix");
110     map.emplace(L"lstsize", L"size");
111     map.emplace(L"nanmin", L"min");
112     map.emplace(L"nanmax", L"max");
113     map.emplace(L"noisegen", L"grand");
114     map.emplace(L"numer", L".num");
115     map.emplace(L"ric_desc", L"riccati");
116     map.emplace(L"saveafterncommands", L"");
117     map.emplace(L"setPreferencesValue", L"xmlSetValues");
118     map.emplace(L"square", L"replot");
119     map.emplace(L"sysdiag", L"blockdiag");
120     map.emplace(L"with_tk", L"with_module('tclsci')");
121     map.emplace(L"xgetech", L"gca");
122     map.emplace(L"xinfo", L"gcf().info_message");
123     map.emplace(L"scatter3", L"scatter3d");
124
125     // Scilab 5.5.2 => 6.0.0
126     map.emplace(L"fort", L"call");
127     map.emplace(L"znaupd", L"eigs");
128     map.emplace(L"zneupd", L"eigs");
129     map.emplace(L"dseupd", L"eigs");
130     map.emplace(L"dneupd", L"eigs");
131     map.emplace(L"dnaupd", L"eigs");
132     map.emplace(L"dsaupd", L"eigs");
133
134     map.emplace(L"m_circle", L"hallchart");
135     map.emplace(L"plot2d1", L"plot2d");
136     map.emplace(L"xclear", L"clf");
137     map.emplace(L"datatipSetStruct", L"");
138     map.emplace(L"datatipGetStruct", L"");
139     map.emplace(L"fcontour2d", L"contour2d");
140     map.emplace(L"fcontour", L"contour");
141     map.emplace(L"fac3d", L"plot3d");
142     map.emplace(L"fac3d1", L"plot3d1");
143     map.emplace(L"eval3d", L"ndgrid");
144
145     map.emplace(L"gspec", L"spec");
146     map.emplace(L"gschur", L"schur");
147     map.emplace(L"rafiter", L"taucs_chsolve");
148     map.emplace(L"numdiff", L"numderivative");
149     map.emplace(L"derivative", L"numderivative");
150     map.emplace(L"mvvacov", L"cov");
151
152     map.emplace(L"perl", L"");
153     map.emplace(L"lex_sort", L"gsort");
154     map.emplace(L"strcmpi", L"strcmp");
155     map.emplace(L"jconvMatrixMethod", L"jautoTranspose");
156     map.emplace(L"havewindow", L"getscilabmode");
157     map.emplace(L"xpause", L"sleep");
158     map.emplace(L"curblockc", L"curblock");
159     map.emplace(L"extract_help_examples", L"");
160     map.emplace(L"mtlb_mode", L"oldEmptyBehaviour");
161
162     map.emplace(L"addf", L"");
163     map.emplace(L"subf", L"");
164     map.emplace(L"mulf", L"");
165     map.emplace(L"ldivf", L"");
166     map.emplace(L"rdivf", L"");
167     map.emplace(L"cmb_lin", L"");
168     map.emplace(L"solve", L"");
169     map.emplace(L"trianfml", L"");
170     map.emplace(L"trisolve", L"");
171     map.emplace(L"bloc2exp", L"");
172
173     map.emplace(L"comp", L"exec");
174     map.emplace(L"errcatch", L"");
175     map.emplace(L"iserror", L"");
176     map.emplace(L"str2code", L"ascii");
177     map.emplace(L"code2str", L"ascii");
178     map.emplace(L"fun2string", L"string");
179     map.emplace(L"getvariablesonstack", L"who");
180     map.emplace(L"gstacksize", L"");
181     map.emplace(L"stacksize", L"");
182     map.emplace(L"macr2lst", L"");
183     map.emplace(L"readgateway", L"");
184
185     // Scilab 5.5.1 => 5.5.2
186     map.emplace(L"%asn", L"delip");
187     map.emplace(L"chart", L"nicholschart");
188     map.emplace(L"IsAScalar", L"isscalar");
189     map.emplace(L"jmat", L"flipdim");
190     map.emplace(L"mfft", L"ftt");
191     map.emplace(L"milk_drop", L"");
192     map.emplace(L"msd", L"stdev");
193     map.emplace(L"nfreq", L"tabul");
194     map.emplace(L"pcg", L"conjgrad");
195     map.emplace(L"regress", L"reglin");
196     map.emplace(L"relocate_handle", L"");
197     map.emplace(L"st_deviation", L"stdev");
198     map.emplace(L"xmltochm", L"");
199     map.emplace(L"xsetm", L"");
200
201     // Scilab 5.5.0 => 5.5.1
202     map.emplace(L"datatipContextMenu", L"");
203     map.emplace(L"datatipEventHandler", L"");
204
205     // SCilab 5.4.1 => 5.5.0
206     map.emplace(L"dft", L"fft");
207     map.emplace(L"sscanf", L"msscanf");
208     map.emplace(L"fscanf", L"mfscanf");
209     map.emplace(L"printf", L"mprintf");
210     map.emplace(L"fprintf", L"mfprintf");
211     map.emplace(L"sprintf", L"msprintf");
212     map.emplace(L"demo_message", L"");
213     map.emplace(L"demo_mdialog", L"");
214     map.emplace(L"draw", L"");
215     map.emplace(L"clear_pixmap", L"");
216     map.emplace(L"show_pixmap", L"");
217     map.emplace(L"winclose", L"close");
218     map.emplace(L"datatipInitStruct", L"");
219     map.emplace(L"datatipRedraw", L"");
220     map.emplace(L"getfont", L"");
221     map.emplace(L"getmark", L"");
222     map.emplace(L"getlinestyle", L"");
223     map.emplace(L"getsymbol", L"");
224     map.emplace(L"with_embedded_jre", L"");
225     map.emplace(L"fit_dat", L"datafit");
226     map.emplace(L"create_palette", L"");
227
228     // Scilab 5.4.0 => 5.4.1
229     map.emplace(L"chartoeom", L"");
230     map.emplace(L"eomtochar", L"");
231     map.emplace(L"config", L"preferences");
232     map.emplace(L"createpopup", L"uicontextmenu");
233     map.emplace(L"mtlb_conv", L"conv");
234     map.emplace(L"mtlb_repmat", L"repmat");
235     map.emplace(L"neldermead_display", L"disp");
236     map.emplace(L"nmplot_display", L"disp");
237     map.emplace(L"optimbase_display", L"disp");
238     map.emplace(L"optimsimplex_print", L"disp");
239     map.emplace(L"iptim_simplex_tostring", L"string");
240     map.emplace(L"ricc_old", L"ricc");
241     map.emplace(L"showalluimenushandles", L"set(get(0), \"ShowHiddenHandles\", \"on\")");
242     map.emplace(L"with_pvm", L"getversion");
243     map.emplace(L"with_texmacs", L"");
244     map.emplace(L"xbasr", L"");
245     map.emplace(L"xselect", L"show_window");
246
247     // Scilab 5.3.3 => 5.4.0
248     map.emplace(L"MSDOS", L"getos");
249     map.emplace(L"sd2sci", L"");
250     map.emplace(L"oldplot", L"");
251
252     // Scilab 5.3.0 => 5.3.3: nothing removed
253
254     // Scilab 5.2.X => 5.3.0
255     map.emplace(L"maxi", L"max");
256     map.emplace(L"mini", L"min");
257     map.emplace(L"oldbesseli", L"besseli");
258     map.emplace(L"oldbesselj", L"besselj");
259     map.emplace(L"oldbesselk", L"besselk");
260     map.emplace(L"oldbessely", L"bessely");
261     map.emplace(L"textprint", L"prettyprint");
262     map.emplace(L"pol2tex", L"prettyprint");
263     map.emplace(L"xgetfile", L"uigetfile");
264     map.emplace(L"tk_getfile", L"uigetfile");
265     map.emplace(L"tk_savefile", L"uiputfile");
266     map.emplace(L"tk_getdir", L"uigetdir");
267     map.emplace(L"tk_choose", L"x_choose");
268     map.emplace(L"sci2excel", L"csvWrite");
269     map.emplace(L"excel2sci", L"csvRead");
270     map.emplace(L"x_message_modeless", L"messagebox");
271     map.emplace(L"sethomedirectory", L"SCIHOME,home");
272     map.emplace(L"getcwd", L"pwd");
273     map.emplace(L"xbasc", L"clf");
274     map.emplace(L"getf", L"exec");
275     map.emplace(L"NumTokens", L"tokens");
276     map.emplace(L"sort", L"gsort");
277     map.emplace(L"scilab_demos", L"demo_gui");
278     map.emplace(L"with_gtk", L"getversion");
279     map.emplace(L"readc_", L"input");
280
281     // Scilab 5.2.1 => 5.2.2
282     map.emplace(L"oldsave", L"save");
283     map.emplace(L"oldload", L"load");
284
285     // Scilab 5.2.0 => 5.2.1: nothing removed
286
287     // Scilab 5.1.1 => 5.2.0
288     map.emplace(L"lgfft", L"");
289
290     // Scilab 5.1.0 => 5.1.1: nothing removed
291
292     // Scilab 5.0.X => 5.1.0
293     map.emplace(L"mtlb_load", L"loadmatfile");
294     map.emplace(L"mtlb_save", L"savematfile");
295     map.emplace(L"xbasimp", L"toprint,xs2ps");
296     map.emplace(L"xg2ps", L"xs2ps");
297     map.emplace(L"hidetoolbar", L"toolbar(,\'off\')");
298     map.emplace(L"browsehelp", L"helpbrowser");
299     map.emplace(L"quapro", L"qpsolve");
300     map.emplace(L"%sp_eye", L"speye");
301     map.emplace(L"TCL_gcf", L"gcf");
302     map.emplace(L"TCL_scf", L"scf");
303     map.emplace(L"TK_EvalStr", L"TCL_EvalStr");
304     map.emplace(L"TK_GetVar", L"TCL_GetVar");
305     map.emplace(L"TK_SetVar", L"TCL_SetVar");
306     map.emplace(L"sciGUIhelp", L"help");
307     map.emplace(L"demoplay", L"demo_gui");
308     map.emplace(L"buttondialog", L"messagebox");
309     map.emplace(L"tk_getvalue", L"getvalue");
310
311     // Scilab 5.0.1 => 5.0.3: nothing removed
312
313     // Scilab 4.1.2 => 5.0
314     map.emplace(L"xclea", L"xfrect");
315     map.emplace(L"xaxis", L"drawaxis");
316     map.emplace(L"loadplots", L"");
317     map.emplace(L"xtape", L"");
318     map.emplace(L"loaddefaultbrowser", L"");
319     map.emplace(L"%browsehelp", L"");
320
321     return map;
322 }
323
324 std::unordered_map<std::wstring, std::shared_ptr<SLintChecker>> DeprecatedChecker::initPartDep()
325 {
326     std::unordered_map<std::wstring, std::shared_ptr<SLintChecker>> map;
327     map.emplace(L"svd", std::shared_ptr<SLintChecker>(new __Svd()));
328     map.emplace(L"mfprintf", std::shared_ptr<SLintChecker>(new __Mfprintf()));
329
330     return map;
331 }
332 }