499d981e778271e5e576f294b1c95034f4b3764e
[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  *
5  * Copyright (C) 2012 - 2016 - Scilab Enterprises
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     map.emplace(L"znaupd", L"eigs");
95     map.emplace(L"zneupd", L"eigs");
96     map.emplace(L"dseupd", L"eigs");
97     map.emplace(L"dneupd", L"eigs");
98     map.emplace(L"dnaupd", L"eigs");
99     map.emplace(L"dsaupd", L"eigs");
100     map.emplace(L"m_circle", L"");
101     map.emplace(L"lex_sort", L"gsort");
102     map.emplace(L"plot2d1", L"plot2d");
103     map.emplace(L"plotframe", L"");
104     map.emplace(L"xset", L"set");
105     map.emplace(L"xget", L"get");
106     map.emplace(L"xclear", L"");
107     map.emplace(L"havewindow", L"getscilabmode");
108     map.emplace(L"datatipSetStruct", L"");
109     map.emplace(L"datatipGetStruct", L"");
110     map.emplace(L"fcontour2d", L"contour2d");
111     map.emplace(L"fcontour", L"contour");
112     map.emplace(L"fac3d", L"plot3d");
113     map.emplace(L"str2code", L"");
114     map.emplace(L"code2str", L"");
115     map.emplace(L"perl", L"");
116     map.emplace(L"gspec", L"spec");
117     map.emplace(L"gschur", L"schur");
118     map.emplace(L"rafiter", L"taucs_chsolve");
119     map.emplace(L"numdiff", L"numderivative");
120     map.emplace(L"derivative", L"numderivative");
121     map.emplace(L"mvvacov", L"cov");
122
123     return map;
124 }
125
126 std::unordered_map<std::wstring, std::shared_ptr<SLintChecker>> DeprecatedChecker::initPartDep()
127 {
128     std::unordered_map<std::wstring, std::shared_ptr<SLintChecker>> map;
129     map.emplace(L"svd", std::shared_ptr<SLintChecker>(new __Svd()));
130     map.emplace(L"mfprintf", std::shared_ptr<SLintChecker>(new __Mfprintf()));
131
132     return map;
133 }
134 }